usb: functionfs: avoid memcpy() field overflow warning
PATCH 1/1 usb: functionfs: avoid memcpy() field overflow warning
From: Arnd Bergmann <[email protected]>
__ffs_func_bind_do_os_desc() copies both the CompatibleID and SubCompatibleID fields of the usb_ext_compat_desc structure into an array, which triggers a warning in the fortified memcpy():
In file included from drivers/usb/gadget/function/f_fs.c:17:
In file included from include/linux/string.h:254:include/linux/fortify-string.h:592:4: error: call to '__read_overflow2_field' declared with 'warning' attribute: detected read beyond size of field (2nd parameter); maybe use struct_group()? [-Werror,-Wattribute-warning]
__read_overflow2_field(q_size_field, size);
Usually we can avoid this by using a struct_group() inside of the structure definition, but this might cause problems in userspace since it is in a uapi header.
Just copy the two members individually.
--- drivers/usb/gadget/function/f_fs.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/usb/gadget/function/f_fs.c +3 -2
@@ -2933,8 +2933,9 @@ static int __ffs_func_bind_do_os_desc(enum ffs_os_desc_type type, t = &func->function.os_desc_table[desc->bFirstInterfaceNumber]; t->if_id = func->interfaces_nums[desc->bFirstInterfaceNumber];memcpy (t->os_desc->ext_compat_id, &desc->CompatibleID, -ARRAY_SIZE (desc->CompatibleID) + -ARRAY_SIZE (desc->SubCompatibleID)); +sizeof (desc->CompatibleID)); +memcpy (t->os_desc->ext_compat_id +sizeof (desc->CompatibleID), + &desc->SubCompatibleID,sizeof (desc->SubCompatibleID)); length =sizeof (*desc); }break ;
Signature · 1 line
2.39.2
Greg Kroah-Hartman
maintainerQuoted 6 lines · Arnd Bergmann
From: Arnd Bergmann <[email protected]>
__ffs_func_bind_do_os_desc()copies both the CompatibleID and SubCompatibleID fields of theusb_ext_compat_descstructure into an array, which triggers a warning in the fortifiedmemcpy():
Quoted 8 lines
In file included from
drivers/usb/gadget/function/f_fs.c:17:
In file included frominclude/linux/string.h:254:include/linux/fortify-string.h:592:4: error: call to '__read_overflow2_field' declared with 'warning' attribute: detected read beyond size of field (2nd parameter); maybe usestruct_group()? [-Werror,-Wattribute-warning]__read_overflow2_field(q_size_field, size);Usually we can avoid this by using a
struct_group()inside of the structure definition, but this might cause problems in userspace since it is in a uapi header.
We use this in other uapi .h files, what is unique about these fields that makes it so that they can not be used? Because it's not the last field?
thanks,
greg k-h
Quoted 12 lines · Greg Kroah-Hartman
Quoted 11 lines · Arnd Bergmann
From: Arnd Bergmann <[email protected]>
__ffs_func_bind_do_os_desc()copies both the CompatibleID and SubCompatibleID fields of theusb_ext_compat_descstructure into an array, which triggers a warning in the fortifiedmemcpy():In file included from
drivers/usb/gadget/function/f_fs.c:17:
In file included frominclude/linux/string.h:254:include/linux/fortify-string.h:592:4: error: call to '__read_overflow2_field' declared with 'warning' attribute: detected read beyond size of field (2nd parameter); maybe usestruct_group()? [-Werror,-Wattribute-warning]__read_overflow2_field(q_size_field, size);
Quoted 7 lines
Quoted 3 lines
Usually we can avoid this by using a
struct_group()inside of the structure definition, but this might cause problems in userspace since it is in a uapi header.We use this in other uapi .h files, what is unique about these fields that makes it so that they can not be used? Because it's not the last field?
It's probably ok, and I was overly cautious. I'll send a new version after some more testing.
Arnd