usbip: usbip_host_common: Use struct_size() in realloc()
Subsystems (2)
PATCH 1/1 usbip: usbip_host_common: Use struct_size() in realloc()
One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:
struct foo {
int stuff;
struct boo entry[];
};size = sizeof(struct foo) + count * sizeof(struct boo); instance = realloc(instance, size);
Instead of leaving these open-coded and prone to type mistakes, we can now use the new struct_size() helper:
size = struct_size(instance, entry, count);
or
instance = realloc(instance, struct_size(instance, entry, count));
Notice that, in this case, variable size is not necessary, hence it is removed.
This code was detected with the help of Coccinelle.
---
Notice that checkpatch reports the following warning:
WARNING: line over 80 characters
#57: FILE: tools/usb/usbip/libsrc/usbip_host_common.c:90:
+ edev = realloc(edev, struct_size(edev, uinf, edev->udev.bNumInterfaces));
The line above is 81-character long. So, I think we should be fine with that, instead of split it into two lines like:
edev = realloc(edev,
struct_size(edev, uinf, edev->udev.bNumInterfaces));
Thanks
--
Gustavo
tools/usb/usbip/libsrc/usbip_host_common.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
tools/usb/usbip/libsrc/usbip_host_common.c +1 -5
@@ -67,7 +67,6 @@ struct usbip_exported_device *usbip_exported_device_new( {struct usbip_exported_device *edev =NULL ;struct usbip_exported_device *edev_old; -size_t size;int i; edev =calloc (1 ,sizeof (struct usbip_exported_device ));
@@ -87,11 +86,8 @@ struct usbip_exported_device *usbip_exported_device_new( goto err;/* reallocate buffer to include usb interface data */ - size =sizeof (struct usbip_exported_device ) + - edev->udev.bNumInterfaces *sizeof (struct usbip_usb_interface ); - edev_old = edev; - edev =realloc (edev, size); + edev =realloc (edev,struct_size (edev, uinf, edev->udev.bNumInterfaces));if (!edev) { edev = edev_old;dbg ("realloc failed" );
Signature · 1 line
2.21.0
Hi all,
Sorry, please, drop this patch.
Thanks
--
Gustavo
Quoted 74 lines · Gustavo A. R. Silva
One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:
struct foo { int stuff; struct boo entry[]; };size = sizeof(struct foo) + count * sizeof(struct boo); instance =
realloc(instance, size);Instead of leaving these open-coded and prone to type mistakes, we can now use the new
struct_size()helper:size =
struct_size(instance, entry, count);or
instance =
realloc(instance, struct_size(instance, entry, count));Notice that, in this case, variable size is not necessary, hence it is removed.
This code was detected with the help of Coccinelle.
Signed-off-by Gustavo A. R. Silva <[email protected]>---
Notice that checkpatch reports the following warning:
WARNING: line over 80 characters
#57: FILE:tools/usb/usbip/libsrc/usbip_host_common.c:90:tools/usb/usbip/libsrc/usbip_host_common.c +1
-0+ edev =realloc (edev,struct_size (edev, uinf, edev->udev.bNumInterfaces));The line above is 81-character long. So, I think we should be fine with that, instead of split it into two lines like:
edev = realloc(edev,
struct_size(edev, uinf, edev->udev.bNumInterfaces));Thanks
--
Gustavotools/usb/usbip/libsrc/usbip_host_common.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)tools/usb/usbip/libsrc/usbip_host_common.c +1
-5@@ -67,7 +67,6 @@ struct usbip_exported_device *usbip_exported_device_new( {struct usbip_exported_device *edev =NULL ;struct usbip_exported_device *edev_old; -size_t size;int i; edev =calloc (1 ,sizeof (struct usbip_exported_device ));@@ -87,11 +86,8 @@ struct usbip_exported_device *usbip_exported_device_new( goto err;/* reallocate buffer to include usb interface data */ - size =sizeof (struct usbip_exported_device ) + - edev->udev.bNumInterfaces *sizeof (struct usbip_usb_interface ); - edev_old = edev; - edev =realloc (edev, size); + edev =realloc (edev,struct_size (edev, uinf, edev->udev.bNumInterfaces));if (!edev) { edev = edev_old;dbg ("realloc failed" );