53 lines
1.7 KiB
Diff
53 lines
1.7 KiB
Diff
|
From eeca7606dd6e2445f505903f235e908eb7b78dfc Mon Sep 17 00:00:00 2001
|
||
|
From: "Gustavo A. R. Silva" <gustavo@embeddedor.com>
|
||
|
Date: Mon, 18 Feb 2019 12:59:37 -0600
|
||
|
Subject: [PATCH 27/53] usb: dwc2: 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 size is not necessary, hence
|
||
|
it is removed.
|
||
|
|
||
|
This code was detected with the help of Coccinelle.
|
||
|
|
||
|
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
|
||
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||
|
---
|
||
|
drivers/usb/dwc2/hcd.c | 4 +---
|
||
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
|
||
|
index dd82fa516f3f..3f087962f498 100644
|
||
|
--- a/drivers/usb/dwc2/hcd.c
|
||
|
+++ b/drivers/usb/dwc2/hcd.c
|
||
|
@@ -3981,10 +3981,8 @@ static struct dwc2_hcd_urb *dwc2_hcd_urb_alloc(struct dwc2_hsotg *hsotg,
|
||
|
gfp_t mem_flags)
|
||
|
{
|
||
|
struct dwc2_hcd_urb *urb;
|
||
|
- u32 size = sizeof(*urb) + iso_desc_count *
|
||
|
- sizeof(struct dwc2_hcd_iso_packet_desc);
|
||
|
|
||
|
- urb = kzalloc(size, mem_flags);
|
||
|
+ urb = kzalloc(struct_size(urb, iso_descs, iso_desc_count), mem_flags);
|
||
|
if (urb)
|
||
|
urb->packet_count = iso_desc_count;
|
||
|
return urb;
|
||
|
--
|
||
|
2.11.0
|
||
|
|