[PATCH net] net/sched: act_police: add missing spinlock initialization
commit f2cbd4852820 ("net/sched: act_police: fix race condition on state variables") introduces a new spinlock, but forgets its initialization. Ensure that tcf_police_init() initializes 'tcfp_lock' every time a 'police' action is newly created, to avoid the following lockdep splat: INFO: trying to register non-static key. the code is fine but needs lockdep annotation. turning off the locking correctness validator. <...> Call Trace: dump_stack+0x85/0xcb register_lock_class+0x581/0x590 __lock_acquire+0xd4/0x1330 ? tcf_police_init+0x2fa/0x650 [act_police] ? lock_acquire+0x9e/0x1a0 lock_acquire+0x9e/0x1a0 ? tcf_police_init+0x2fa/0x650 [act_police] ? tcf_police_init+0x55a/0x650 [act_police] _raw_spin_lock_bh+0x34/0x40 ? tcf_police_init+0x2fa/0x650 [act_police] tcf_police_init+0x2fa/0x650 [act_police] tcf_action_init_1+0x384/0x4c0 tcf_action_init+0xf6/0x160 tcf_action_add+0x73/0x170 tc_ctl_action+0x122/0x160 rtnetlink_rcv_msg+0x2a4/0x490 ? netlink_deliver_tap+0x99/0x400 ? validate_linkmsg+0x370/0x370 netlink_rcv_skb+0x4d/0x130 netlink_unicast+0x196/0x230 netlink_sendmsg+0x2e5/0x3e0 sock_sendmsg+0x36/0x40 ___sys_sendmsg+0x280/0x2f0 ? _raw_spin_unlock+0x24/0x30 ? handle_pte_fault+0xafe/0xf30 ? find_held_lock+0x2d/0x90 ? syscall_trace_enter+0x1df/0x360 ? __sys_sendmsg+0x5e/0xa0 __sys_sendmsg+0x5e/0xa0 do_syscall_64+0x60/0x210 entry_SYSCALL_64_after_hwframe+0x49/0xbe RIP: 0033:0x7f1841c7cf10 Code: c3 48 8b 05 82 6f 2c 00 f7 db 64 89 18 48 83 cb ff eb dd 0f 1f 80 00 00 00 00 83 3d 8d d0 2c 00 00 75 10 b8 2e 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 31 c3 48 83 ec 08 e8 ae cc 00 00 48 89 04 24 RSP: 002b:7ffcf9df4d68 EFLAGS: 0246 ORIG_RAX: 002e RAX: ffda RBX: 0001 RCX: 7f1841c7cf10 RDX: RSI: 7ffcf9df4dc0 RDI: 0003 RBP: 5bf56105 R08: 0002 R09: 7ffcf9df8edc R10: 7ffcf9df47e0 R11: 0246 R12: 00671be0 R13: 7ffcf9df4e84 R14: 0008 R15: Fixes: f2cbd4852820 ("net/sched: act_police: fix race condition on state variables") Reported-by: Cong Wang Signed-off-by: Davide Caratti --- net/sched/act_police.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/sched/act_police.c b/net/sched/act_police.c index ee4665a5a022..37c9b8f0e10f 100644 --- a/net/sched/act_police.c +++ b/net/sched/act_police.c @@ -124,6 +124,7 @@ static int tcf_police_init(struct net *net, struct nlattr *nla, return ret; } ret = ACT_P_CREATED; + spin_lock_init(&(to_police(*a)->tcfp_lock)); } else if (!ovr) { tcf_idr_release(*a, bind); return -EEXIST; -- 2.19.1
Re: [PATCH net] net/sched: act_police: add missing spinlock initialization
On Wed, Nov 21, 2018 at 9:24 AM Davide Caratti wrote: > > commit f2cbd4852820 ("net/sched: act_police: fix race condition on state > variables") introduces a new spinlock, but forgets its initialization. > Ensure that tcf_police_init() initializes 'tcfp_lock' every time a 'police' > action is newly created, to avoid the following lockdep splat: Acked-by: Cong Wang
Re: [PATCH net] net/sched: act_police: add missing spinlock initialization
Wed, Nov 21, 2018 at 06:23:53PM CET, dcara...@redhat.com wrote: >commit f2cbd4852820 ("net/sched: act_police: fix race condition on state >variables") introduces a new spinlock, but forgets its initialization. >Ensure that tcf_police_init() initializes 'tcfp_lock' every time a 'police' >action is newly created, to avoid the following lockdep splat: > > INFO: trying to register non-static key. > the code is fine but needs lockdep annotation. > turning off the locking correctness validator. > <...> > Call Trace: > dump_stack+0x85/0xcb > register_lock_class+0x581/0x590 > __lock_acquire+0xd4/0x1330 > ? tcf_police_init+0x2fa/0x650 [act_police] > ? lock_acquire+0x9e/0x1a0 > lock_acquire+0x9e/0x1a0 > ? tcf_police_init+0x2fa/0x650 [act_police] > ? tcf_police_init+0x55a/0x650 [act_police] > _raw_spin_lock_bh+0x34/0x40 > ? tcf_police_init+0x2fa/0x650 [act_police] > tcf_police_init+0x2fa/0x650 [act_police] > tcf_action_init_1+0x384/0x4c0 > tcf_action_init+0xf6/0x160 > tcf_action_add+0x73/0x170 > tc_ctl_action+0x122/0x160 > rtnetlink_rcv_msg+0x2a4/0x490 > ? netlink_deliver_tap+0x99/0x400 > ? validate_linkmsg+0x370/0x370 > netlink_rcv_skb+0x4d/0x130 > netlink_unicast+0x196/0x230 > netlink_sendmsg+0x2e5/0x3e0 > sock_sendmsg+0x36/0x40 > ___sys_sendmsg+0x280/0x2f0 > ? _raw_spin_unlock+0x24/0x30 > ? handle_pte_fault+0xafe/0xf30 > ? find_held_lock+0x2d/0x90 > ? syscall_trace_enter+0x1df/0x360 > ? __sys_sendmsg+0x5e/0xa0 > __sys_sendmsg+0x5e/0xa0 > do_syscall_64+0x60/0x210 > entry_SYSCALL_64_after_hwframe+0x49/0xbe > RIP: 0033:0x7f1841c7cf10 > Code: c3 48 8b 05 82 6f 2c 00 f7 db 64 89 18 48 83 cb ff eb dd 0f 1f 80 00 00 > 00 00 83 3d 8d d0 2c 00 00 75 10 b8 2e 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 > 31 c3 48 83 ec 08 e8 ae cc 00 00 48 89 04 24 > RSP: 002b:7ffcf9df4d68 EFLAGS: 0246 ORIG_RAX: 002e > RAX: ffda RBX: 0001 RCX: 7f1841c7cf10 > RDX: RSI: 7ffcf9df4dc0 RDI: 0003 > RBP: 5bf56105 R08: 0002 R09: 7ffcf9df8edc > R10: 7ffcf9df47e0 R11: 0246 R12: 00671be0 > R13: 7ffcf9df4e84 R14: 0008 R15: > >Fixes: f2cbd4852820 ("net/sched: act_police: fix race condition on state >variables") >Reported-by: Cong Wang >Signed-off-by: Davide Caratti Acked-by: Jiri Pirko
Re: [PATCH net] net/sched: act_police: add missing spinlock initialization
From: Davide Caratti Date: Wed, 21 Nov 2018 18:23:53 +0100 > commit f2cbd4852820 ("net/sched: act_police: fix race condition on state > variables") introduces a new spinlock, but forgets its initialization. > Ensure that tcf_police_init() initializes 'tcfp_lock' every time a 'police' > action is newly created, to avoid the following lockdep splat: ... > Fixes: f2cbd4852820 ("net/sched: act_police: fix race condition on state > variables") > Reported-by: Cong Wang > Signed-off-by: Davide Caratti Applied.