diff options
author | Gustavo A. R. Silva <gustavo@embeddedor.com> | 2019-04-11 18:43:06 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-04-12 17:31:33 -0700 |
commit | c252aa3e8ed3ac54060b1838f6a47f29799a133d (patch) | |
tree | b0843e0b11610b2dbf39821b677cf9f0a16c5493 /lib | |
parent | 9d60f0ea1c555045aa2dcf15877b178adba3d697 (diff) | |
download | blackbird-op-linux-c252aa3e8ed3ac54060b1838f6a47f29799a133d.tar.gz blackbird-op-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>
Diffstat (limited to 'lib')
-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; |