lkml.org 
[lkml]   [2019]   [May]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.0 052/101] net/sched: dont dereference a->goto_chain to read the chain index
    Date
    [ Upstream commit fe384e2fa36ca084a456fd30558cccc75b4b3fbd ]

    callers of tcf_gact_goto_chain_index() can potentially read an old value
    of the chain index, or even dereference a NULL 'goto_chain' pointer,
    because 'goto_chain' and 'tcfa_action' are read in the traffic path
    without caring of concurrent write in the control path. The most recent
    value of chain index can be read also from a->tcfa_action (it's encoded
    there together with TC_ACT_GOTO_CHAIN bits), so we don't really need to
    dereference 'goto_chain': just read the chain id from the control action.

    Fixes: e457d86ada27 ("net: sched: add couple of goto_chain helpers")
    Signed-off-by: Davide Caratti <dcaratti@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin (Microsoft) <sashal@kernel.org>
    ---
    include/net/tc_act/tc_gact.h | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/include/net/tc_act/tc_gact.h b/include/net/tc_act/tc_gact.h
    index ef8dd0db70ce..56935bf027a7 100644
    --- a/include/net/tc_act/tc_gact.h
    +++ b/include/net/tc_act/tc_gact.h
    @@ -56,7 +56,7 @@ static inline bool is_tcf_gact_goto_chain(const struct tc_action *a)

    static inline u32 tcf_gact_goto_chain_index(const struct tc_action *a)
    {
    - return a->goto_chain->index;
    + return READ_ONCE(a->tcfa_action) & TC_ACT_EXT_VAL_MASK;
    }

    #endif /* __NET_TC_GACT_H */
    --
    2.19.1


    \
     
     \ /
      Last update: 2019-05-02 17:37    [W:4.034 / U:0.284 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site