Skip to content

Commit fe384e2

Browse files
dcarattidavem330
authored andcommitted
net/sched: don't dereference a->goto_chain to read the chain index
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: e457d86 ("net: sched: add couple of goto_chain helpers") Signed-off-by: Davide Caratti <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 7e0c889 commit fe384e2

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

include/net/tc_act/tc_gact.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ static inline bool is_tcf_gact_goto_chain(const struct tc_action *a)
5656

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

6262
#endif /* __NET_TC_GACT_H */

0 commit comments

Comments
 (0)