mlxsw: spectrum: acl: Use struct_size() in kzalloc()
Subsystems (3)
PATCH 1/1 mlxsw: spectrum: acl: 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.
--- drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_keys.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_keys.c +2 -4
@@ -236,12 +236,10 @@ mlxsw_afk_key_info_create(struct mlxsw_afk *mlxsw_afk, struct mlxsw_afk_element_usage *elusage) {struct mlxsw_afk_key_info *key_info; -size_t alloc_size;int err; - alloc_size =sizeof (*key_info) + -sizeof (key_info->blocks[0 ]) * mlxsw_afk->max_blocks; - key_info =kzalloc (alloc_size,GFP_KERNEL ); + key_info =kzalloc (struct_size (key_info, blocks, mlxsw_afk->max_blocks), +GFP_KERNEL );if (!key_info)return ERR_PTR (-ENOMEM ); err =mlxsw_afk_picker (mlxsw_afk, key_info, elusage);
Signature · 1 line
2.20.1
Quoted 15 lines · Gustavo A. R. Silva
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]>
Thanks
From: "Gustavo A. R. Silva" <[email protected]>
Date: Mon, 25 Feb 2019 13:01:32 -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, thanks.
Quoted 15 lines · Mon, Feb 25, 2019 at 08:01:32PM 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]>