[U-Boot] [PATCH v1] fat: fatwrite: fix the command for FAT12
Benoît Thébaudeau
benoit.thebaudeau.dev at gmail.com
Sun Dec 11 16:05:31 CET 2016
Dear Stefan Brüns,
On Sun, Dec 11, 2016 at 12:29 AM, Stefan Bruens
<stefan.bruens at rwth-aachen.de> wrote:
> 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;
> }
So this patch can be kept, but it needs to be combined with a new one
in a series to fully fix fatwrite for FAT12.
Best regards,
Benoît
More information about the U-Boot
mailing list