diff options
Diffstat (limited to 'tools/dosfstools/patches/0012-fsck.fat-Fix-read-beyond-end-of-array-on-FAT12.patch')
-rw-r--r-- | tools/dosfstools/patches/0012-fsck.fat-Fix-read-beyond-end-of-array-on-FAT12.patch | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/tools/dosfstools/patches/0012-fsck.fat-Fix-read-beyond-end-of-array-on-FAT12.patch b/tools/dosfstools/patches/0012-fsck.fat-Fix-read-beyond-end-of-array-on-FAT12.patch deleted file mode 100644 index cfc5db507a..0000000000 --- a/tools/dosfstools/patches/0012-fsck.fat-Fix-read-beyond-end-of-array-on-FAT12.patch +++ /dev/null @@ -1,54 +0,0 @@ -From a41fc323f2ef38f884954a4ba3773a296fd809f8 Mon Sep 17 00:00:00 2001 -From: Andreas Bombe <aeb@debian.org> -Date: Wed, 11 Mar 2015 21:45:04 +0100 -Subject: [PATCH 12/14] fsck.fat: Fix read beyond end of array on FAT12 - -When a FAT12 filesystem contains an odd number of clusters, setting the -last cluster with set_fat() will trigger a read of the next entry, -which does not exist in the fat array allocated for this. - -Round up the allocation to an even number of FAT entries for FAT12 so -that this is fixed without introducing special casing in get_fat(). - -Signed-off-by: Andreas Bombe <aeb@debian.org> ---- - src/fat.c | 14 +++++++++++--- - 1 file changed, 11 insertions(+), 3 deletions(-) - -diff --git a/src/fat.c b/src/fat.c -index 027c586..5a92f56 100644 ---- a/src/fat.c -+++ b/src/fat.c -@@ -80,7 +80,7 @@ void get_fat(FAT_ENTRY * entry, void *fat, uint32_t cluster, DOS_FS * fs) - */ - void read_fat(DOS_FS * fs) - { -- int eff_size; -+ int eff_size, alloc_size; - uint32_t i; - void *first, *second = NULL; - int first_ok, second_ok; -@@ -96,10 +96,18 @@ void read_fat(DOS_FS * fs) - - total_num_clusters = fs->clusters + 2UL; - eff_size = (total_num_clusters * fs->fat_bits + 7) / 8ULL; -- first = alloc(eff_size); -+ -+ if (fs->fat_bits != 12) -+ alloc_size = eff_size; -+ else -+ /* round up to an even number of FAT entries to avoid special -+ * casing the last entry in get_fat() */ -+ alloc_size = (total_num_clusters * 12 + 23) / 24 * 3; -+ -+ first = alloc(alloc_size); - fs_read(fs->fat_start, eff_size, first); - if (fs->nfats > 1) { -- second = alloc(eff_size); -+ second = alloc(alloc_size); - fs_read(fs->fat_start + fs->fat_size, eff_size, second); - } - if (second && memcmp(first, second, eff_size) != 0) { --- -1.9.1 - |