| From foo@baz Fri Dec 11 11:39:46 EST 2015 |
| From: Eric Dumazet <edumazet@google.com> |
| Date: Tue, 1 Dec 2015 07:20:07 -0800 |
| Subject: ipv6: sctp: implement sctp_v6_destroy_sock() |
| |
| From: Eric Dumazet <edumazet@google.com> |
| |
| [ Upstream commit 602dd62dfbda3e63a2d6a3cbde953ebe82bf5087 ] |
| |
| Dmitry Vyukov reported a memory leak using IPV6 SCTP sockets. |
| |
| We need to call inet6_destroy_sock() to properly release |
| inet6 specific fields. |
| |
| Reported-by: Dmitry Vyukov <dvyukov@google.com> |
| Signed-off-by: Eric Dumazet <edumazet@google.com> |
| Acked-by: Daniel Borkmann <daniel@iogearbox.net> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/sctp/socket.c | 9 ++++++++- |
| 1 file changed, 8 insertions(+), 1 deletion(-) |
| |
| --- a/net/sctp/socket.c |
| +++ b/net/sctp/socket.c |
| @@ -7149,6 +7149,13 @@ struct proto sctp_prot = { |
| |
| #if IS_ENABLED(CONFIG_IPV6) |
| |
| +#include <net/transp_v6.h> |
| +static void sctp_v6_destroy_sock(struct sock *sk) |
| +{ |
| + sctp_destroy_sock(sk); |
| + inet6_destroy_sock(sk); |
| +} |
| + |
| struct proto sctpv6_prot = { |
| .name = "SCTPv6", |
| .owner = THIS_MODULE, |
| @@ -7158,7 +7165,7 @@ struct proto sctpv6_prot = { |
| .accept = sctp_accept, |
| .ioctl = sctp_ioctl, |
| .init = sctp_init_sock, |
| - .destroy = sctp_destroy_sock, |
| + .destroy = sctp_v6_destroy_sock, |
| .shutdown = sctp_shutdown, |
| .setsockopt = sctp_setsockopt, |
| .getsockopt = sctp_getsockopt, |