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.skado...@savoirfairelinux.com>
> Cc:Donggeun Kim <dg77....@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
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to