Skip to content

Commit 9234186

Browse files
zhengbaowenZhaolong Zhang
authored andcommitted
flow_offload: fix suspicious RCU usage when offloading tc action
commit 963178a upstream Fix suspicious rcu_dereference_protected() usage when offloading tc action. We should hold tcfa_lock to offload tc action in action initiation. Without these changes, the following warning will be observed: WARNING: suspicious RCU usage 5.16.0-rc5-net-next-01504-g7d1f236dcffa-dirty torvalds#50 Tainted: G I ----------------------------- include/net/tc_act/tc_tunnel_key.h:33 suspicious rcu_dereference_protected() usage! 1 lock held by tc/12108: CPU: 4 PID: 12108 Comm: tc Tainted: G Hardware name: Dell Inc. PowerEdge R740/07WCGN, BIOS 1.6.11 11/20/2018 Call Trace: <TASK> dump_stack_lvl+0x49/0x5e dump_stack+0x10/0x12 lockdep_rcu_suspicious+0xed/0xf8 tcf_tunnel_key_offload_act_setup+0x1de/0x300 [act_tunnel_key] tcf_action_offload_add_ex+0xc0/0x1f0 tcf_action_init+0x26a/0x2f0 tcf_action_add+0xa9/0x1f0 tc_ctl_action+0xfb/0x170 rtnetlink_rcv_msg+0x169/0x510 ? sched_clock+0x9/0x10 ? rtnl_newlink+0x70/0x70 netlink_rcv_skb+0x55/0x100 rtnetlink_rcv+0x15/0x20 netlink_unicast+0x1a8/0x270 netlink_sendmsg+0x245/0x490 sock_sendmsg+0x65/0x70 ____sys_sendmsg+0x219/0x260 ? __import_iovec+0x2c/0x150 ___sys_sendmsg+0xb7/0x100 ? __lock_acquire+0x3d5/0x1f40 ? __this_cpu_preempt_check+0x13/0x20 ? lock_is_held_type+0xe4/0x140 ? sched_clock+0x9/0x10 ? ktime_get_coarse_real_ts64+0xbe/0xd0 ? __this_cpu_preempt_check+0x13/0x20 ? lockdep_hardirqs_on+0x7e/0x100 ? ktime_get_coarse_real_ts64+0xbe/0xd0 ? trace_hardirqs_on+0x2a/0xf0 __sys_sendmsg+0x5a/0xa0 ? syscall_trace_enter.constprop.0+0x1dd/0x220 __x64_sys_sendmsg+0x1f/0x30 do_syscall_64+0x3b/0x90 entry_SYSCALL_64_after_hwframe+0x44/0xae RIP: 0033:0x7f4db7bb7a60 Fixes: 8cbfe93 ("flow_offload: allow user to offload tc action to net device") Reported-by: Eric Dumazet <[email protected]> Signed-off-by: Baowen Zheng <[email protected]> Signed-off-by: Louis Peens <[email protected]> Signed-off-by: David S. Miller <[email protected]> Integrated-by: Rui He <[email protected]>
1 parent 812159a commit 9234186

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

net/sched/act_api.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,12 +173,19 @@ static int offload_action_init(struct flow_offload_action *fl_action,
173173
enum offload_act_command cmd,
174174
struct netlink_ext_ack *extack)
175175
{
176+
int err;
177+
176178
fl_action->extack = extack;
177179
fl_action->command = cmd;
178180
fl_action->index = act->tcfa_index;
179181

180-
if (act->ops->offload_act_setup)
181-
return act->ops->offload_act_setup(act, fl_action, NULL, false);
182+
if (act->ops->offload_act_setup) {
183+
spin_lock_bh(&act->tcfa_lock);
184+
err = act->ops->offload_act_setup(act, fl_action, NULL,
185+
false);
186+
spin_unlock_bh(&act->tcfa_lock);
187+
return err;
188+
}
182189

183190
return -EOPNOTSUPP;
184191
}

0 commit comments

Comments
 (0)