From: Heinrich Schuchardt Date: Sat, 30 Jan 2021 10:08:21 +0000 (+0100) Subject: fs: fat: must not write directory '.' and '..' X-Git-Url: http://git.dujemihanovic.xyz/%22/img/sics.gif/%22/static/git-favicon.png?a=commitdiff_plain;h=0be286cd6de995d6249508ebde6cfb8066045d77;p=u-boot.git fs: fat: must not write directory '.' and '..' 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 --- diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index a9b9fa5d68..8945649977 100644 --- a/fs/fat/fat_write.c +++ b/fs/fat/fat_write.c @@ -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;