• Eric W. Biederman's avatar
    net: Don't leak packets when a netns is going down · 0a36b345
    Eric W. Biederman authored
    I have been tracking for a while a case where when the
    network namespace exits the cleanup gets stck in an
    endless precessess of:
    
    unregister_netdevice: waiting for lo to become free. Usage count = 3
    unregister_netdevice: waiting for lo to become free. Usage count = 3
    unregister_netdevice: waiting for lo to become free. Usage count = 3
    unregister_netdevice: waiting for lo to become free. Usage count = 3
    unregister_netdevice: waiting for lo to become free. Usage count = 3
    unregister_netdevice: waiting for lo to become free. Usage count = 3
    unregister_netdevice: waiting for lo to become free. Usage count = 3
    
    It turns out that if you listen on a multicast address an unsubscribe
    packet is sent when the network device goes down.   If you shutdown
    the network namespace without carefully cleaning up this can trigger
    the unsubscribe packet to be sent over the loopback interface while
    the network namespace is going down.
    
    All of which is fine except when we drop the packet and forget to
    free it leaking the skb and the dst entry attached to.  As it
    turns out the dst entry hold a reference to the idev which holds
    the dev and keeps everything from being cleaned up.  Yuck!
    
    By fixing my earlier thinko and add the needed kfree_skb and everything
    cleans up beautifully. 
    Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0a36b345
dev.c 120 KB