diff mbox

usb: typec: avoid format-overflow warning

Message ID 20180706132843.51206-1-arnd@arndb.de (mailing list archive)
State New, archived
Headers show

Commit Message

Arnd Bergmann July 6, 2018, 1:28 p.m. UTC
gcc-8 points out that the fix-byte buffer might be too small if
desc->mode is a three-digit number:

drivers/usb/typec/class.c: In function 'typec_register_altmode':
drivers/usb/typec/class.c:502:32: error: '%d' directive writing between 1 and 3 bytes into a region of size 2 [-Werror=format-overflow=]
  sprintf(alt->group_name, "mode%d", desc->mode);
                                ^~
drivers/usb/typec/class.c:502:27: note: directive argument in the range [0, 255]
  sprintf(alt->group_name, "mode%d", desc->mode);
                           ^~~~~~~~
drivers/usb/typec/class.c:502:2: note: 'sprintf' output between 6 and 8 bytes into a destination of size 6
  sprintf(alt->group_name, "mode%d", desc->mode);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I assume this cannot happen in practice, but we can simply make the
string long enough to avoid the warning. This uses the two padding
bytes that already exist after the string.

Fixes: 4ab8c18d4d67 ("usb: typec: Register a device for every mode")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 drivers/usb/typec/bus.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Heikki Krogerus July 9, 2018, 8:27 a.m. UTC | #1
On Fri, Jul 06, 2018 at 03:28:32PM +0200, Arnd Bergmann wrote:
> gcc-8 points out that the fix-byte buffer might be too small if
> desc->mode is a three-digit number:
> 
> drivers/usb/typec/class.c: In function 'typec_register_altmode':
> drivers/usb/typec/class.c:502:32: error: '%d' directive writing between 1 and 3 bytes into a region of size 2 [-Werror=format-overflow=]
>   sprintf(alt->group_name, "mode%d", desc->mode);
>                                 ^~
> drivers/usb/typec/class.c:502:27: note: directive argument in the range [0, 255]
>   sprintf(alt->group_name, "mode%d", desc->mode);
>                            ^~~~~~~~
> drivers/usb/typec/class.c:502:2: note: 'sprintf' output between 6 and 8 bytes into a destination of size 6
>   sprintf(alt->group_name, "mode%d", desc->mode);
>   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
> I assume this cannot happen in practice, but we can simply make the
> string long enough to avoid the warning. This uses the two padding
> bytes that already exist after the string.
> 
> Fixes: 4ab8c18d4d67 ("usb: typec: Register a device for every mode")
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>

Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
>  drivers/usb/typec/bus.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/typec/bus.h b/drivers/usb/typec/bus.h
> index 62aaf8b56bde..db40e61d8b72 100644
> --- a/drivers/usb/typec/bus.h
> +++ b/drivers/usb/typec/bus.h
> @@ -16,7 +16,7 @@ struct altmode {
>  	enum typec_port_data		roles;
>  
>  	struct attribute		*attrs[5];
> -	char				group_name[6];
> +	char				group_name[8];
>  	struct attribute_group		group;
>  	const struct attribute_group	*groups[2];
>  

Thanks,
diff mbox

Patch

diff --git a/drivers/usb/typec/bus.h b/drivers/usb/typec/bus.h
index 62aaf8b56bde..db40e61d8b72 100644
--- a/drivers/usb/typec/bus.h
+++ b/drivers/usb/typec/bus.h
@@ -16,7 +16,7 @@  struct altmode {
 	enum typec_port_data		roles;
 
 	struct attribute		*attrs[5];
-	char				group_name[6];
+	char				group_name[8];
 	struct attribute_group		group;
 	const struct attribute_group	*groups[2];