mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-29 23:53:55 +08:00
block/rnbd-clt-sysfs: Remove copy buffer overlap in rnbd_clt_get_path_name
cppcheck report the following error:
rnbd/rnbd-clt-sysfs.c:522:36: error: The variable 'buf' is used both
as a parameter and as destination in snprintf(). The origin and
destination buffers overlap. Quote from glibc (C-library)
documentation
(http://www.gnu.org/software/libc/manual/html_mono/libc.html#Formatted-Output-Functions):
"If copying takes place between objects that overlap as a result of a
call to sprintf() or snprintf(), the results are undefined."
[sprintfOverlappingData]
Fix it by initializing the buf variable in the first snprintf call.
Fixes: 91f4acb280
("block/rnbd-clt: support mapping two devices")
Signed-off-by: Dima Stepanov <dmitrii.stepanov@ionos.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Jack Wang <jinpu.wang@ionos.com>
Signed-off-by: Gioh Kim <gi-oh.kim@cloud.ionos.com>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Link: https://lore.kernel.org/r/20210419073722.15351-19-gi-oh.kim@ionos.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
503438a4f2
commit
3db7cf55d5
@ -514,11 +514,7 @@ static int rnbd_clt_get_path_name(struct rnbd_clt_dev *dev, char *buf,
|
|||||||
while ((s = strchr(pathname, '/')))
|
while ((s = strchr(pathname, '/')))
|
||||||
s[0] = '!';
|
s[0] = '!';
|
||||||
|
|
||||||
ret = snprintf(buf, len, "%s", pathname);
|
ret = snprintf(buf, len, "%s@%s", pathname, dev->sess->sessname);
|
||||||
if (ret >= len)
|
|
||||||
return -ENAMETOOLONG;
|
|
||||||
|
|
||||||
ret = snprintf(buf, len, "%s@%s", buf, dev->sess->sessname);
|
|
||||||
if (ret >= len)
|
if (ret >= len)
|
||||||
return -ENAMETOOLONG;
|
return -ENAMETOOLONG;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user