diff options
author | Gustavo A. R. Silva <gustavo@embeddedor.com> | 2019-04-03 13:51:10 -0400 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2019-04-03 19:10:40 -0400 |
commit | ecdf3a965826d8d900a747f0650acb172191dc9b (patch) | |
tree | b39ab4b9bc9212a38f7901e09a959e2806baf98d /drivers/input/evdev.c | |
parent | 6d3a41ab0c37320068e28e1f9b45e4304bb30db0 (diff) |
Input: evdev - use struct_size() in kzalloc() and vzalloc()
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: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers/input/evdev.c')
-rw-r--r-- | drivers/input/evdev.c | 7 |
1 files 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) | |||
503 | { | 503 | { |
504 | struct evdev *evdev = container_of(inode->i_cdev, struct evdev, cdev); | 504 | struct evdev *evdev = container_of(inode->i_cdev, struct evdev, cdev); |
505 | unsigned int bufsize = evdev_compute_buffer_size(evdev->handle.dev); | 505 | unsigned int bufsize = evdev_compute_buffer_size(evdev->handle.dev); |
506 | unsigned int size = sizeof(struct evdev_client) + | ||
507 | bufsize * sizeof(struct input_event); | ||
508 | struct evdev_client *client; | 506 | struct evdev_client *client; |
509 | int error; | 507 | int error; |
510 | 508 | ||
511 | client = kzalloc(size, GFP_KERNEL | __GFP_NOWARN); | 509 | client = kzalloc(struct_size(client, buffer, bufsize), |
510 | GFP_KERNEL | __GFP_NOWARN); | ||
512 | if (!client) | 511 | if (!client) |
513 | client = vzalloc(size); | 512 | client = vzalloc(struct_size(client, buffer, bufsize)); |
514 | if (!client) | 513 | if (!client) |
515 | return -ENOMEM; | 514 | return -ENOMEM; |
516 | 515 | ||