summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Vasut <marex@denx.de>2025-04-30 18:45:51 +0200
committerTom Rini <trini@konsulko.com>2025-05-05 14:19:20 -0600
commit4ba2fe14f2cecf7b614220e8e19c1fcdda92b748 (patch)
treee29bdfe6cf6941ff1217d88d738941d9d02924c5
parent1c26f91a224b7ce222314b38c068acd1833599f4 (diff)
fs: exfat: Use strncpy() and bail on too long filenames
In case the filename is too long, longer than PATH_MAX - 1, it would overflow dirs->dirname array. Add missing check and also use strncpy() to prevent the overflow in any case. Fixes CID 550305: Security best practices violations (STRING_OVERFLOW) Signed-off-by: Marek Vasut <marex@denx.de>
-rw-r--r--fs/exfat/io.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/exfat/io.c b/fs/exfat/io.c
index c56f5675987..77cd2dfb6dc 100644
--- a/fs/exfat/io.c
+++ b/fs/exfat/io.c
@@ -720,6 +720,9 @@ int exfat_fs_opendir(const char *filename, struct fs_dir_stream **dirsp)
struct exfat_node *dnode;
int err;
+ if (strlen(filename) >= PATH_MAX)
+ return -ENAMETOOLONG;
+
err = exfat_lookup_realpath(&ctxt.ef, &dnode, filename);
if (err)
return err;
@@ -736,7 +739,7 @@ int exfat_fs_opendir(const char *filename, struct fs_dir_stream **dirsp)
if (!dirs)
return -ENOMEM;
- strcpy(dirs->dirname, filename);
+ strncpy(dirs->dirname, filename, PATH_MAX - 1);
dirs->offset = -1;
*dirsp = &dirs->fs_dirs;