fat32 root directory handling
authorErik Hansen <erik@makarta.com>
Thu, 24 Mar 2011 09:15:37 +0000 (10:15 +0100)
committerRemy Bohmer <linux@bohmer.net>
Sat, 2 Apr 2011 07:38:24 +0000 (09:38 +0200)
commit3f270f42d7d87f681b4c500e94eabc3dfea03eb4
treee675585d6435bf8976f23d8873f034d0b522d512
parent56887e27aee57db866a877e60a9141caa32d4636
fat32 root directory handling

Fat directory handling didn't check reaching the end of the root directory. It
relied on a stop condition based on a directory entry with a name starting with
a '\0' character. This check in itself is wrong ('\0' indicates free entry, not
end_of_directory) but outside the scope of this fix. For FAT32, the end of the
rootdir is reached when the end of the cluster chain is reached. The code didn't
check this condition and started to read an incorrect cluster. This caused a
subsequent read request of a sector outside the range of the usb stick in
use. On its turn, the usb stick protested with a stall handshake.

Both FAT32 and non-FAT32 (FAT16/FAT12) end or rootdir checks have been put in.

Signed-off-by: Erik Hansen <erik@makarta.com>
fs/fat/fat.c