| From 66215ac2e4fb92b51c2f49eaf326c45bdf06088f Mon Sep 17 00:00:00 2001 |
| From: Xiaodong Xu <stid.smth@gmail.com> |
| Date: Sat, 22 Sep 2012 00:09:32 +0000 |
| Subject: pppoe: drop PPPOX_ZOMBIEs in pppoe_release |
| |
| |
| From: Xiaodong Xu <stid.smth@gmail.com> |
| |
| [ Upstream commit 2b018d57ff18e5405823e5cb59651a5b4d946d7b ] |
| |
| When PPPOE is running over a virtual ethernet interface (e.g., a |
| bonding interface) and the user tries to delete the interface in case |
| the PPPOE state is ZOMBIE, the kernel will loop forever while |
| unregistering net_device for the reference count is not decreased to |
| zero which should have been done with dev_put(). |
| |
| Signed-off-by: Xiaodong Xu <stid.smth@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ppp/pppoe.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/net/ppp/pppoe.c |
| +++ b/drivers/net/ppp/pppoe.c |
| @@ -570,7 +570,7 @@ static int pppoe_release(struct socket * |
| |
| po = pppox_sk(sk); |
| |
| - if (sk->sk_state & (PPPOX_CONNECTED | PPPOX_BOUND)) { |
| + if (sk->sk_state & (PPPOX_CONNECTED | PPPOX_BOUND | PPPOX_ZOMBIE)) { |
| dev_put(po->pppoe_dev); |
| po->pppoe_dev = NULL; |
| } |