diff options
author | Gustavo A. R. Silva <gustavo@embeddedor.com> | 2019-06-05 09:45:16 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-06-05 19:03:39 -0700 |
commit | e736bf72af568d0a04f186e1c5dde6789b19c35e (patch) | |
tree | 0d17e2f1c2c06b138eea5af458bf49e4337b0a86 | |
parent | 8b5e07d7ee95e3c22cb301731f87d95f58639591 (diff) |
lib: objagg: Use struct_size() in kzalloc()
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 objagg_stats {
...
struct objagg_obj_stats_info stats_info[];
};
size = sizeof(*objagg_stats) + sizeof(objagg_stats->stats_info[0]) * count;
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, stats_info, count), GFP_KERNEL);
Notice that, in this case, variable alloc_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>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | lib/objagg.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/lib/objagg.c b/lib/objagg.c index 576be22e86de..55621fb82e0a 100644 --- a/lib/objagg.c +++ b/lib/objagg.c @@ -605,12 +605,10 @@ const struct objagg_stats *objagg_stats_get(struct objagg *objagg) { struct objagg_stats *objagg_stats; struct objagg_obj *objagg_obj; - size_t alloc_size; int i; - alloc_size = sizeof(*objagg_stats) + - sizeof(objagg_stats->stats_info[0]) * objagg->obj_count; - objagg_stats = kzalloc(alloc_size, GFP_KERNEL); + objagg_stats = kzalloc(struct_size(objagg_stats, stats_info, + objagg->obj_count), GFP_KERNEL); if (!objagg_stats) return ERR_PTR(-ENOMEM); |