key: Free dumping state on socket close
Subsystems (3)
PATCH 1/1 key: Free dumping state on socket close
Fix a xfrm_{state,policy}_walk leak if pfkey socket is closed while dumping is on-going.
Signed-off-by Timo Teras <[email protected]>
---
Should go to -stable too.
net/key/af_key.c | 30 +++++++++++++++++++----------- 1 files changed, 19 insertions(+), 11 deletions(-)
net/key/af_key.c +19 -11
@@ -73,22 +73,18 @@ static int pfkey_can_dump(struct sock *sk)return 0 ; } -static int pfkey_do_dump (struct pfkey_sock *pfk) +static void pfkey_terminate_dump (struct pfkey_sock *pfk) { -int rc; - - rc = pfk->dump.dump (pfk); -if (rc == -ENOBUFS ) -return 0 ; - - pfk->dump.done (pfk); - pfk->dump.dump =NULL ; - pfk->dump.done =NULL ; -return rc; +if (pfk->dump.dump) { + pfk->dump.done (pfk); + pfk->dump.dump =NULL ; + pfk->dump.done =NULL ; + } }static void pfkey_sock_destruct (struct sock *sk) { +pfkey_terminate_dump (pfkey_sk (sk));skb_queue_purge (&sk->sk_receive_queue);if (!sock_flag (sk,SOCK_DEAD )) {
@@ -310,6 +306,18 @@ static int pfkey_broadcast(struct sk_buff *skb, gfp_t allocation,return err; } +static int pfkey_do_dump (struct pfkey_sock *pfk) +{ +int rc; + + rc = pfk->dump.dump (pfk); +if (rc == -ENOBUFS ) +return 0 ; + +pfkey_terminate_dump (pfk); +return rc; +} +static inline void pfkey_hdr_dup (struct sadb_msg *new,struct sadb_msg *orig) { *new = *orig;
Signature · 1 line
1.5.4.3
David Miller
maintainerFrom: Timo Teräs <[email protected]>
Date: Wed, 01 Oct 2008 13:55:15 +0300
Quoted 6 lines
Fix a xfrm_{state,policy}_walk leak if pfkey socket is closed while dumping is on-going.
Signed-off-by Timo Teras <[email protected]>---
Should go to -stable too.
Applied and queued for -stable, thanks!