[U-Boot] [PATCH v1] fat: fatwrite: fix the command for FAT12
Stefan Bruens
stefan.bruens at rwth-aachen.de
Sun Dec 11 00:29:07 CET 2016
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 <philipp.skadorov at savoirfairelinux.com>
> Cc:Donggeun Kim <dg77.kim at samsung.com>
> ---
> 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
More information about the U-Boot
mailing list