fs: fat: avoid NULL dereference when root dir is full
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Thu, 19 Nov 2020 11:24:44 +0000 (12:24 +0100)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Sun, 29 Nov 2020 04:18:16 +0000 (05:18 +0100)
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>
fs/fat/fat_write.c

index a2682b5..fc932df 100644 (file)
@@ -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;
        }