diff options
author | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2020-11-19 12:24:44 +0100 |
---|---|---|
committer | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2020-11-29 05:18:16 +0100 |
commit | 661d2238688c25f676aa18a7f866ff1cd285ff3d (patch) | |
tree | 8b94207b8dacbc7370398492f30e2d9133ef420d /fs | |
parent | 7889951d0f56eab746a7c8fde350a022ba0361ca (diff) | |
download | u-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.c | 5 |
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; } |