On 8/28/19 11:40 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 ioat_dca_priv { > ... > struct ioat_dca_slot req_slots[0]; > }; > > Make use of the struct_size() helper instead of an open-coded version > in order to avoid any potential type mistakes. > > So, replace the following form: > > sizeof(*ioatdca) + (sizeof(struct ioat_dca_slot) * slots) > > with: > > struct_size(ioatdca, req_slots, slots) > > This code was detected with the help of Coccinelle. > > Signed-off-by: Gustavo A. R. Silva <gustavo@xxxxxxxxxxxxxx> Acked-by: Dave Jiang <dave.jiang@xxxxxxxxx> > --- > drivers/dma/ioat/dca.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/dma/ioat/dca.c b/drivers/dma/ioat/dca.c > index 70fd8454d002..be61c32a876f 100644 > --- a/drivers/dma/ioat/dca.c > +++ b/drivers/dma/ioat/dca.c > @@ -286,8 +286,7 @@ struct dca_provider *ioat_dca_init(struct pci_dev *pdev, void __iomem *iobase) > return NULL; > > dca = alloc_dca_provider(&ioat_dca_ops, > - sizeof(*ioatdca) > - + (sizeof(struct ioat_dca_slot) * slots)); > + struct_size(ioatdca, req_slots, slots)); > if (!dca) > return NULL; > >