mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
Fix checking fat32 cluster size.
This fixes the cluster size tests in the FAT32 file system. The current implementation of VFAT support doesn't work if the referred cluster has an offset > 16bit representation, causing "fatload" and "fatls" commands etc. to fail. Signed-off-by: michael trimarchi <trimarchi@gandalf.sssup.it>
This commit is contained in:
parent
661bad63a0
commit
8ce4e5c2c0
2 changed files with 6 additions and 5 deletions
|
@ -352,7 +352,7 @@ get_contents(fsdata *mydata, dir_entry *dentptr, __u8 *buffer,
|
|||
newclust = get_fatent(mydata, endclust);
|
||||
if((newclust -1)!=endclust)
|
||||
goto getit;
|
||||
if (newclust <= 0x0001 || newclust >= 0xfff0) {
|
||||
if (CHECK_CLUST(newclust, mydata->fatsize)) {
|
||||
FAT_DPRINT("curclust: 0x%x\n", newclust);
|
||||
FAT_DPRINT("Invalid FAT entry\n");
|
||||
return gotsize;
|
||||
|
@ -387,7 +387,7 @@ getit:
|
|||
filesize -= actsize;
|
||||
buffer += actsize;
|
||||
curclust = get_fatent(mydata, endclust);
|
||||
if (curclust <= 0x0001 || curclust >= 0xfff0) {
|
||||
if (CHECK_CLUST(curclust, mydata->fatsize)) {
|
||||
FAT_DPRINT("curclust: 0x%x\n", curclust);
|
||||
FAT_ERROR("Invalid FAT entry\n");
|
||||
return gotsize;
|
||||
|
@ -459,7 +459,7 @@ get_vfatname(fsdata *mydata, int curclust, __u8 *cluster,
|
|||
|
||||
slotptr--;
|
||||
curclust = get_fatent(mydata, curclust);
|
||||
if (curclust <= 0x0001 || curclust >= 0xfff0) {
|
||||
if (CHECK_CLUST(curclust, mydata->fatsize)) {
|
||||
FAT_DPRINT("curclust: 0x%x\n", curclust);
|
||||
FAT_ERROR("Invalid FAT entry\n");
|
||||
return -1;
|
||||
|
@ -652,7 +652,7 @@ static dir_entry *get_dentfromdir (fsdata * mydata, int startsect,
|
|||
return retdent;
|
||||
}
|
||||
curclust = get_fatent (mydata, curclust);
|
||||
if (curclust <= 0x0001 || curclust >= 0xfff0) {
|
||||
if (CHECK_CLUST(curclust, mydata->fatsize)) {
|
||||
FAT_DPRINT ("curclust: 0x%x\n", curclust);
|
||||
FAT_ERROR ("Invalid FAT entry\n");
|
||||
return NULL;
|
||||
|
|
|
@ -111,7 +111,8 @@
|
|||
#define START(dent) (FAT2CPU16((dent)->start) \
|
||||
+ (mydata->fatsize != 32 ? 0 : \
|
||||
(FAT2CPU16((dent)->starthi) << 16)))
|
||||
|
||||
#define CHECK_CLUST(x, fatsize) ((x) <= 1 || \
|
||||
(x) >= ((fatsize) != 32 ? 0xfff0 : 0xffffff0))
|
||||
|
||||
typedef struct boot_sector {
|
||||
__u8 ignored[3]; /* Bootstrap code */
|
||||
|
|
Loading…
Reference in a new issue