net/sched: Fix actions list corruption when adding offloaded tc flows
authorOr Gerlitz <ogerlitz@mellanox.com>
Tue, 24 Oct 2017 05:58:02 +0000 (08:58 +0300)
committerDavid S. Miller <davem@davemloft.net>
Tue, 24 Oct 2017 10:00:54 +0000 (19:00 +0900)
commit9d452cebd7d69e9eb22b4c0482fdbb6fc762167f
tree8c9e4c1540deb47d202ba5fac8a4e55a6f442750
parent907aaa6babe1a606f3da4eb76e76e3ce6286f97f
net/sched: Fix actions list corruption when adding offloaded tc flows

Prior to commit b3f55bdda8df, the networking core doesn't wire an in-place
actions list the when the low level driver is called to offload the flow,
but all low level drivers do that (call tcf_exts_to_list()) in their
offloading "add" logic.

Now, the in-place list is set in the core which goes over the list in a loop,
but also by the hw driver when their offloading code is invoked indirectly:

cls_xxx add flow -> tc_setup_cb_call -> tc_exts_setup_cb_egdev_call -> hw driver

which messes up the core list instance upon driver return. Fix that by avoiding
in-place list on the net core code that deals with adding flows.

Fixes: b3f55bdda8df ('net: sched: introduce per-egress action device callbacks')
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/cls_api.c