diff options
Diffstat (limited to 'features/yaffs2/yaffs2-Fix-miscalculation-of-devname-buffer-length.patch')
-rw-r--r-- | features/yaffs2/yaffs2-Fix-miscalculation-of-devname-buffer-length.patch | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/features/yaffs2/yaffs2-Fix-miscalculation-of-devname-buffer-length.patch b/features/yaffs2/yaffs2-Fix-miscalculation-of-devname-buffer-length.patch new file mode 100644 index 00000000..79deb483 --- /dev/null +++ b/features/yaffs2/yaffs2-Fix-miscalculation-of-devname-buffer-length.patch @@ -0,0 +1,65 @@ +From dded404c66bb87f08216afd1e3c9d84359e80012 Mon Sep 17 00:00:00 2001 +From: He Zhe <zhe.he@windriver.com> +Date: Wed, 31 May 2023 14:01:07 +0800 +Subject: [PATCH] yaffs2: Fix miscalculation of devname buffer length + +The following build warning helps us find a real mishandling of array length. + +fs/yaffs2/yaffs_vfs.c:122:29: warning: argument to 'sizeof' in 'snprintf' call +is the same expression as the destination; did you mean to provide an explicit +length? [-Wsizeof-pointer-memaccess] + +If an array is passed as a function parameter it'll be treated as a simple +pointer and thus sizeof will return the length of a pointer rather than the +length of the array. + +Add and pass the buffer length to make it work correctly. + +Signed-off-by: He Zhe <zhe.he@windriver.com> +Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com> +--- + fs/yaffs2/yaffs_vfs.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/fs/yaffs2/yaffs_vfs.c b/fs/yaffs2/yaffs_vfs.c +index 140f7aa7a1a1..e9e29a41a680 100644 +--- a/fs/yaffs2/yaffs_vfs.c ++++ b/fs/yaffs2/yaffs_vfs.c +@@ -118,8 +118,8 @@ + + /* FIXME: use sb->s_id instead ? */ + //#define yaffs_devname(sb, buf) bdevname(sb->s_bdev, buf) +-static inline char* yaffs_devname(struct super_block *sb, char *buf) { +- snprintf(buf, sizeof(buf), "%pg", sb->s_bdev); ++static inline char* yaffs_devname(struct super_block *sb, char *buf, unsigned long len) { ++ snprintf(buf, len, "%pg", sb->s_bdev); + return buf; + } + +@@ -2944,12 +2944,12 @@ static struct super_block *yaffs_internal_read_super(int yaffs_version, + + if (!sb->s_dev) + printk(KERN_INFO "yaffs: sb->s_dev is NULL\n"); +- else if (!yaffs_devname(sb, devname_buf)) ++ else if (!yaffs_devname(sb, devname_buf, sizeof(devname_buf))) + printk(KERN_INFO "yaffs: devname is NULL\n"); + else + printk(KERN_INFO "yaffs: dev is %d name is \"%s\" %s\n", + sb->s_dev, +- yaffs_devname(sb, devname_buf), read_only ? "ro" : "rw"); ++ yaffs_devname(sb, devname_buf, sizeof(devname_buf)), read_only ? "ro" : "rw"); + + if (!data_str) + data_str = ""; +@@ -2974,7 +2974,7 @@ static struct super_block *yaffs_internal_read_super(int yaffs_version, + yaffs_trace(YAFFS_TRACE_ALWAYS, + "yaffs: Attempting MTD mount of %u.%u,\"%s\"", + MAJOR(sb->s_dev), MINOR(sb->s_dev), +- yaffs_devname(sb, devname_buf)); ++ yaffs_devname(sb, devname_buf, sizeof(devname_buf))); + + + mtd = yaffs_get_mtd_device(sb->s_dev); +-- +2.34.1 + |