aboutsummaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2020-11-19 12:24:44 +0100
committerHeinrich Schuchardt <xypron.glpk@gmx.de>2020-11-29 05:18:16 +0100
commit661d2238688c25f676aa18a7f866ff1cd285ff3d (patch)
tree8b94207b8dacbc7370398492f30e2d9133ef420d /fs
parent7889951d0f56eab746a7c8fde350a022ba0361ca (diff)
downloadu-boot-661d2238688c25f676aa18a7f866ff1cd285ff3d.zip
u-boot-661d2238688c25f676aa18a7f866ff1cd285ff3d.tar.gz
u-boot-661d2238688c25f676aa18a7f866ff1cd285ff3d.tar.bz2
fs: fat: avoid NULL dereference when root dir is full
When trying to create a file in the full root directory of a FAT32 filesystem a NULL dereference can be observed. When the root directory of a FAT16 filesystem is full fill_dir_slot() must return -1 to signal that a new directory entry could not be allocated. Fixes: cd2d727fff7e ("fs: fat: allocate a new cluster for root directory of fat32") Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Diffstat (limited to 'fs')
-rw-r--r--fs/fat/fat_write.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c
index a2682b5..fc932df 100644
--- a/fs/fat/fat_write.c
+++ b/fs/fat/fat_write.c
@@ -260,9 +260,8 @@ fill_dir_slot(fat_itr *itr, const char *l_name)
flush_dir(itr);
/* allocate a cluster for more entries */
- if (!fat_itr_next(itr))
- if (!itr->dent &&
- (!itr->is_root || itr->fsdata->fatsize == 32) &&
+ if (!fat_itr_next(itr) && !itr->dent)
+ if ((itr->is_root && itr->fsdata->fatsize != 32) ||
new_dir_table(itr))
return -1;
}