• Alexey Dobriyan's avatar
    af_key: fix netns ops ordering on module load/unload · 180211b8
    Alexey Dobriyan authored
    1. After sock_register() returns, it's possible to create sockets,
       even if module still not initialized fully (blame generic module code
       for that!)
    2. Consequently, pfkey_create() can be called with pfkey_net_id still not
       initialized which will BUG_ON in net_generic():
    	kernel BUG at include/net/netns/generic.h:43!
    3. During netns shutdown, netns ops should be unregistered after
       key manager unregistered because key manager calls can be triggered
       from xfrm_user module:
    
       	general protection fault: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
    	pfkey_broadcast+0x111/0x210 [af_key]
    	pfkey_send_notify+0x16a/0x300 [af_key]
    	km_state_notify+0x41/0x70
    	xfrm_flush_sa+0x75/0x90 [xfrm_user]
    4. Unregister netns ops after socket ops just in case and for symmetry.
    
    Reported by Luca Tettamanti.
    Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
    Tested-by: default avatarLuca Tettamanti <kronos.it@gmail.com>
    Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    180211b8
af_key.c 99.7 KB