Message ID | 48DC7C68.1060507@iki.fi |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Timo Ter??s <timo.teras@iki.fi> wrote: > Fix a xfrm_{state,policy}_walk leak if pfkey socket is closed while > dumping is on-going. > > Signed-off-by: Timo Teras <timo.teras@iki.fi> > --- > Checked netlink code and the dumper clean up is done in there in > netlink_sock_destruct. > > I'll update the "put dumpers on dump list" patch by making the > state release a function since there's the skb to free too. > > net/key/af_key.c | 8 ++++++++ > 1 files changed, 8 insertions(+), 0 deletions(-) > > diff --git a/net/key/af_key.c b/net/key/af_key.c > index d628df9..97007de 100644 > --- a/net/key/af_key.c > +++ b/net/key/af_key.c > @@ -89,6 +89,14 @@ static int pfkey_do_dump(struct pfkey_sock *pfk) > > static void pfkey_sock_destruct(struct sock *sk) > { > + struct pfkey_sock *pfk = pfkey_sk(sk); > + > + if (pfk->dump.dump) { > + pfk->dump.done(pfk); > + pfk->dump.dump = NULL; > + pfk->dump.done = NULL; > + } > + > skb_queue_purge(&sk->sk_receive_queue); > > if (!sock_flag(sk, SOCK_DEAD)) { Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Thanks,
diff --git a/net/key/af_key.c b/net/key/af_key.c index d628df9..97007de 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c @@ -89,6 +89,14 @@ static int pfkey_do_dump(struct pfkey_sock *pfk) static void pfkey_sock_destruct(struct sock *sk) { + struct pfkey_sock *pfk = pfkey_sk(sk); + + if (pfk->dump.dump) { + pfk->dump.done(pfk); + pfk->dump.dump = NULL; + pfk->dump.done = NULL; + } + skb_queue_purge(&sk->sk_receive_queue); if (!sock_flag(sk, SOCK_DEAD)) {
Fix a xfrm_{state,policy}_walk leak if pfkey socket is closed while dumping is on-going. Signed-off-by: Timo Teras <timo.teras@iki.fi> --- Checked netlink code and the dumper clean up is done in there in netlink_sock_destruct. I'll update the "put dumpers on dump list" patch by making the state release a function since there's the skb to free too. net/key/af_key.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-)