From patchwork Fri Apr 16 21:58:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1467380 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=secospa.onmicrosoft.com header.i=@secospa.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-secospa-onmicrosoft-com header.b=BT4fMryn; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4FMVTm1C92z9sPf for ; Sat, 17 Apr 2021 07:58:52 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id B62FB8021A; Fri, 16 Apr 2021 23:58:45 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=seco.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=secospa.onmicrosoft.com header.i=@secospa.onmicrosoft.com header.b="BT4fMryn"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 37E5C80C94; Fri, 16 Apr 2021 23:58:43 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,MSGID_FROM_MTA_HEADER,SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.2 Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on0613.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe0e::613]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 0C4568021A for ; Fri, 16 Apr 2021 23:58:39 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=seco.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=sean.anderson@seco.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fSq+ydsUieRYPcf2tVJp8M1l+QW6QxlixUEt5xLLOpGvU/LeSFehiP8XKKFt1HFyCiZnx3B1oX9pPypuBo3TO11J476/kdPGa4DsxtJZOh+BFGehho5pR59JiqUIGWn724EpjG6wqjXbA3ZSBnmv0Igan5RodObNivUhsd1eKcu6ttTvghvKLK2zHMxR3RWMn1gWbsCXmb5n9wusUyQgMlKqvIr2o+wXw8pwT8UNxD0PnbesIAgF5h0IYO8dhEEwG9DSgc0TManTnRxwU10UIREdlsjR2FlMMA02e4MknuEgQrL+OQRJLlFFdHe+65MzJKhNMMpaXJRGLUUk7oG+Kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dsjIzLuzNxro4QlSPWb7WfBxc8xV9LJbzkOj0vijXGA=; b=Hqjubp1EpiMsM5prY4sO9VV2WFqV07PFDy8hqsAg5GY9jPYOIMF00GxKkRUK6XhAqziBNJC9lu7s1DORoFufqRh6ovldV+FIjVPRFDdNcpDMZxgN91xn5w0IAUA29PAPB1MBQVa8yQ+Ki0bKkvdOHN3js2koUbmpf9/hNlgJ/o2e0xBm5WgKlyPfTEMeQEflxWQNx9YvRun1Si7BlES8ECWwjEX32NO6paIg38GfjCgOSzD/TFElEgiewg5numVqsYQqvA3V7cjJwBXXqhx+7rrNpmhpjNpPIawqzeKcRnklO/0o7vaVMYM2Ch3PWnswFjspvlglZSm1Xe/Gft0OIg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=secospa.onmicrosoft.com; s=selector2-secospa-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dsjIzLuzNxro4QlSPWb7WfBxc8xV9LJbzkOj0vijXGA=; b=BT4fMrynL8ASIoPGBkER+XASvGC87gXrNB6e8LJEk0TQc1xtGZHn0inF1knL2sxpApSXXsgmdqUEeBS50cUP5LSehs3+NdMgNkv/JzB97MvgcEFLhkddLwPjw1LYXJ2e3VuEWTWD6IAxdQSVaSdK2sqfvSaZMgcoeRjcNmemvG8= Authentication-Results: lists.denx.de; dkim=none (message not signed) header.d=none;lists.denx.de; dmarc=none action=none header.from=seco.com; Received: from DB7PR03MB4523.eurprd03.prod.outlook.com (2603:10a6:10:19::27) by DB9PR03MB7196.eurprd03.prod.outlook.com (2603:10a6:10:223::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.22; Fri, 16 Apr 2021 21:58:37 +0000 Received: from DB7PR03MB4523.eurprd03.prod.outlook.com ([fe80::9181:c45f:b367:9bdc]) by DB7PR03MB4523.eurprd03.prod.outlook.com ([fe80::9181:c45f:b367:9bdc%5]) with mapi id 15.20.4042.019; Fri, 16 Apr 2021 21:58:37 +0000 From: Sean Anderson To: u-boot@lists.denx.de, Lukasz Majewski Cc: Gary Bisson , Patrick Delaunay , Roman Kovalivskyi , Heiko Schocher , Simon Glass , Sean Anderson Subject: [PATCH] fastboot: Fix overflow when calculating chunk size Date: Fri, 16 Apr 2021 17:58:21 -0400 Message-Id: <20210416215821.3575989-1-sean.anderson@seco.com> X-Mailer: git-send-email 2.25.1 X-Originating-IP: [50.195.82.171] X-ClientProxiedBy: BL1PR13CA0038.namprd13.prod.outlook.com (2603:10b6:208:257::13) To DB7PR03MB4523.eurprd03.prod.outlook.com (2603:10a6:10:19::27) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from plantagenet.inhand.com (50.195.82.171) by BL1PR13CA0038.namprd13.prod.outlook.com (2603:10b6:208:257::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4065.8 via Frontend Transport; Fri, 16 Apr 2021 21:58:36 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 86c3ea8f-2153-4081-d142-08d90122c9d9 X-MS-TrafficTypeDiagnostic: DB9PR03MB7196: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:89; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ADxZ1/3Dj3pJyIK/IS92n34px/7K0aTyPNn6BCa821UCgxlrOsCvQXBhmG5SHik+t4oGiyH5xtwJ9+79iH7bCC4TMvQmboVa1L1iP8kIZ/aX971PWYG6L/UX1DLf4T5LO6++jid+7STnYliPWZO+Znt2wts2uBrOUPmIJ2HxXtfb+YmlC61e6Y5I42rOnUI28SpW3SaPcusjkJq9ucj4Avi/bn31kcvOrLQD2GAFZ2Q92P3gWBRoWCO2XN/o8FVNsKshammvfF6D+7Ifbtik67f+X42/m+gZvxA+WKJMguVdn2stE6FSyASp5aIG2Rj1fYFVk1io2T6n6Nx2s5zmpJxrIYbHcbmGz2FJuuO40ZvJ/bY4bink2rVSn+Ui8dSGIeHFg2QtGmgFq0gL1rzVHxQBz4NIff4kHwYmuoOPoD44Y7c4PzdBThBg4NrJkenPvR9DFiJiUrYbxlfl8KRYX+3C477aeaj13j3i9pOyvW3W5BIFromPcgFwCf+Vzro5UHCxiOWtAXM6iZrkH9Ng9C3qnody1UMYp/CT5B1mE/eGtEb+fPS1igC/VLjLiAaK2s7wYPpVJ8CnEkMwjl9GXYh2djGaVMK25goY8Di7N9vMXc7p2t4WYoN9Ha8g+V0lN/YhnX8d2TRMwO+O+ZgKhQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB7PR03MB4523.eurprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(346002)(396003)(366004)(376002)(136003)(39840400004)(6486002)(5660300002)(6512007)(478600001)(16526019)(86362001)(66556008)(186003)(66476007)(8676002)(2906002)(2616005)(6666004)(83380400001)(8936002)(36756003)(6506007)(38100700002)(44832011)(316002)(1076003)(6916009)(4326008)(26005)(52116002)(54906003)(107886003)(956004)(38350700002)(66946007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: 19VTCMS4aRNt+EqVSYnsIKcbZlcMnb+7l3L61wksSTGcCX49rxm4oRbgNiPaz5+0fscZmaaZbNPFvC1ef5VhCbI9ZhOG7iZsBkPWOofdGns8H0vb5JqQL3qqIkPCBqzsoAoRGELRx9sgaOPoNEiBlkkzP1MdrrfrlS9wN0HgrieUMce1sLoK6hgX7KR6/sMzVnyCL51EpLwbk8DPyuCbEb8Fm7NlHR2nXEdc+ZLPSY59hDEQRzDNoXjqBqF0AH47osuVg31wIsfWP3kSMglKNidDpARQJG8ROa4J+MMCh7UFGYXuTSvsgRgkrfotFK0Z/ImVTxGoy9LpUCY9s+oagR/M2Hqg/zLQ0IWVY0/8swCsIiibi3qJ1fWFVtysa87Gpv8ePJWTbAZy3hJFgZXz8AqrzHmaxRwy73qhD9zFcOBduKArwktn8ZVErFb4fGfaJ0VEXI1Z/776XOAS7xd+VdMnhjciwayWpP6WBICrV2DqUkCrEz+RMy22+Zn92daTUxpG3dC9HSoA6m+2w1E/UH3F9DhySl1Xp/5PseFQfWErJba7bEZED1tjp2l4/h0KsKWSh0+3SZdL7GokS+jgCg6qgJ1QRjHLqoSb1pcfux06j5eA8hjX+oVewfN8ZL23FNsuFdwA0HN53ic6h3Nu/d4gJfRPARU32VpWaHeM65V8WJupYb6ca6CTSrme2RGg0r7aTr0l2SV2IfTPPkZKtmHlt/G/hd/XOrEf70aXj65+Xjf66LYPYDrSb+yIRuQOb6wnlSsHgpO4rUcpI9E1xFaM2iEXGjkRmT6zuhqEB3eNygGj2OVwIYr7tks1Sp4SgJdhGzt+upFBQm9dbY3zEIOQp3FzKL/Glkul9S/m+hLdvOW+l03rBCGzN+GhMm1vO9V+JDJgpDsxm04DLvS2EDvhO5TrF26W01J06jIBW/kDlHX9cyyJlv8SYjolzv+rtWHUIfWxYPrcPnRu+vJRV9dmGfU4+1W4FwaqSyKpCFOtcXeR+IVud/FS81Hu2r2aigwGCd+zI3FYYZdz0MotjUcuHru4uKXppm1oBpbKUdK0NPGmEU9vQXsz1Qj5ej9WhfOQtZCHqTsIfRf7BA6QV7BGmgOtxizYAZCCyN+barAPyl9zFJ6yrZ7UYYGAx8QnL/lmvucykXaGDVLxh1kG+6aEMaStGOw2mCc02lCIlDMgrFYDJzlCNLrvCjnjvci+TbsYiQpQz37hQcNW69mVeuEqOZEDIsOsgZll5AMIEb7+wtU+Fj2QwJ25gdj1Fq7rc901/9tdFWEOEHbK5yhBVFW7ujRA9zJpLKPwyqLuRgO2KxfS3mNKOs45WsiXiQF7 X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: 86c3ea8f-2153-4081-d142-08d90122c9d9 X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4523.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Apr 2021 21:58:37.7956 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wkUQf+6Mp06T6RKmd9pOnVOMCf/cmO8ZuAAyuwhOdhFRbo53857li9VsmBCKHcFq1diPOdqAdTmQpRqboDNH/A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR03MB7196 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.4 at phobos.denx.de X-Virus-Status: Clean If a chunk was larger than 4GiB, then chunk_data_sz would overflow and blkcnt would not be calculated correctly. Upgrade it to a u64 and cast its multiplicands as well. Also fix bytes_written while we're at it. Signed-off-by: Sean Anderson Reviewed-by: Heiko Schocher --- lib/image-sparse.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/image-sparse.c b/lib/image-sparse.c index 187ac28cd3..52c8dcc08c 100644 --- a/lib/image-sparse.c +++ b/lib/image-sparse.c @@ -55,10 +55,10 @@ int write_sparse_image(struct sparse_storage *info, lbaint_t blk; lbaint_t blkcnt; lbaint_t blks; - uint32_t bytes_written = 0; + uint64_t bytes_written = 0; unsigned int chunk; unsigned int offset; - unsigned int chunk_data_sz; + uint64_t chunk_data_sz; uint32_t *fill_buf = NULL; uint32_t fill_val; sparse_header_t *sparse_header; @@ -132,7 +132,7 @@ int write_sparse_image(struct sparse_storage *info, sizeof(chunk_header_t)); } - chunk_data_sz = sparse_header->blk_sz * chunk_header->chunk_sz; + chunk_data_sz = ((u64)sparse_header->blk_sz) * chunk_header->chunk_sz; blkcnt = chunk_data_sz / info->blksz; switch (chunk_header->chunk_type) { case CHUNK_TYPE_RAW: @@ -162,7 +162,7 @@ int write_sparse_image(struct sparse_storage *info, return -1; } blk += blks; - bytes_written += blkcnt * info->blksz; + bytes_written += ((u64)blkcnt) * info->blksz; total_blocks += chunk_header->chunk_sz; data += chunk_data_sz; break; @@ -222,7 +222,7 @@ int write_sparse_image(struct sparse_storage *info, blk += blks; i += j; } - bytes_written += blkcnt * info->blksz; + bytes_written += ((u64)blkcnt) * info->blksz; total_blocks += chunk_data_sz / sparse_header->blk_sz; free(fill_buf); break; @@ -253,7 +253,7 @@ int write_sparse_image(struct sparse_storage *info, debug("Wrote %d blocks, expected to write %d blocks\n", total_blocks, sparse_header->total_blks); - printf("........ wrote %u bytes to '%s'\n", bytes_written, part_name); + printf("........ wrote %llu bytes to '%s'\n", bytes_written, part_name); if (total_blocks != sparse_header->total_blks) { info->mssg("sparse image write failure", response);