On Thu, Feb 21, 2019 at 09:37:38AM -0600, 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; > 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@xxxxxxxxxxxxxx> Applied, thank you. > --- > drivers/input/evdev.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c > index f48369d6f3a0..ee8dd8b1b09e 100644 > --- a/drivers/input/evdev.c > +++ b/drivers/input/evdev.c > @@ -503,14 +503,13 @@ static int evdev_open(struct inode *inode, struct file *file) > { > struct evdev *evdev = container_of(inode->i_cdev, struct evdev, cdev); > unsigned int bufsize = evdev_compute_buffer_size(evdev->handle.dev); > - unsigned int size = sizeof(struct evdev_client) + > - bufsize * sizeof(struct input_event); > struct evdev_client *client; > int error; > > - client = kzalloc(size, GFP_KERNEL | __GFP_NOWARN); > + client = kzalloc(struct_size(client, buffer, bufsize), > + GFP_KERNEL | __GFP_NOWARN); > if (!client) > - client = vzalloc(size); > + client = vzalloc(struct_size(client, buffer, bufsize)); > if (!client) > return -ENOMEM; > > -- > 2.20.1 > -- Dmitry