mlxsw: spectrum_router: Use struct_size() in kzalloc()
Subsystems (3)
PATCH 1/1 mlxsw: spectrum_router: 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 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 alloc_size is not necessary, hence it is removed.
This code was detected with the help of Coccinelle.
--- .../net/ethernet/mellanox/mlxsw/spectrum_router.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +4 -8
@@ -3813,13 +3813,11 @@ mlxsw_sp_nexthop4_group_create(struct mlxsw_sp *mlxsw_sp, struct fib_info *fi)struct mlxsw_sp_nexthop_group *nh_grp;struct mlxsw_sp_nexthop *nh;struct fib_nh *fib_nh; -size_t alloc_size;int i;int err; - alloc_size =sizeof (*nh_grp) + - fi->fib_nhs *sizeof (struct mlxsw_sp_nexthop ); - nh_grp =kzalloc (alloc_size,GFP_KERNEL ); + nh_grp =kzalloc (struct_size (nh_grp, nexthops, fi->fib_nhs), +GFP_KERNEL );if (!nh_grp)return ERR_PTR (-ENOMEM ); nh_grp->priv = fi;
@@ -5045,13 +5043,11 @@ mlxsw_sp_nexthop6_group_create(struct mlxsw_sp *mlxsw_sp,struct mlxsw_sp_nexthop_group *nh_grp;struct mlxsw_sp_rt6 *mlxsw_sp_rt6;struct mlxsw_sp_nexthop *nh; -size_t alloc_size;int i =0 ;int err; - alloc_size =sizeof (*nh_grp) + - fib6_entry->nrt6 *sizeof (struct mlxsw_sp_nexthop ); - nh_grp =kzalloc (alloc_size,GFP_KERNEL ); + nh_grp =kzalloc (struct_size (nh_grp, nexthops, fib6_entry->nrt6), +GFP_KERNEL );if (!nh_grp)return ERR_PTR (-ENOMEM );INIT_LIST_HEAD (&nh_grp->fib_list);
Signature · 1 line
2.20.1
Quoted 15 lines · Fri, Feb 08, 2019 at 04:42:41AM CET, [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 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:
Quoted 8 lines
instance =
kzalloc(struct_size(instance, entry, 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: Thu, 7 Feb 2019 21:42:41 -0600
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 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:
Quoted 8 lines
instance =
kzalloc(struct_size(instance, entry, 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.