From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefan Bruens Date: Sun, 11 Dec 2016 00:29:07 +0100 Subject: [U-Boot] [PATCH v1] fat: fatwrite: fix the command for FAT12 In-Reply-To: <1481309737-3740-1-git-send-email-philipp.skadorov@savoirfairelinux.com> References: <1481309737-3740-1-git-send-email-philipp.skadorov@savoirfairelinux.com> Message-ID: <5428089.MfhXLpiVuf@pebbles.site> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Freitag, 9. Dezember 2016 13:55:37 CET Philipp Skadorov wrote: > The u-boot command fatwrite empties FAT clusters from the beginning > till the end of the file. > Specifically for FAT12 it fails to detect the end of the file and goes > beyond the file bounds thus corrupting the file system. > > The users normally workaround this by re-formatting the partition as > FAT16/FAT32, like here: > https://github.com/FEDEVEL/openrex-uboot-v2015.10/issues/1 > > The patch is to check file bounds by already-existing macro that > accounts for FAT12. > The command then works correctly for all types of FAT. > > Signed-off-by: Philipp Skadorov > Cc:Donggeun Kim > --- > fs/fat/fat_write.c | 5 +---- > 1 file changed, 1 insertion(+), 4 deletions(-) > > diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c > index 40a3860..e4f600e 100644 > --- a/fs/fat/fat_write.c > +++ b/fs/fat/fat_write.c > @@ -670,16 +670,13 @@ static int clear_fatent(fsdata *mydata, __u32 entry) > { > __u32 fat_val; > > - while (1) { > + while (!CHECK_CLUST(entry, mydata->fatsize)) { > fat_val = get_fatent_value(mydata, entry); > if (fat_val != 0) > set_fatent_value(mydata, entry, 0); > else > break; > > - if (fat_val == 0xfffffff || fat_val == 0xffff) > - break; > - > entry = fat_val; > } NAK. This corrupts the file system, as set_fatent_value(...) has: switch (mydata->fatsize) { case 32: bufnum = entry / FAT32BUFSIZE; offset = entry - bufnum * FAT32BUFSIZE; break; case 16: bufnum = entry / FAT16BUFSIZE; offset = entry - bufnum * FAT16BUFSIZE; break; default: /* Unsupported FAT size */ return -1; } Kind regards, Stefan -- Stefan Br?ns / Bergstra?e 21 / 52062 Aachen home: +49 241 53809034 mobile: +49 151 50412019 work: +49 2405 49936-424