]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
fs: fat: must not write directory '.' and '..'
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Sat, 30 Jan 2021 10:08:21 +0000 (11:08 +0100)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Wed, 3 Feb 2021 10:10:37 +0000 (11:10 +0100)
Directories or files called '.' or '..' cannot be created or written to
in any directory. Move the test to normalize_longname() to check this
early.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
fs/fat/fat_write.c

index a9b9fa5d680435044da2d9278d7c69e00e87e21e..89456499778a2aca692076f3a739aa7ef14bad69 100644 (file)
@@ -1259,8 +1259,10 @@ again:
 static int normalize_longname(char *l_filename, const char *filename)
 {
        const char *p, illegal[] = "<>:\"/\\|?*";
+       size_t len;
 
-       if (strlen(filename) >= VFAT_MAXLEN_BYTES)
+       len = strlen(filename);
+       if (!len || len >= VFAT_MAXLEN_BYTES || filename[len - 1] == '.')
                return -1;
 
        for (p = filename; *p; ++p) {
@@ -1348,15 +1350,6 @@ int file_fat_write_at(const char *filename, loff_t pos, void *buffer,
                char shortname[SHORT_NAME_SIZE];
                int ndent;
 
-               if (itr->is_root) {
-                       /* root dir cannot have "." or ".." */
-                       if (!strcmp(l_filename, ".") ||
-                           !strcmp(l_filename, "..")) {
-                               ret = -EINVAL;
-                               goto exit;
-                       }
-               }
-
                if (pos) {
                        /* No hole allowed */
                        ret = -EINVAL;