• Jacob Keller's avatar
    ice: fix memory leak in ice_vsi_setup · f6a07271
    Jacob Keller authored
    During ice_vsi_setup, if ice_cfg_vsi_lan fails, it does not properly
    release memory associated with the VSI rings. If we had used devres
    allocations for the rings, this would be ok. However, we use kzalloc and
    kfree_rcu for these ring structures.
    
    Using the correct label to cleanup the rings during ice_vsi_setup
    highlights an issue in the ice_vsi_clear_rings function: it can leave
    behind stale ring pointers in the q_vectors structure.
    
    When releasing rings, we must also ensure that no q_vector associated
    with the VSI will point to this ring again. To resolve this, loop over
    all q_vectors and release their ring mapping. Because we are about to
    free all rings, no q_vector should remain pointing to any of the rings
    in this VSI.
    
    Fixes: 5513b920 ("ice: Update Tx scheduler tree for VSI multi-Tx queue support")
    Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    f6a07271
ice_lib.c 81.1 KB