Most recent kernel where this bug did not occur: 2.6.8 Distribution: Debian unstable, bug reproduced with vanilla kernel from kernel.org Problem Description: When using a VPN client, such as openvpn or gvpe, killing the client (which should result in bringing down of the VPN interface) deadlocks it in D+ state, if static ARP entries are present for the interface. Kernel periodically emits messages "unregister_netdevice: waiting for <interface> to become free. Usage count = 1". The usage count number is equal to the number of the static ARP entries. Thanks a lot to Marc Lehmann for patient debugging of this problem and constructing the test case. Steps to reproduce (using openvpn, all mentioned addresses are non-existent): # modprobe tun # openvpn --remote 192.168.1.111 --dev tun1 --ifconfig 10.0.0.1 10.0.0.2 In another console: # ip neigh add to 10.0.0.3 dev tun1 nud permanent Return to the console in which openvpn is running and press Ctrl-C. The openvpn process hangs in D+ state (can't be killed), error messages mentioned above are periodically produced on the console. Best regards, Jurij Smakov jurij@wooyd.org Key: http://www.wooyd.org/pgpkey/ KeyID: C99E03CC
Created attachment 7692 [details] Kernel config with which the problem was reproduced
bugme-daemon@bugzilla.kernel.org wrote: > > http://bugzilla.kernel.org/show_bug.cgi?id=6295 > > Summary: unregister_netdevice loops indefinitely when bringing > down an interface if static ARP entries are present > Kernel Version: 2.6.16 > Status: NEW > Severity: normal > Owner: shemminger@osdl.org > Submitter: jurij@wooyd.org > > > Most recent kernel where this bug did not occur: 2.6.8 > > Distribution: Debian unstable, bug reproduced with vanilla kernel from kernel.org > > Problem Description: > When using a VPN client, such as openvpn or gvpe, killing the client (which > should result in bringing down of the VPN interface) deadlocks it in D+ state, > if static ARP entries are present for the interface. Kernel periodically emits > messages "unregister_netdevice: waiting for <interface> to become free. Usage > count = 1". The usage count number is equal to the number of the static ARP entries. > > Thanks a lot to Marc Lehmann for patient debugging of this problem and > constructing the test case. > > Steps to reproduce (using openvpn, all mentioned addresses are non-existent): > > # modprobe tun > # openvpn --remote 192.168.1.111 --dev tun1 --ifconfig 10.0.0.1 10.0.0.2 > In another console: > # ip neigh add to 10.0.0.3 dev tun1 nud permanent > Return to the console in which openvpn is running and press Ctrl-C. The openvpn > process hangs in D+ state (can't be killed), error messages mentioned above are > periodically produced on the console. >
I can not reproduce this with 2.6.16.2. Did you have the problem on 2.6.16, or were running the ancient Debian kernel?
I have just successfully reproduced it with 2.6.16.2 built with the config I've posted here earlier. Original submitter mentioned that the bug is not triggered with all configs. Could you please post your config, so that I can confirm that it does not trigger the bug and try to identify the option which causes the problem?
The problem is in ATM Classical IP (clip) layer. It is not correctly cleaning up the neighbor table entry.
Right, I can confirm that disabling CONFIG_ATM_CLIP made the problem disappear.
Patch submitted for 2.6.16.5 and 2.6.17 to fix ATM clip neighbor table.