nfp: use struct_size() in kzalloc()
Subsystems (3)
PATCH 1/1 nfp: 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[];
};instance = kzalloc(sizeof(struct foo) + count * sizeof(struct boo), 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);
This code was detected with the help of Coccinelle.
--- drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c +1 -2
@@ -269,8 +269,7 @@ __nfp_eth_read_ports(struct nfp_cpp *cpp, struct nfp_nsp *nsp) goto err; } - table =kzalloc (sizeof (*table) + -sizeof (struct nfp_eth_table_port ) * cnt,GFP_KERNEL ); + table =kzalloc (struct_size (table, ports, cnt),GFP_KERNEL );if (!table) goto err;
Signature · 1 line
2.20.1
Quoted 11 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[]; };instance =
kzalloc(sizeof(struct foo) + count * sizeof(struct boo), GFP_KERNEL);
Quoted 8 lines
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);This code was detected with the help of Coccinelle.
Signed-off-by Gustavo A. R. Silva <[email protected]>
Quoted 15 lines · Jakub Kicinski
Quoted 14 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[]; };instance =
kzalloc(sizeof(struct foo) + count * sizeof(struct boo), 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
Quoted 5 lines
instance =
kzalloc(struct_size(instance, entry, count), GFP_KERNEL);This code was detected with the help of Coccinelle.
Signed-off-by Gustavo A. R. Silva <[email protected]>Acked-by Jakub Kicinski <[email protected]>
Thanks, Jakub.
--
Gustavo
Quoted 9 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[]; };
Quoted 8 lines
instance =
kzalloc(sizeof(struct foo) + count * sizeof(struct boo), 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);This code was detected with the help of Coccinelle.
Might be useful to augment the script to include cases where the computed size is saved to a temporary and that temporary is used ala:
https://patchwork.kernel.org/patch/10782453/
Quoted 1 line · YueHaibing
Use kmemdup rather than duplicating its implementation
[]
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
Quoted 1 line
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c +0
-0
[]
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg, · line 1198
Quoted 6 lines
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c +1
-2@@ -1196,13 +1196,9 @@ iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg, regd_to_copy =sizeof (struct ieee80211_regdomain ) + valid_rules *sizeof (struct ieee80211_reg_rule ); - copy_rd =kzalloc (regd_to_copy,GFP_KERNEL ); -if (!copy_rd) { + copy_rd =kmemdup (regd, regd_to_copy,GFP_KERNEL );
This should probably be
copy_rd = kmemdup(regd, struct_size(regd, reg_rules, valid_rules), GFP_KERNEL);
Hi Joe,
Quoted 15 lines · Joe Perches
Quoted 14 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[]; };instance =
kzalloc(sizeof(struct foo) + count * sizeof(struct boo), 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
Quoted 3 lines
instance =
kzalloc(struct_size(instance, entry, count), GFP_KERNEL);This code was detected with the help of Coccinelle.
Might be useful to augment the script to include cases where the computed size is saved to a temporary and that temporary is used ala:
Yep. That's already on my list.
Quoted 16 lines
https://patchwork.kernel.org/patch/10782453/
Quoted 1 line · YueHaibing
Use kmemdup rather than duplicating its implementation
[]
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
Quoted 1 line
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c +0
-0[]
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg, · line 1198
Quoted 6 lines
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c +1
-2@@ -1196,13 +1196,9 @@ iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg, regd_to_copy =sizeof (struct ieee80211_regdomain ) + valid_rules *sizeof (struct ieee80211_reg_rule ); - copy_rd =kzalloc (regd_to_copy,GFP_KERNEL ); -if (!copy_rd) { + copy_rd =kmemdup (regd, regd_to_copy,GFP_KERNEL );This should probably be
Quoted 3 lines
copy_rd = kmemdup(regd, struct_size(regd, reg_rules, valid_rules), GFP_KERNEL);
I agree.
Thanks
--
Gustavo
From: "Gustavo A. R. Silva" <[email protected]>
Date: Wed, 30 Jan 2019 18:38:59 -0600
Quoted 11 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[]; };instance =
kzalloc(sizeof(struct foo) + count * sizeof(struct boo), GFP_KERNEL);
Quoted 8 lines
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);This code was detected with the help of Coccinelle.
Signed-off-by Gustavo A. R. Silva <[email protected]>
Applied.