net/sched: don't dereference a->goto_chain to read the chain index
authorDavide Caratti <dcaratti@redhat.com>
Wed, 20 Mar 2019 14:00:15 +0000 (15:00 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 4 May 2019 07:20:18 +0000 (09:20 +0200)
commit2b0e6d6bf088e59c2bd4fcb5438d559902e99449
tree7fbaefcf4f77bbff5cf2db626cd46b520a4015a9
parentb435a79e5a873495e16589b8274f427c43891395
net/sched: don't dereference a->goto_chain to read the chain index

[ 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