[U-Boot] [PATCH 1/1] fat: FAT sector offsets overflow on large disks and/or FAT partitions

Aaron Williams Aaron.Williams at cavium.com
Thu May 3 04:17:41 CEST 2012


This patch fixes several issues where sector offsets can overflow due to
being limited to 16-bits.  There are many cases which can cause an
overflow, including large FAT32 partitions and partitions that start at
a sufficiently large offset on the storage device.

Numerous issues were observed and fixed when a 64GB FAT32 filesystem was
accessed due to truncation.

Signed-off-by: Aaron Williams <aaron.williams at caviumnetworks.com>
---
 include/fat.h |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/include/fat.h b/include/fat.h
index 4c92442..7215628 100644
--- a/include/fat.h
+++ b/include/fat.h
@@ -178,12 +178,12 @@ typedef struct dir_slot {
 typedef struct {
        __u8    *fatbuf;        /* Current FAT buffer */
        int     fatsize;        /* Size of FAT in bits */
-       __u16   fatlength;      /* Length of FAT in sectors */
-       __u16   fat_sect;       /* Starting sector of the FAT */
-       __u16   rootdir_sect;   /* Start sector of root directory */
-       __u16   sect_size;      /* Size of sectors in bytes */
+       __u32   fat_sect;       /* Starting sector of the FAT */
+       __u32   rootdir_sect;   /* Start sector of root directory */
+       __u32   fatlength;      /* Length of FAT in sectors */
        __u16   clust_size;     /* Size of clusters in sectors */
-       short   data_begin;     /* The sector of the first cluster, can be negative */
+       __u16   sect_size;      /* Size of sectors in bytes */
+       int     data_begin;     /* The sector of the first cluster, can be negative */
        int     fatbufnum;      /* Used by get_fatent, init to -1 */
 } fsdata;
 
-- 
1.7.7




More information about the U-Boot mailing list