lkml.org 
[lkml]   [2016]   [Sep]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 009/192] [PATCH 009/135] i40e: clean whole mac filter list
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    [ Upstream commit f11999987bc0b5559ab56dedc6f4ca32fab5438a ]

    Clean the whole mac filter list when resetting after an intermediate
    add or delete push to the firmware. The code had evolved from using
    a list from the stack to a heap allocation, but the memset() didn't
    follow the change correctly. This now cleans the whole list rather
    that just part of the first element.

    Change-ID: I4cd03d5a103b7407dd8556a3a231e800f2d6f2d5
    Reported-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
    Signed-off-by: Shannon Nelson <shannon.nelson@intel.com>
    Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/net/ethernet/intel/i40e/i40e_main.c | 19 +++++++++++--------
    1 file changed, 11 insertions(+), 8 deletions(-)

    --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
    +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
    @@ -1973,11 +1973,13 @@ int i40e_sync_vsi_filters(struct i40e_vs

    /* Now process 'del_list' outside the lock */
    if (!list_empty(&tmp_del_list)) {
    + int del_list_size;
    +
    filter_list_len = pf->hw.aq.asq_buf_size /
    sizeof(struct i40e_aqc_remove_macvlan_element_data);
    - del_list = kcalloc(filter_list_len,
    - sizeof(struct i40e_aqc_remove_macvlan_element_data),
    - GFP_KERNEL);
    + del_list_size = filter_list_len *
    + sizeof(struct i40e_aqc_remove_macvlan_element_data);
    + del_list = kzalloc(del_list_size, GFP_KERNEL);
    if (!del_list) {
    i40e_cleanup_add_list(&tmp_add_list);

    @@ -2009,7 +2011,7 @@ int i40e_sync_vsi_filters(struct i40e_vs
    NULL);
    aq_err = pf->hw.aq.asq_last_status;
    num_del = 0;
    - memset(del_list, 0, sizeof(*del_list));
    + memset(del_list, 0, del_list_size);

    if (ret && aq_err != I40E_AQ_RC_ENOENT)
    dev_err(&pf->pdev->dev,
    @@ -2042,13 +2044,14 @@ int i40e_sync_vsi_filters(struct i40e_vs
    }

    if (!list_empty(&tmp_add_list)) {
    + int add_list_size;

    /* do all the adds now */
    filter_list_len = pf->hw.aq.asq_buf_size /
    sizeof(struct i40e_aqc_add_macvlan_element_data),
    - add_list = kcalloc(filter_list_len,
    - sizeof(struct i40e_aqc_add_macvlan_element_data),
    - GFP_KERNEL);
    + add_list_size = filter_list_len *
    + sizeof(struct i40e_aqc_add_macvlan_element_data);
    + add_list = kzalloc(add_list_size, GFP_KERNEL);
    if (!add_list) {
    /* Purge element from temporary lists */
    i40e_cleanup_add_list(&tmp_add_list);
    @@ -2086,7 +2089,7 @@ int i40e_sync_vsi_filters(struct i40e_vs

    if (ret)
    break;
    - memset(add_list, 0, sizeof(*add_list));
    + memset(add_list, 0, add_list_size);
    }
    /* Entries from tmp_add_list were cloned from MAC
    * filter list, hence clean those cloned entries

    \
     
     \ /
      Last update: 2016-09-17 09:59    [W:4.249 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site