From patchwork Tue Sep 24 13:11:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 1166588 X-Patchwork-Delegate: matthias.bgg@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="vZIH7fUp"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 46d1qZ3P3nz9sDB for ; Tue, 24 Sep 2019 23:14:18 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 2C464C21E79; Tue, 24 Sep 2019 13:11:55 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=SPF_HELO_PASS, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 1ABCFC21E0D; Tue, 24 Sep 2019 13:11:26 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 38F4BC21D56; Tue, 24 Sep 2019 13:11:24 +0000 (UTC) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by lists.denx.de (Postfix) with ESMTPS id 0C1B0C21D8E for ; Tue, 24 Sep 2019 13:11:22 +0000 (UTC) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20190924131121euoutp01137910f5ad5965c52bb28b982e898b13~HYfC4S-gX0825608256euoutp015 for ; Tue, 24 Sep 2019 13:11:21 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20190924131121euoutp01137910f5ad5965c52bb28b982e898b13~HYfC4S-gX0825608256euoutp015 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1569330681; bh=j/hZVQOq1riFG4eLLBkezvkTQ2cWqgOHcjfRf1wjsw0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vZIH7fUp7tnrTw+Z50gNY+MVVbkluxHD6xHuCbvlwO3i3OTui7eIMC5rHs/x1gZQ5 KSyWi/77LJWqgnOBEv/RGg7zduqFfKR56dmzeT4TjCqgpWhuGAcWgbVCr1KAAM2m2n KrWyA/W4yN8oxX6Sb/BYID5JyUfU7ZEiaNvoSafg= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20190924131121eucas1p275429861832c675c6c193fecdbfe7bbc~HYfCg_WkU1156311563eucas1p2n; Tue, 24 Sep 2019 13:11:21 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 48.6B.04469.9F51A8D5; Tue, 24 Sep 2019 14:11:21 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20190924131120eucas1p248dafb68aaa45c6ebbb490069f885182~HYfCCAw4-2234122341eucas1p2u; Tue, 24 Sep 2019 13:11:20 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20190924131120eusmtrp2c58ca9ad99e7af4c1288ff4cf860cf49~HYfCBRAjX1458114581eusmtrp2I; Tue, 24 Sep 2019 13:11:20 +0000 (GMT) X-AuditID: cbfec7f2-54fff70000001175-c6-5d8a15f99ca9 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id E1.5D.04166.8F51A8D5; Tue, 24 Sep 2019 14:11:20 +0100 (BST) Received: from AMDC2765.digital.local (unknown [106.120.51.73]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20190924131120eusmtip2a260b71155c9dd9c23a71934b8ac393d~HYfBlQpIw0368303683eusmtip2W; Tue, 24 Sep 2019 13:11:20 +0000 (GMT) From: Marek Szyprowski To: u-boot@lists.denx.de Date: Tue, 24 Sep 2019 15:11:07 +0200 Message-Id: <20190924131111.1691-3-m.szyprowski@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190924131111.1691-1-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpileLIzCtJLcpLzFFi42LZduznOd2fol2xBvuOcFlsnLGe1eLGrzZW i+fvLjNZrD1yl91iweQnrBYb5r9lsZgx+SWbxdu9newOHB7zZp1g8Th7ZwejR9+WVYwe67dc ZfHY9MojgDWKyyYlNSezLLVI3y6BK2PatjcsBb/4K66sXMvSwPiRp4uRk0NCwETid9cnti5G Lg4hgRWMErtnHGaBcL4wSnQ/+wnlfGaUOLq1lRWuZdd+JojEckaJw0ceMoMkwFp27AoFsdkE DCW63naxgdgiAhISv/qvMoI0MAtsZ5Job73OApIQFvCR6Np0D8xmEVCVOHF8GxOIzStgI3H0 10QmiG3yEqs3HABbwClgK3H88iFWkEESAr/ZJE79hClykXix/yozhC0s8er4FnYIW0bi/875 TBANzYwSD8+tZYdwehglLjfNYISospY4fPwi0FgOoPs0Jdbv0ocIO0ps2vWECSQsIcAnceOt IEiYGcictG06M0SYV6KjTQiiWk1i1vF1cGsPXrgEdY6HxLpbEDcLCUxglFjxaznrBEb5WQjL FjAyrmIUTy0tzk1PLTbMSy3XK07MLS7NS9dLzs/dxAhMGaf/Hf+0g/HrpaRDjAIcjEo8vA6s XbFCrIllxZW5hxglOJiVRHg3abXFCvGmJFZWpRblxxeV5qQWH2KU5mBREuetZngQLSSQnliS mp2aWpBaBJNl4uCUamDcXL9gap2nml3LmzW77yjU1tje+uUzf9tLzS9nc7dLl8+c7F6uw/jY pCD/sb2z3uJTv4+um3nxf+pf296aqmM5dXZbE+/G1Ihl32Wd5Gh10b1o0tyGaScbj/oaFjXK +bUtlnfaOuNEj1K+T5SYWfSkhXt/ZDnfmHcoPNT0oPeZ2VKzbEo/fNihxFKckWioxVxUnAgA fIUkVBUDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrMLMWRmVeSWpSXmKPExsVy+t/xe7o/RLtiDQ480bbYOGM9q8WNX22s Fs/fXWayWHvkLrvFgslPWC02zH/LYjFj8ks2i7d7O9kdODzmzTrB4nH2zg5Gj74tqxg91m+5 yuKx6ZVHAGuUnk1RfmlJqkJGfnGJrVK0oYWRnqGlhZ6RiaWeobF5rJWRqZK+nU1Kak5mWWqR vl2CXsa0bW9YCn7xV1xZuZalgfEjTxcjJ4eEgInE7137mboYuTiEBJYySuw/uZwJIiEjcXJa AyuELSzx51oXG0TRJ0aJL3OmsYMk2AQMJbregiQ4OUQEJCR+9V9lBCliFtjNJHF91TFGkISw gI9E16Z7LCA2i4CqxInj28A28ArYSBz9NRFqm7zE6g0HmEFsTgFbieOXD4FtFgKqmX3kNdsE Rr4FjAyrGEVSS4tz03OLDfWKE3OLS/PS9ZLzczcxAgN427Gfm3cwXtoYfIhRgINRiYfXgbUr Vog1say4MvcQowQHs5II7yattlgh3pTEyqrUovz4otKc1OJDjKZAR01klhJNzgdGV15JvKGp obmFpaG5sbmxmYWSOG+HwMEYIYH0xJLU7NTUgtQimD4mDk6pBsasF06vTjS8mZSt7LFNudGh 7338jT3vitdeZ4vvf/N+cm3BL1uWr2d1HobOkF040f+JQ/KnBoaiBG1lTu+pAjseZe95P+d5 kJG7BGOxo/2enhiBAC+Np57TFnGX/w6I1/i95hynhlKnOR+Tcs63NTrXlSeEVQvv1RC+8fnl xxVJ7xuFwleumaXEUpyRaKjFXFScCAAkyoUudgIAAA== X-CMS-MailID: 20190924131120eucas1p248dafb68aaa45c6ebbb490069f885182 X-Msg-Generator: CA X-RootMTR: 20190924131120eucas1p248dafb68aaa45c6ebbb490069f885182 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20190924131120eucas1p248dafb68aaa45c6ebbb490069f885182 References: <20190924131111.1691-1-m.szyprowski@samsung.com> Cc: Matthias Brugger , Bartlomiej Zolnierkiewicz , Marek Szyprowski Subject: [U-Boot] [PATCH v2 2/6] fat: write: fix broken write at non-zero file offset X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Handling of the start file offset was broken in the current code. Although the code skipped the needed clusters, it then tried to continue write with current cluster set to EOF, what caused assertion. It also lacked adjusting filesize in case of writing at the end of file and adjusting in-cluster offset for partial overwrite. This patch fixes all those issues. Signed-off-by: Marek Szyprowski Reviewed-by: Lukasz Majewski --- fs/fat/fat_write.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index 6cfa5b4565..d7a814eb0c 100644 --- a/fs/fat/fat_write.c +++ b/fs/fat/fat_write.c @@ -756,14 +756,12 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, /* go to cluster at pos */ cur_pos = bytesperclust; while (1) { + newclust = get_fatent(mydata, curclust); if (pos <= cur_pos) break; - if (IS_LAST_CLUST(curclust, mydata->fatsize)) + if (IS_LAST_CLUST(newclust, mydata->fatsize)) break; - - newclust = get_fatent(mydata, curclust); - if (!IS_LAST_CLUST(newclust, mydata->fatsize) && - CHECK_CLUST(newclust, mydata->fatsize)) { + if (CHECK_CLUST(newclust, mydata->fatsize)) { debug("curclust: 0x%x\n", curclust); debug("Invalid FAT entry\n"); return -1; @@ -772,8 +770,9 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, cur_pos += bytesperclust; curclust = newclust; } - if (IS_LAST_CLUST(curclust, mydata->fatsize)) { + if (IS_LAST_CLUST(newclust, mydata->fatsize)) { assert(pos == cur_pos); + filesize -= pos; goto set_clusters; } @@ -814,6 +813,7 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer, else offset = pos - cur_pos; wsize = min_t(unsigned long long, actsize, filesize - cur_pos); + wsize -= offset; if (get_set_cluster(mydata, curclust, offset, buffer, wsize, &actsize)) { printf("Error get-and-setting cluster\n");