lkml.org 
[lkml]   [2019]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.2 200/249] net: hns3: add some error checking in hclge_tm module
    Date
    From: Yunsheng Lin <linyunsheng@huawei.com>

    [ Upstream commit 04f25edb48c441fc278ecc154c270f16966cbb90 ]

    When hdev->tx_sch_mode is HCLGE_FLAG_VNET_BASE_SCH_MODE, the
    hclge_tm_schd_mode_vnet_base_cfg calls hclge_tm_pri_schd_mode_cfg
    with vport->vport_id as pri_id, which is used as index for
    hdev->tm_info.tc_info, it will cause out of bound access issue
    if vport_id is equal to or larger than HNAE3_MAX_TC.

    Also hardware only support maximum speed of HCLGE_ETHER_MAX_RATE.

    So this patch adds two checks for above cases.

    Fixes: 848440544b41 ("net: hns3: Add support of TX Scheduler & Shaper to HNS3 driver")
    Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
    Signed-off-by: Peng Li <lipeng321@huawei.com>
    Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c | 6 +++++-
    1 file changed, 5 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
    index a7bbb6d3091a..0d53062f7bb5 100644
    --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
    +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
    @@ -54,7 +54,8 @@ static int hclge_shaper_para_calc(u32 ir, u8 shaper_level,
    u32 tick;

    /* Calc tick */
    - if (shaper_level >= HCLGE_SHAPER_LVL_CNT)
    + if (shaper_level >= HCLGE_SHAPER_LVL_CNT ||
    + ir > HCLGE_ETHER_MAX_RATE)
    return -EINVAL;

    tick = tick_array[shaper_level];
    @@ -1124,6 +1125,9 @@ static int hclge_tm_schd_mode_vnet_base_cfg(struct hclge_vport *vport)
    int ret;
    u8 i;

    + if (vport->vport_id >= HNAE3_MAX_TC)
    + return -EINVAL;
    +
    ret = hclge_tm_pri_schd_mode_cfg(hdev, vport->vport_id);
    if (ret)
    return ret;
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-07-15 17:15    [W:2.287 / U:1.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site