lib: objagg: Use struct_size() in kzalloc()
Subsystems (4)
PATCH 1/1 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.
--- lib/objagg.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
lib/objagg.c +2 -4
@@ -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 );
Signature · 1 line
2.21.0
Quoted 15 lines · Wed, Jun 05, 2019 at 04:45:16PM CEST, [email protected] 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 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:
Quoted 8 lines
instance =
kzalloc(struct_size(instance, stats_info, count), GFP_KERNEL);Notice that, in this case, variable
alloc_sizeis not necessary, hence it is removed.This code was detected with the help of Coccinelle.
Signed-off-by Gustavo A. R. Silva <[email protected]>
From: "Gustavo A. R. Silva" <[email protected]>
Date: Wed, 5 Jun 2019 09:45:16 -0500
Quoted 15 lines
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:
Quoted 8 lines
instance =
kzalloc(struct_size(instance, stats_info, count), GFP_KERNEL);Notice that, in this case, variable
alloc_sizeis not necessary, hence it is removed.This code was detected with the help of Coccinelle.
Signed-off-by Gustavo A. R. Silva <[email protected]>
Applied.