diff options
Diffstat (limited to 'net/l2tp/l2tp_ip.c')
| -rw-r--r-- | net/l2tp/l2tp_ip.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c index 7f41b7051269..571db8dd2292 100644 --- a/net/l2tp/l2tp_ip.c +++ b/net/l2tp/l2tp_ip.c | |||
| @@ -228,10 +228,16 @@ static void l2tp_ip_close(struct sock *sk, long timeout) | |||
| 228 | static void l2tp_ip_destroy_sock(struct sock *sk) | 228 | static void l2tp_ip_destroy_sock(struct sock *sk) |
| 229 | { | 229 | { |
| 230 | struct sk_buff *skb; | 230 | struct sk_buff *skb; |
| 231 | struct l2tp_tunnel *tunnel = l2tp_sock_to_tunnel(sk); | ||
| 231 | 232 | ||
| 232 | while ((skb = __skb_dequeue_tail(&sk->sk_write_queue)) != NULL) | 233 | while ((skb = __skb_dequeue_tail(&sk->sk_write_queue)) != NULL) |
| 233 | kfree_skb(skb); | 234 | kfree_skb(skb); |
| 234 | 235 | ||
| 236 | if (tunnel) { | ||
| 237 | l2tp_tunnel_closeall(tunnel); | ||
| 238 | sock_put(sk); | ||
| 239 | } | ||
| 240 | |||
| 235 | sk_refcnt_debug_dec(sk); | 241 | sk_refcnt_debug_dec(sk); |
| 236 | } | 242 | } |
| 237 | 243 | ||
