diff options
author | Jarek Poplawski <jarkao2@gmail.com> | 2008-03-04 05:49:34 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-03-04 05:49:34 +0100 |
commit | ec9b6add7d81f902f6094e71f595da4a362f3348 (patch) | |
tree | 5636180fcd749cfce604d238357ccc2ff63bb770 | |
parent | Subject: [PPPOL2TP] add missing sock_put() in pppol2tp_recv_dequeue() (diff) | |
download | linux-ec9b6add7d81f902f6094e71f595da4a362f3348.tar.xz linux-ec9b6add7d81f902f6094e71f595da4a362f3348.zip |
[PPPOL2TP]: Add missing sock_put() in pppol2tp_tunnel_closeall()
Every skb removed from session->reorder_q needs sock_put().
Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
Acked-by: James Chapman <jchapman@katalix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/pppol2tp.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/pppol2tp.c b/drivers/net/pppol2tp.c index dcd499118b95..86e5dba079fe 100644 --- a/drivers/net/pppol2tp.c +++ b/drivers/net/pppol2tp.c @@ -1111,6 +1111,8 @@ static void pppol2tp_tunnel_closeall(struct pppol2tp_tunnel *tunnel) for (hash = 0; hash < PPPOL2TP_HASH_SIZE; hash++) { again: hlist_for_each_safe(walk, tmp, &tunnel->session_hlist[hash]) { + struct sk_buff *skb; + session = hlist_entry(walk, struct pppol2tp_session, hlist); sk = session->sock; @@ -1139,7 +1141,10 @@ again: /* Purge any queued data */ skb_queue_purge(&sk->sk_receive_queue); skb_queue_purge(&sk->sk_write_queue); - skb_queue_purge(&session->reorder_q); + while ((skb = skb_dequeue(&session->reorder_q))) { + kfree_skb(skb); + sock_put(sk); + } release_sock(sk); sock_put(sk); |