Message ID | 20250116160543.216913-1-andriy.shevchenko@linux.intel.com |
---|---|
State | New |
Headers | show |
Series | [v1,1/1] usb: hcd: Bump local buffer size in rh_string() | expand |
On Fri, Jan 17, 2025 at 03:42:27PM +0200, Andy Shevchenko wrote: > On Fri, Jan 17, 2025 at 07:11:46AM +0100, Greg Kroah-Hartman wrote: > > On Thu, Jan 16, 2025 at 06:05:43PM +0200, Andy Shevchenko wrote: > > > GCC is not happy about the buffer size: > > > > > > drivers/usb/core/hcd.c:441:48: error: ‘%s’ directive output may be truncated writing up to 64 bytes into a region of size between 35 and 99 [-Werror=format-truncation=] > > > 441 | snprintf (buf, sizeof buf, "%s %s %s", init_utsname()->sysname, > > > | ^~ > > > 442 | init_utsname()->release, hcd->driver->description); > > > | ~~~~~~~~~~~~~~~~~~~~~~~ > > > > > > Bump the size to get it enough for the possible strings. > > ... > > > > static unsigned > > > rh_string(int id, struct usb_hcd const *hcd, u8 *data, unsigned len) > > > { > > > - char buf[100]; > > > + char buf[160]; > > > char const *s; > > > static char const langids[4] = {4, USB_DT_STRING, 0x09, 0x04}; > > > > Worst case it's properly truncated so why do we need to worry about this > > "warning"? > > With CONFIG_WERROR=y it's a compilation error. My goal is to have > i386_defconfig and x86_64_defconfig to be compiled with `make W=1`. So you have to have W=1 enabled, right? On my normal builds, with CONFIG_WERROR=y enabled, I do not see this. > > And what compiler version is giving that, I don't see that > > here in my build testing. > > `make W=1` (and be sure that CONFIG_WERROR=y). Ah, ok, manual work here. And I guess the error is right, ->sysname could be 64 and release can also be 64 bytes long, so it would be truncated. thanks, greg k-h
On Fri, Jan 17, 2025 at 03:26:13PM +0100, Greg Kroah-Hartman wrote: > On Fri, Jan 17, 2025 at 03:42:27PM +0200, Andy Shevchenko wrote: > > On Fri, Jan 17, 2025 at 07:11:46AM +0100, Greg Kroah-Hartman wrote: > > > On Thu, Jan 16, 2025 at 06:05:43PM +0200, Andy Shevchenko wrote: > > > > GCC is not happy about the buffer size: > > > > > > > > drivers/usb/core/hcd.c:441:48: error: ‘%s’ directive output may be truncated writing up to 64 bytes into a region of size between 35 and 99 [-Werror=format-truncation=] > > > > 441 | snprintf (buf, sizeof buf, "%s %s %s", init_utsname()->sysname, > > > > | ^~ > > > > 442 | init_utsname()->release, hcd->driver->description); > > > > | ~~~~~~~~~~~~~~~~~~~~~~~ > > > > > > > > Bump the size to get it enough for the possible strings. ... > > > > static unsigned > > > > rh_string(int id, struct usb_hcd const *hcd, u8 *data, unsigned len) > > > > { > > > > - char buf[100]; > > > > + char buf[160]; > > > > char const *s; > > > > static char const langids[4] = {4, USB_DT_STRING, 0x09, 0x04}; > > > > > > Worst case it's properly truncated so why do we need to worry about this > > > "warning"? > > > > With CONFIG_WERROR=y it's a compilation error. My goal is to have > > i386_defconfig and x86_64_defconfig to be compiled with `make W=1`. > > So you have to have W=1 enabled, right? Yep! > On my normal builds, with CONFIG_WERROR=y enabled, I do not see this. > > > > And what compiler version is giving that, I don't see that > > > here in my build testing. > > > > `make W=1` (and be sure that CONFIG_WERROR=y). > > Ah, ok, manual work here. > > And I guess the error is right, ->sysname could be 64 and release can > also be 64 bytes long, so it would be truncated. Yeah... Should I update the commit message and issue v2?
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 0b2490347b9f..a75cf1f6d741 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c @@ -415,7 +415,7 @@ ascii2desc(char const *s, u8 *buf, unsigned len) static unsigned rh_string(int id, struct usb_hcd const *hcd, u8 *data, unsigned len) { - char buf[100]; + char buf[160]; char const *s; static char const langids[4] = {4, USB_DT_STRING, 0x09, 0x04};
GCC is not happy about the buffer size: drivers/usb/core/hcd.c:441:48: error: ‘%s’ directive output may be truncated writing up to 64 bytes into a region of size between 35 and 99 [-Werror=format-truncation=] 441 | snprintf (buf, sizeof buf, "%s %s %s", init_utsname()->sysname, | ^~ 442 | init_utsname()->release, hcd->driver->description); | ~~~~~~~~~~~~~~~~~~~~~~~ Bump the size to get it enough for the possible strings. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> --- drivers/usb/core/hcd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)