lkml.org 
[lkml]   [2019]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.1 013/375] i40e: Fix of memory leak and integer truncation in i40e_virtchnl.c
    Date
    From: Martyna Szapar <martyna.szapar@intel.com>

    [ Upstream commit 24474f2709af6729b9b1da1c5e160ab62e25e3a4 ]

    Fixed possible memory leak in i40e_vc_add_cloud_filter function:
    cfilter is being allocated and in some error conditions
    the function returns without freeing the memory.

    Fix of integer truncation from u16 (type of queue_id value) to u8
    when calling i40e_vc_isvalid_queue_id function.

    Signed-off-by: Martyna Szapar <martyna.szapar@intel.com>
    Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    .../net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 16 ++++++++++------
    1 file changed, 10 insertions(+), 6 deletions(-)

    diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
    index 831d52bc3c9ae..0b5b867c9fbcb 100644
    --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
    +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
    @@ -181,7 +181,7 @@ static inline bool i40e_vc_isvalid_vsi_id(struct i40e_vf *vf, u16 vsi_id)
    * check for the valid queue id
    **/
    static inline bool i40e_vc_isvalid_queue_id(struct i40e_vf *vf, u16 vsi_id,
    - u8 qid)
    + u16 qid)
    {
    struct i40e_pf *pf = vf->pf;
    struct i40e_vsi *vsi = i40e_find_vsi_from_id(pf, vsi_id);
    @@ -3374,7 +3374,7 @@ static int i40e_vc_add_cloud_filter(struct i40e_vf *vf, u8 *msg)

    if (!test_bit(I40E_VF_STATE_ACTIVE, &vf->vf_states)) {
    aq_ret = I40E_ERR_PARAM;
    - goto err;
    + goto err_out;
    }

    if (!vf->adq_enabled) {
    @@ -3382,7 +3382,7 @@ static int i40e_vc_add_cloud_filter(struct i40e_vf *vf, u8 *msg)
    "VF %d: ADq is not enabled, can't apply cloud filter\n",
    vf->vf_id);
    aq_ret = I40E_ERR_PARAM;
    - goto err;
    + goto err_out;
    }

    if (i40e_validate_cloud_filter(vf, vcf)) {
    @@ -3390,7 +3390,7 @@ static int i40e_vc_add_cloud_filter(struct i40e_vf *vf, u8 *msg)
    "VF %d: Invalid input/s, can't apply cloud filter\n",
    vf->vf_id);
    aq_ret = I40E_ERR_PARAM;
    - goto err;
    + goto err_out;
    }

    cfilter = kzalloc(sizeof(*cfilter), GFP_KERNEL);
    @@ -3451,13 +3451,17 @@ static int i40e_vc_add_cloud_filter(struct i40e_vf *vf, u8 *msg)
    "VF %d: Failed to add cloud filter, err %s aq_err %s\n",
    vf->vf_id, i40e_stat_str(&pf->hw, ret),
    i40e_aq_str(&pf->hw, pf->hw.aq.asq_last_status));
    - goto err;
    + goto err_free;
    }

    INIT_HLIST_NODE(&cfilter->cloud_node);
    hlist_add_head(&cfilter->cloud_node, &vf->cloud_filter_list);
    + /* release the pointer passing it to the collection */
    + cfilter = NULL;
    vf->num_cloud_filters++;
    -err:
    +err_free:
    + kfree(cfilter);
    +err_out:
    return i40e_vc_send_resp_to_vf(vf, VIRTCHNL_OP_ADD_CLOUD_FILTER,
    aq_ret);
    }
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-05-22 21:22    [W:4.117 / U:0.700 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site