Re: [PATCH net-next] can: kvaser_usb: Use struct_size() in alloc_candev()
On 2/8/19 4:10 AM, Gustavo A. R. Silva wrote: > 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; > void *entry[]; > }; > > instance = alloc(sizeof(struct foo) + count * sizeof(void *)); > > Instead of leaving these open-coded and prone to type mistakes, we can > now use the new struct_size() helper: > > instance = alloc(struct_size(instance, entry, count)); > > This code was detected with the help of Coccinelle. > > Signed-off-by: Gustavo A. R. Silva Applied to linux-can-next. Tnx, Marc -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions| Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917- | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
Re: [PATCH net-next] can: kvaser_usb: Use struct_size() in alloc_candev()
Hi all, Friendly ping: Who can take this? Thanks -- Gustavo On 2/7/19 9:10 PM, Gustavo A. R. Silva wrote: > 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; > void *entry[]; > }; > > instance = alloc(sizeof(struct foo) + count * sizeof(void *)); > > Instead of leaving these open-coded and prone to type mistakes, we can > now use the new struct_size() helper: > > instance = alloc(struct_size(instance, entry, count)); > > This code was detected with the help of Coccinelle. > > Signed-off-by: Gustavo A. R. Silva > --- > drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c > b/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c > index c89c7d4900d7..0f1d3e807d63 100644 > --- a/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c > +++ b/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c > @@ -643,8 +643,7 @@ static int kvaser_usb_init_one(struct kvaser_usb *dev, > return err; > } > > - netdev = alloc_candev(sizeof(*priv) + > - dev->max_tx_urbs * sizeof(*priv->tx_contexts), > + netdev = alloc_candev(struct_size(priv, tx_contexts, dev->max_tx_urbs), > dev->max_tx_urbs); > if (!netdev) { > dev_err(>intf->dev, "Cannot alloc candev\n"); >
[PATCH net-next] can: kvaser_usb: Use struct_size() in alloc_candev()
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; void *entry[]; }; instance = alloc(sizeof(struct foo) + count * sizeof(void *)); Instead of leaving these open-coded and prone to type mistakes, we can now use the new struct_size() helper: instance = alloc(struct_size(instance, entry, count)); This code was detected with the help of Coccinelle. Signed-off-by: Gustavo A. R. Silva --- drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c b/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c index c89c7d4900d7..0f1d3e807d63 100644 --- a/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c +++ b/drivers/net/can/usb/kvaser_usb/kvaser_usb_core.c @@ -643,8 +643,7 @@ static int kvaser_usb_init_one(struct kvaser_usb *dev, return err; } - netdev = alloc_candev(sizeof(*priv) + - dev->max_tx_urbs * sizeof(*priv->tx_contexts), + netdev = alloc_candev(struct_size(priv, tx_contexts, dev->max_tx_urbs), dev->max_tx_urbs); if (!netdev) { dev_err(>intf->dev, "Cannot alloc candev\n"); -- 2.20.1