lkml.org 
[lkml]   [2021]   [Oct]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 070/151] net: mscc: ocelot: fix VCAP filters remaining active after being deleted
    Date
    From: Vladimir Oltean <vladimir.oltean@nxp.com>

    [ Upstream commit 019d9329e7481cfaccbd8ed17b1e04ca76970f13 ]

    When ocelot_flower.c calls ocelot_vcap_filter_add(), the filter has a
    given filter->id.cookie. This filter is added to the block->rules list.

    However, when ocelot_flower.c calls ocelot_vcap_block_find_filter_by_id()
    which passes the cookie as argument, the filter is never found by
    filter->id.cookie when searching through the block->rules list.

    This is unsurprising, since the filter->id.cookie is an unsigned long,
    but the cookie argument provided to ocelot_vcap_block_find_filter_by_id()
    is a signed int, and the comparison fails.

    Fixes: 50c6cc5b9283 ("net: mscc: ocelot: store a namespaced VCAP filter ID")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Link: https://lore.kernel.org/r/20210930125330.2078625-1-vladimir.oltean@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/mscc/ocelot_vcap.c | 4 ++--
    include/soc/mscc/ocelot_vcap.h | 4 ++--
    2 files changed, 4 insertions(+), 4 deletions(-)

    diff --git a/drivers/net/ethernet/mscc/ocelot_vcap.c b/drivers/net/ethernet/mscc/ocelot_vcap.c
    index 7945393a0655..99d7376a70a7 100644
    --- a/drivers/net/ethernet/mscc/ocelot_vcap.c
    +++ b/drivers/net/ethernet/mscc/ocelot_vcap.c
    @@ -998,8 +998,8 @@ ocelot_vcap_block_find_filter_by_index(struct ocelot_vcap_block *block,
    }

    struct ocelot_vcap_filter *
    -ocelot_vcap_block_find_filter_by_id(struct ocelot_vcap_block *block, int cookie,
    - bool tc_offload)
    +ocelot_vcap_block_find_filter_by_id(struct ocelot_vcap_block *block,
    + unsigned long cookie, bool tc_offload)
    {
    struct ocelot_vcap_filter *filter;

    diff --git a/include/soc/mscc/ocelot_vcap.h b/include/soc/mscc/ocelot_vcap.h
    index 25fd525aaf92..4869ebbd438d 100644
    --- a/include/soc/mscc/ocelot_vcap.h
    +++ b/include/soc/mscc/ocelot_vcap.h
    @@ -694,7 +694,7 @@ int ocelot_vcap_filter_add(struct ocelot *ocelot,
    int ocelot_vcap_filter_del(struct ocelot *ocelot,
    struct ocelot_vcap_filter *rule);
    struct ocelot_vcap_filter *
    -ocelot_vcap_block_find_filter_by_id(struct ocelot_vcap_block *block, int id,
    - bool tc_offload);
    +ocelot_vcap_block_find_filter_by_id(struct ocelot_vcap_block *block,
    + unsigned long cookie, bool tc_offload);

    #endif /* _OCELOT_VCAP_H_ */
    --
    2.33.0


    \
     
     \ /
      Last update: 2021-10-11 16:06    [W:4.024 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site