diff mbox series

[v1,1/1] usb: hcd: Bump local buffer size in rh_string()

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

Commit Message

Andy Shevchenko Jan. 16, 2025, 4:05 p.m. UTC
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(-)

Comments

Greg KH Jan. 17, 2025, 2:26 p.m. UTC | #1
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
Andy Shevchenko Jan. 17, 2025, 2:33 p.m. UTC | #2
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 mbox series

Patch

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};