Skip to contentSkip to conversation

tools: hv: Fix a complier warning in the fcopy uio daemon

PATCH Applied Dexuan Cui 3 participants 6 messages Sep 10, 2024 – Dec 7, 2024

Subsystems (3)
lore
Share & tools
lore

Dexuan Cui

author maintainer
#0 lore raw

PATCH 1/1 tools: hv: Fix a complier warning in the fcopy uio daemon

hv_fcopy_uio_daemon.c:436:53: warning: '%s' directive output may be truncated writing up to 14 bytes into a region of size 10 [-Wformat-truncation=]
436 | snprintf(uio_dev_path, sizeof(uio_dev_path), "/dev/%s", uio_name);

Also added 'static' for the array 'desc[]'.

Fixes 82b0945ce2c2 ("tools: hv: Add new fcopy application based on uio driver")
---
 tools/hv/hv_fcopy_uio_daemon.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)
tools/hv/hv_fcopy_uio_daemon.c +3 -5
index 3ce316cc9f97..f7741af08a79 100644
@@ -35,8 +35,6 @@
 #define WIN8_SRV_MINOR		1
 #define WIN8_SRV_VERSION	(WIN8_SRV_MAJOR << 16 | WIN8_SRV_MINOR)
 
-#define MAX_FOLDER_NAME		15
-#define MAX_PATH_LEN		15
 #define FCOPY_UIO		"/sys/bus/vmbus/devices/eb765408-105f-49b6-b4aa-c123b64d17d4/uio"
 
 #define FCOPY_VER_COUNT		1
