Message ID | 20240706140518.9214-1-amishin@t-argos.ru (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next,v2] ice: Adjust over allocation of memory in ice_sched_add_root_node() and ice_sched_add_node() | expand |
… > 'ice_sched_node' structure. But in this calls there are 'sizeof(*root)' But there are calls for? > So memory is allocated for structures instead pointers. This lead to … of? leads? Regards, Markus
On Sat, Jul 06, 2024 at 05:05:18PM +0300, Aleksandr Mishin wrote: > In ice_sched_add_root_node() and ice_sched_add_node() there are calls to > devm_kcalloc() in order to allocate memory for array of pointers to > 'ice_sched_node' structure. But in this calls there are 'sizeof(*root)' > instead of 'sizeof(root)' and 'sizeof(*node)' instead of 'sizeof(node)'. > So memory is allocated for structures instead pointers. This lead to > significant over allocation of memory. > > Adjust over allocation of memory by correcting devm_kcalloc() parameters. > > Found by Linux Verification Center (linuxtesting.org) with SVACE. > > Suggested-by: Simon Horman <horms@kernel.org> FTR, I did provide some review of v1. But I don't think that counts as suggesting this patch. > Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru> > --- > v2: > - Update comment, remove 'Fixes' tag and change the tree from 'net' to > 'net-next' as suggested by Simon > (https://lore.kernel.org/all/20240706095258.GB1481495@kernel.org/) > v1: https://lore.kernel.org/all/20240705163620.12429-1-amishin@t-argos.ru/ Also, v2 was sent less than 24h after v1, please don't do that when posting patches to netdev. Please do read https://docs.kernel.org/process/maintainer-netdev.html ...
On 7/6/24 16:05, Aleksandr Mishin wrote: > In ice_sched_add_root_node() and ice_sched_add_node() there are calls to > devm_kcalloc() in order to allocate memory for array of pointers to > 'ice_sched_node' structure. But in this calls there are 'sizeof(*root)' > instead of 'sizeof(root)' and 'sizeof(*node)' instead of 'sizeof(node)'. > So memory is allocated for structures instead pointers. This lead to > significant over allocation of memory. > > Adjust over allocation of memory by correcting devm_kcalloc() parameters. Last three sentences are not correct. Better commit message would be also more concise. > > Found by Linux Verification Center (linuxtesting.org) with SVACE. > > Suggested-by: Simon Horman <horms@kernel.org> > Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru> > --- > v2: > - Update comment, remove 'Fixes' tag and change the tree from 'net' to > 'net-next' as suggested by Simon > (https://lore.kernel.org/all/20240706095258.GB1481495@kernel.org/) > v1: https://lore.kernel.org/all/20240705163620.12429-1-amishin@t-argos.ru/ > > drivers/net/ethernet/intel/ice/ice_sched.c | 6 ++---- > 1 file changed, 2 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ice/ice_sched.c b/drivers/net/ethernet/intel/ice/ice_sched.c > index ecf8f5d60292..d8b6054f3436 100644 > --- a/drivers/net/ethernet/intel/ice/ice_sched.c > +++ b/drivers/net/ethernet/intel/ice/ice_sched.c > @@ -28,9 +28,8 @@ ice_sched_add_root_node(struct ice_port_info *pi, > if (!root) > return -ENOMEM; > > - /* coverity[suspicious_sizeof] */ good to clear that, thanks > root->children = devm_kcalloc(ice_hw_to_dev(hw), hw->max_children[0], > - sizeof(*root), GFP_KERNEL); > + sizeof(root), GFP_KERNEL); Your change makes code to use the correct type as sizeof() argument, however, I would like to also make it the correct entity, so: sizeof(*root->children) // == sizeof(root->children[0]) For the reference 562│ struct ice_sched_node { ... 565│ struct ice_sched_node **children; > if (!root->children) { > devm_kfree(ice_hw_to_dev(hw), root); > return -ENOMEM; > @@ -186,10 +185,9 @@ ice_sched_add_node(struct ice_port_info *pi, u8 layer, > if (!node) > return -ENOMEM; > if (hw->max_children[layer]) { > - /* coverity[suspicious_sizeof] */ > node->children = devm_kcalloc(ice_hw_to_dev(hw), > hw->max_children[layer], > - sizeof(*node), GFP_KERNEL); > + sizeof(node), GFP_KERNEL); ditto > if (!node->children) { > devm_kfree(ice_hw_to_dev(hw), node); > return -ENOMEM;
diff --git a/drivers/net/ethernet/intel/ice/ice_sched.c b/drivers/net/ethernet/intel/ice/ice_sched.c index ecf8f5d60292..d8b6054f3436 100644 --- a/drivers/net/ethernet/intel/ice/ice_sched.c +++ b/drivers/net/ethernet/intel/ice/ice_sched.c @@ -28,9 +28,8 @@ ice_sched_add_root_node(struct ice_port_info *pi, if (!root) return -ENOMEM; - /* coverity[suspicious_sizeof] */ root->children = devm_kcalloc(ice_hw_to_dev(hw), hw->max_children[0], - sizeof(*root), GFP_KERNEL); + sizeof(root), GFP_KERNEL); if (!root->children) { devm_kfree(ice_hw_to_dev(hw), root); return -ENOMEM; @@ -186,10 +185,9 @@ ice_sched_add_node(struct ice_port_info *pi, u8 layer, if (!node) return -ENOMEM; if (hw->max_children[layer]) { - /* coverity[suspicious_sizeof] */ node->children = devm_kcalloc(ice_hw_to_dev(hw), hw->max_children[layer], - sizeof(*node), GFP_KERNEL); + sizeof(node), GFP_KERNEL); if (!node->children) { devm_kfree(ice_hw_to_dev(hw), node); return -ENOMEM;
In ice_sched_add_root_node() and ice_sched_add_node() there are calls to devm_kcalloc() in order to allocate memory for array of pointers to 'ice_sched_node' structure. But in this calls there are 'sizeof(*root)' instead of 'sizeof(root)' and 'sizeof(*node)' instead of 'sizeof(node)'. So memory is allocated for structures instead pointers. This lead to significant over allocation of memory. Adjust over allocation of memory by correcting devm_kcalloc() parameters. Found by Linux Verification Center (linuxtesting.org) with SVACE. Suggested-by: Simon Horman <horms@kernel.org> Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru> --- v2: - Update comment, remove 'Fixes' tag and change the tree from 'net' to 'net-next' as suggested by Simon (https://lore.kernel.org/all/20240706095258.GB1481495@kernel.org/) v1: https://lore.kernel.org/all/20240705163620.12429-1-amishin@t-argos.ru/ drivers/net/ethernet/intel/ice/ice_sched.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)