lkml.org 
[lkml]   [2021]   [Feb]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 16/65] net/mlx5: Fix leak upon failure of rule creation
    Date
    From: Maor Gottlieb <maorg@nvidia.com>

    [ Upstream commit a5bfe6b4675e0eefbd9418055b5cc6e89af27eb4 ]

    When creation of a new rule that requires allocation of an FTE fails,
    need to call to tree_put_node on the FTE in order to release its'
    resource.

    Fixes: cefc23554fc2 ("net/mlx5: Fix FTE cleanup")
    Signed-off-by: Maor Gottlieb <maorg@nvidia.com>
    Reviewed-by: Alaa Hleihel <alaa@nvidia.com>
    Reviewed-by: Mark Bloch <mbloch@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/mellanox/mlx5/core/fs_core.c | 5 +++++
    1 file changed, 5 insertions(+)

    diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
    index 4944c40436f08..11e12761b0a6e 100644
    --- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
    +++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
    @@ -1697,6 +1697,7 @@ search_again_locked:
    if (!fte_tmp)
    continue;
    rule = add_rule_fg(g, spec, flow_act, dest, dest_num, fte_tmp);
    + /* No error check needed here, because insert_fte() is not called */
    up_write_ref_node(&fte_tmp->node, false);
    tree_put_node(&fte_tmp->node, false);
    kmem_cache_free(steering->ftes_cache, fte);
    @@ -1745,6 +1746,8 @@ skip_search:
    up_write_ref_node(&g->node, false);
    rule = add_rule_fg(g, spec, flow_act, dest, dest_num, fte);
    up_write_ref_node(&fte->node, false);
    + if (IS_ERR(rule))
    + tree_put_node(&fte->node, false);
    return rule;
    }
    rule = ERR_PTR(-ENOENT);
    @@ -1844,6 +1847,8 @@ search_again_locked:
    up_write_ref_node(&g->node, false);
    rule = add_rule_fg(g, spec, flow_act, dest, dest_num, fte);
    up_write_ref_node(&fte->node, false);
    + if (IS_ERR(rule))
    + tree_put_node(&fte->node, false);
    tree_put_node(&g->node, false);
    return rule;

    --
    2.27.0


    \
     
     \ /
      Last update: 2021-02-08 17:46    [W:7.372 / U:0.448 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site