mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 04:04:43 +01:00
ice: Fix memory leak in ice_set_ringparam()
In ice_set_ringparam, tx_rings and xdp_rings are allocated before rx_rings. If the allocation of rx_rings fails, the code jumps to the done label leaking both tx_rings and xdp_rings. Furthermore, if the setup of an individual Rx ring fails during the loop, the code jumps to the free_tx label which releases tx_rings but leaks xdp_rings. Fix this by introducing a free_xdp label and updating the error paths to ensure both xdp_rings and tx_rings are properly freed if rx_rings allocation or setup fails. Compile tested only. Issue found using a prototype static analysis tool and code review. Fixes:fcea6f3da5("ice: Add stats and ethtool support") Fixes:efc2214b60("ice: Add support for XDP") Signed-off-by: Zilin Guan <zilin@seu.edu.cn> Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com> Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel) Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
fb4903b335
commit
fe868b499d
1 changed files with 9 additions and 2 deletions
|
|
@ -3332,7 +3332,7 @@ process_rx:
|
|||
rx_rings = kzalloc_objs(*rx_rings, vsi->num_rxq);
|
||||
if (!rx_rings) {
|
||||
err = -ENOMEM;
|
||||
goto done;
|
||||
goto free_xdp;
|
||||
}
|
||||
|
||||
ice_for_each_rxq(vsi, i) {
|
||||
|
|
@ -3359,7 +3359,7 @@ rx_unwind:
|
|||
}
|
||||
kfree(rx_rings);
|
||||
err = -ENOMEM;
|
||||
goto free_tx;
|
||||
goto free_xdp;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3411,6 +3411,13 @@ process_link:
|
|||
}
|
||||
goto done;
|
||||
|
||||
free_xdp:
|
||||
if (xdp_rings) {
|
||||
ice_for_each_xdp_txq(vsi, i)
|
||||
ice_free_tx_ring(&xdp_rings[i]);
|
||||
kfree(xdp_rings);
|
||||
}
|
||||
|
||||
free_tx:
|
||||
/* error cleanup if the Rx allocations failed after getting Tx */
|
||||
if (tx_rings) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue