diff options
| author | Michal Kubecek <[email protected]> | 2014-06-03 08:26:06 +0000 |
|---|---|---|
| committer | David S. Miller <[email protected]> | 2014-06-03 23:07:44 +0000 |
| commit | 21ee543edc0dea36ab58d24523fcd42b8a270df8 (patch) | |
| tree | 75ebd1123fd7f54e1712e0e3232c859548781e95 /drivers/net/xen-netback/interface.c | |
| parent | Merge branch 'cnic' (diff) | |
| download | kernel-21ee543edc0dea36ab58d24523fcd42b8a270df8.tar.gz kernel-21ee543edc0dea36ab58d24523fcd42b8a270df8.zip | |
xfrm: fix race between netns cleanup and state expire notification
The xfrm_user module registers its pernet init/exit after xfrm
itself so that its net exit function xfrm_user_net_exit() is
executed before xfrm_net_exit() which calls xfrm_state_fini() to
cleanup the SA's (xfrm states). This opens a window between
zeroing net->xfrm.nlsk pointer and deleting all xfrm_state
instances which may access it (via the timer). If an xfrm state
expires in this window, xfrm_exp_state_notify() will pass null
pointer as socket to nlmsg_multicast().
As the notifications are called inside rcu_read_lock() block, it
is sufficient to retrieve the nlsk socket with rcu_dereference()
and check the it for null.
Signed-off-by: Michal Kubecek <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Diffstat (limited to 'drivers/net/xen-netback/interface.c')
0 files changed, 0 insertions, 0 deletions
