usb: core: config: Use struct_size() in kzalloc()
PATCH 1/1 usb: core: config: Use struct_size() in kzalloc()
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 = kzalloc(size, GFP_KERNEL);
Instead of leaving these open-coded and prone to type mistakes, we can now use the new struct_size() helper:
instance = kzalloc(struct_size(instance, entry, count), GFP_KERNEL);
Notice that, in this case, variable len 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]>
--- drivers/usb/core/config.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/usb/core/config.c +3 -3
@@ -552,7 +552,7 @@ static int usb_parse_configuration(struct usb_device *dev, int cfgidx,unsigned char *buffer2;int size2;struct usb_descriptor_header *header; -int len, retval; +int retval;u8 inums[USB_MAXINTERFACES ], nalts[USB_MAXINTERFACES ];unsigned iad_num =0 ;
@@ -707,8 +707,8 @@ static int usb_parse_configuration(struct usb_device *dev, int cfgidx, nalts[i] = j =USB_MAXALTSETTING ; } - len =sizeof (*intfc) +sizeof (struct usb_host_interface ) * j; - config->intf_cache[i] = intfc =kzalloc (len,GFP_KERNEL ); + intfc =kzalloc (struct_size (intfc, altsetting, j),GFP_KERNEL ); + config->intf_cache[i] = intfc;if (!intfc)return -ENOMEM ;kref_init (&intfc->ref);