@@ -51,7 +49,7 @@ static const int fw_versions[] = {
 
 #define HV_RING_SIZE		0x4000 /* 16KB ring buffer size */
 
-unsigned char desc[HV_RING_SIZE];
+static unsigned char desc[HV_RING_SIZE];
 
 static int target_fd;
 static char target_fname[PATH_MAX];
@@ -402,8 +400,8 @@ int main(int argc, char *argv[])
 	struct vmbus_br txbr, rxbr;
 	void *ring;
 	uint32_t len = HV_RING_SIZE;
-	char uio_name[MAX_FOLDER_NAME] = {0};
-	char uio_dev_path[MAX_PATH_LEN] = {0};
+	char uio_name[NAME_MAX] = {0};
+	char uio_dev_path[PATH_MAX] = {0};
 
 	static struct option long_options[] = {
 		{"help",	no_argument,	   0,  'h' },
Signature · 1 line
2.25.1
#1 lore raw
Quoted 3 lines · Dexuan Cui

hv_fcopy_uio_daemon.c:436:53: warning: '%s' directive output may be truncated writing up to 14 bytes into a region of size 10 [-Wformat-truncation=]
436 | snprintf(uio_dev_path, sizeof(uio_dev_path), "/dev/%s", uio_name);

Makefile today doesn't have -Wformat-truncation flag enabled, I tried to add -Wformat-truncation=2 but I don't see any error in this file.

Do you mind sharing more details how you get this error ?

- Saurabh

author maintainer
#2 lore raw
Quoted 17 lines

From: Saurabh Singh Sengar <[email protected]>
Sent: Friday, September 13, 2024 12:31 AM
To: Dexuan Cui <[email protected]>
Cc: KY Srinivasan <[email protected]>; Haiyang Zhang <[email protected]>; Wei Liu <[email protected]>; Long Li <[email protected]>; Greg Kroah-Hartman <[email protected]>; open list:Hyper-V/Azure CORE AND DRIVERS <[email protected]>; open list <[email protected]>; [email protected]
Subject: Re: [PATCH] tools: hv: Fix a complier warning in the fcopy uio daemon

Quoted 1 line · Dexuan Cui

hv_fcopy_uio_daemon.c:436:53: warning: '%s' directive output may be

truncated

Quoted 2 lines

writing up to 14 bytes into a region of size 10 [-Wformat-truncation=]
436 | snprintf(uio_dev_path, sizeof(uio_dev_path), "/dev/%s",

Quoted 8 lines

uio_name);

Makefile today doesn't have -Wformat-truncation flag enabled, I tried to add -Wformat-truncation=2 but I don't see any error in this file.

Do you mind sharing more details how you get this error ?

- Saurabh

This repros in a Ubuntu 20.04 VM:

root@decui-u2004-2024-0920:~/linux/tools/hv# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
...
root@decui-u2004-2024-0920:~/linux/tools/hv# gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
root@decui-u2004-2024-0920:~/linux/tools/hv# make clean; make
...
make -f /root/linux/tools/build/Makefile.build dir=. obj=hv_fcopy_uio_daemon
make[1]: Entering directory '/root/linux/tools/hv'
  CC      hv_fcopy_uio_daemon.o
hv_fcopy_uio_daemon.c: In function 'main':
hv_fcopy_uio_daemon.c:443:53: warning: '%s' directive output may be truncated writing up to 14 bytes into a region of size 10 [-Wformat-truncation=]
  443 |  snprintf(uio_dev_path, sizeof(uio_dev_path), "/dev/%s", uio_name);
      |                                                     ^~   ~~~~~~~~
In file included from /usr/include/stdio.h:867,
                 from hv_fcopy_uio_daemon.c:20:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:67:10: note: '__builtin___snprintf_chk' output between 6 and 20 bytes into a destination of size 15
   67 |   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   68 |        __bos (__s), __fmt, __va_arg_pack ());
      |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  CC      vmbus_bufring.o
  LD      hv_fcopy_uio_daemon-in.o
make[1]: Leaving directory '/root/linux/tools/hv'
  LINK    hv_fcopy_uio_daemon
#3 lore raw
Quoted 51 lines · Dexuan Cui
Quoted 17 lines

From: Saurabh Singh Sengar <[email protected]>
Sent: Friday, September 13, 2024 12:31 AM
To: Dexuan Cui <[email protected]>
Cc: KY Srinivasan <[email protected]>; Haiyang Zhang <[email protected]>; Wei Liu <[email protected]>; Long Li <[email protected]>; Greg Kroah-Hartman <[email protected]>; open list:Hyper-V/Azure CORE AND DRIVERS <[email protected]>; open list <[email protected]>; [email protected]
Subject: Re: [PATCH] tools: hv: Fix a complier warning in the fcopy uio daemon

Quoted 1 line · Dexuan Cui

hv_fcopy_uio_daemon.c:436:53: warning: '%s' directive output may be

truncated

Quoted 2 lines

writing up to 14 bytes into a region of size 10 [-Wformat-truncation=]
436 | snprintf(uio_dev_path, sizeof(uio_dev_path), "/dev/%s",

Quoted 8 lines

uio_name);

Makefile today doesn't have -Wformat-truncation flag enabled, I tried to add -Wformat-truncation=2 but I don't see any error in this file.

Do you mind sharing more details how you get this error ?

- Saurabh

This repros in a Ubuntu 20.04 VM:

root@decui-u2004-2024-0920:~/linux/tools/hv# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
...
root@decui-u2004-2024-0920:~/linux/tools/hv# gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
root@decui-u2004-2024-0920:~/linux/tools/hv# make clean; make
...
make -f /root/linux/tools/build/Makefile.build dir=. obj=hv_fcopy_uio_daemon
make[1]: Entering directory '/root/linux/tools/hv'
  CC      hv_fcopy_uio_daemon.o
hv_fcopy_uio_daemon.c: In function 'main':
hv_fcopy_uio_daemon.c:443:53: warning: '%s' directive output may be truncated writing up to 14 bytes into a region of size 10 [-Wformat-truncation=]
  443 |  snprintf(uio_dev_path, sizeof(uio_dev_path), "/dev/%s", uio_name);
      |                                                     ^~   ~~~~~~~~
In file included from /usr/include/stdio.h:867,
                 from hv_fcopy_uio_daemon.c:20:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:67:10: note: '__builtin___snprintf_chk' output between 6 and 20 bytes into a destination of size 15
Quoted 8 lines
   67 |   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   68 |        __bos (__s), __fmt, __va_arg_pack ());
      |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  CC      vmbus_bufring.o
  LD      hv_fcopy_uio_daemon-in.o
make[1]: Leaving directory '/root/linux/tools/hv'
  LINK    hv_fcopy_uio_daemon

Thanks for the details. Looks this is the behaviour of old gcc versions. How about fixing it like this :

tools/hv/hv_fcopy_uio_daemon.c +1 -1
@@ -35,7 +35,7 @@
 #define WIN8_SRV_MINOR         1
 #define WIN8_SRV_VERSION       (WIN8_SRV_MAJOR << 16 | WIN8_SRV_MINOR)
 
