[U-Boot] [PATCH 1/5] fs/fat/fat_write: Fix buffer alignments

Benoît Thébaudeau benoit.thebaudeau.dev at gmail.com
Wed Oct 7 21:48:56 CEST 2015


Hi Tom,

On Mon, Sep 28, 2015 at 5:22 PM, Tom Rini <trini at konsulko.com> wrote:
> On Mon, Sep 28, 2015 at 03:45:28PM +0200, Benoît Thébaudeau wrote:
>
>> set_cluster() was using a temporary buffer without enforcing its
>> alignment for DMA and cache. Moreover, it did not check the alignment of
>> the passed buffer, which can come directly from applicative code or from
>> the user.
>>
>> This could cause random data corruption, which has been observed on
>> i.MX25 writing to an SD card.
>>
>> Fix this by only passing ARCH_DMA_MINALIGN-aligned buffers to
>> disk_write(), which requires the introduction of a buffer bouncing
>> mechanism for the misaligned buffers passed to set_cluster().
>>
>> By the way, improve the handling of the corresponding return values from
>> disk_write():
>>  - print them with debug() in case of error,
>>  - consider that there is an error is disk_write() returns a smaller
>>    block count than the requested one, not only if its return value is
>>    negative.
>>
>> After this change, set_cluster() and get_cluster() are almost
>> symmetrical.
>>
>> Signed-off-by: Benoît Thébaudeau <benoit at wsystem.com>
>
> OK.  I know Stephen has a series to replace all of the FAT code for
> the next release once some performance issues are addressed.  But I'm
> inclined to take this series (after some reviews and so forth) for this
> release at least because this sounds like some bad bugs and more things
> are starting to rely on fatwrite functionality (for example, env saved
> as a file in FAT is getting common on community-style boards).

I agree, but there is not much review activity. Do you know anyone
else who might be interested in this and who should be Cc'ed?

Best regards,
Benoît


More information about the U-Boot mailing list