block/rnbd-clt: fix overlapping snprintf arguments
Subsystems (2)
PATCH 1/1 block/rnbd-clt: fix overlapping snprintf arguments
From: Arnd Bergmann <[email protected]>
The -Wrestrict warning (disabled by default) points out undefined behavior calling snprintf():
drivers/block/rnbd/rnbd-clt-sysfs.c: In function 'rnbd_clt_get_path_name':drivers/block/rnbd/rnbd-clt-sysfs.c:486:8: error: 'snprintf' argument 4 overlaps destination object 'buf' [-Werror=restrict]
486 | ret = snprintf(buf, len, "%s@%s", buf, dev->sess->sessname);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~drivers/block/rnbd/rnbd-clt-sysfs.c:472:67: note: destination object referenced by 'restrict'-qualified argument 1 was declared here
472 | static int rnbd_clt_get_path_name(struct rnbd_clt_dev *dev, char *buf,
| ~~~~~~^~~
This can be simplified by using a single snprintf() to print the whole buffer, avoiding the undefined behavior.
--- drivers/block/rnbd/rnbd-clt-sysfs.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
drivers/block/rnbd/rnbd-clt-sysfs.c +1 -5
@@ -479,11 +479,7 @@ static int rnbd_clt_get_path_name(struct rnbd_clt_dev *dev, char *buf,while ((s =strchr (pathname,'/' ))) s[0 ] ='!' ; - ret =snprintf (buf, len,"%s" , pathname); -if (ret >= len) -return -ENAMETOOLONG ; - - ret =snprintf (buf, len,"%s@%s" , buf, dev->sess->sessname); + ret =snprintf (buf, len,"%s@%s" , pathname, dev->sess->sessname);if (ret >= len)return -ENAMETOOLONG ;
Signature · 1 line
2.29.2
Jinpu Wang
maintainerQuoted 41 lines · Arnd Bergmann
From: Arnd Bergmann <[email protected]>
The -Wrestrict warning (disabled by default) points out undefined behavior calling
snprintf():
drivers/block/rnbd/rnbd-clt-sysfs.c: In function 'rnbd_clt_get_path_name':drivers/block/rnbd/rnbd-clt-sysfs.c:486:8: error: 'snprintf' argument 4 overlaps destination object 'buf' [-Werror=restrict]486 | ret = snprintf(buf, len, "%s@%s", buf, dev->sess->sessname); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/block/rnbd/rnbd-clt-sysfs.c:472:67: note: destination object referenced by 'restrict'-qualified argument 1 was declared here
472 | static int rnbd_clt_get_path_name(structrnbd_clt_dev*dev, char *buf,
| ~~~~~~^~~This can be simplified by using a single
snprintf()to print the whole buffer, avoiding the undefined behavior.Fixes 91f4acb2801c ("block/rnbd-clt: support mapping two devices with the same name from different servers")Signed-off-by Arnd Bergmann <[email protected]>--- drivers/block/rnbd/rnbd-clt-sysfs.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)drivers/block/rnbd/rnbd-clt-sysfs.c +1
-6@@ -479,11 +479,7 @@ static int rnbd_clt_get_path_name(struct rnbd_clt_dev *dev, char *buf,while ((s =strchr (pathname,'/' ))) s[0 ] ='!' ; - ret =snprintf (buf, len,"%s" , pathname); -if (ret >= len) -return -ENAMETOOLONG ; - - ret =snprintf (buf, len,"%s@%s" , buf, dev->sess->sessname); + ret =snprintf (buf, len,"%s@%s" , pathname, dev->sess->sessname);if (ret >= len)return -ENAMETOOLONG ; --
Quoted 2 lines
2.29.2
Thanks Arnd, We have a same patch will send out soon as part of a bigger patchset.