-#define MAX_FOLDER_NAME                15
+#define MAX_FOLDER_NAME                10
 #define MAX_PATH_LEN           15
 
 

- Saurabh

#4 lore raw
Quoted 67 lines · Saurabh Singh Sengar
Quoted 51 lines · Dexuan Cui
Quoted 17 lines

From: Saurabh Singh Sengar <[email protected]>
Sent: Friday, September 13, 2024 12:31 AM
To: Dexuan Cui <[email protected]>
Cc: KY Srinivasan <[email protected]>; Haiyang Zhang <[email protected]>; Wei Liu <[email protected]>; Long Li <[email protected]>; Greg Kroah-Hartman <[email protected]>; open list:Hyper-V/Azure CORE AND DRIVERS <[email protected]>; open list <[email protected]>; [email protected]
Subject: Re: [PATCH] tools: hv: Fix a complier warning in the fcopy uio daemon

Quoted 1 line · Dexuan Cui

hv_fcopy_uio_daemon.c:436:53: warning: '%s' directive output may be

truncated

Quoted 2 lines

writing up to 14 bytes into a region of size 10 [-Wformat-truncation=]
436 | snprintf(uio_dev_path, sizeof(uio_dev_path), "/dev/%s",

Quoted 8 lines

uio_name);

Makefile today doesn't have -Wformat-truncation flag enabled, I tried to add -Wformat-truncation=2 but I don't see any error in this file.

Do you mind sharing more details how you get this error ?

- Saurabh

This repros in a Ubuntu 20.04 VM:

root@decui-u2004-2024-0920:~/linux/tools/hv# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
...
root@decui-u2004-2024-0920:~/linux/tools/hv# gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
root@decui-u2004-2024-0920:~/linux/tools/hv# make clean; make
...
make -f /root/linux/tools/build/Makefile.build dir=. obj=hv_fcopy_uio_daemon
make[1]: Entering directory '/root/linux/tools/hv'
  CC      hv_fcopy_uio_daemon.o
hv_fcopy_uio_daemon.c: In function 'main':
hv_fcopy_uio_daemon.c:443:53: warning: '%s' directive output may be truncated writing up to 14 bytes into a region of size 10 [-Wformat-truncation=]
  443 |  snprintf(uio_dev_path, sizeof(uio_dev_path), "/dev/%s", uio_name);
      |                                                     ^~   ~~~~~~~~
In file included from /usr/include/stdio.h:867,
                 from hv_fcopy_uio_daemon.c:20:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:67:10: note: '__builtin___snprintf_chk' output between 6 and 20 bytes into a destination of size 15
Quoted 8 lines
   67 |   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   68 |        __bos (__s), __fmt, __va_arg_pack ());
      |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  CC      vmbus_bufring.o
  LD      hv_fcopy_uio_daemon-in.o
make[1]: Leaving directory '/root/linux/tools/hv'
  LINK    hv_fcopy_uio_daemon

Thanks for the details. Looks this is the behaviour of old gcc versions. How about fixing it like this :

tools/hv/hv_fcopy_uio_daemon.c line 41

Quoted 8 lines
tools/hv/hv_fcopy_uio_daemon.c +1 -1
@@ -35,7 +35,7 @@
 #define WIN8_SRV_MINOR         1
 #define WIN8_SRV_VERSION       (WIN8_SRV_MAJOR << 16 | WIN8_SRV_MINOR)
 
-#define MAX_FOLDER_NAME                15
+#define MAX_FOLDER_NAME                10
 #define MAX_PATH_LEN           15
 
 

Had a offline discussion with Dexuan.
The above suggested approach saves few bytes of userspace memory, using standard macros for path and folder length would be preferable for better code readability

Please add,

- Saurabh

maintainer Applied
#5 lore raw
In reply to Dexuan Cui
Quoted 9 lines · Dexuan Cui

hv_fcopy_uio_daemon.c:436:53: warning: '%s' directive output may be truncated writing up to 14 bytes into a region of size 10 [-Wformat-truncation=]
436 | snprintf(uio_dev_path, sizeof(uio_dev_path), "/dev/%s", uio_name);

Also added 'static' for the array 'desc[]'.

Fixes 82b0945ce2c2 ("tools: hv: Add new fcopy application based on uio driver")

Applied to hyperv-fixes. Thanks.