diff options
author | Gustavo A. R. Silva <gustavo@embeddedor.com> | 2019-04-12 01:43:06 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-04-13 02:31:33 +0200 |
commit | c252aa3e8ed3ac54060b1838f6a47f29799a133d (patch) | |
tree | b0843e0b11610b2dbf39821b677cf9f0a16c5493 | |
parent | Merge branch 'nfp-update-to-control-structures' (diff) | |
download | linux-c252aa3e8ed3ac54060b1838f6a47f29799a133d.tar.xz linux-c252aa3e8ed3ac54060b1838f6a47f29799a133d.zip |
rhashtable: use struct_size() in kvzalloc()
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 = kvzalloc(size, GFP_KERNEL);
Instead of leaving these open-coded and prone to type mistakes, we can
now use the new struct_size() helper:
instance = kvzalloc(struct_size(instance, entry, count), GFP_KERNEL);
This code was detected with the help of Coccinelle.
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | lib/rhashtable.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/lib/rhashtable.c b/lib/rhashtable.c index a8583af43b59..9c84f5cef69c 100644 --- a/lib/rhashtable.c +++ b/lib/rhashtable.c @@ -175,8 +175,7 @@ static struct bucket_table *bucket_table_alloc(struct rhashtable *ht, int i; static struct lock_class_key __key; - size = sizeof(*tbl) + nbuckets * sizeof(tbl->buckets[0]); - tbl = kvzalloc(size, gfp); + tbl = kvzalloc(struct_size(tbl, buckets, nbuckets), gfp); size = nbuckets; |