* [PATCH 5.15 0/1] Request to backport 3c52c6bb831f to 5.15.y @ 2022-11-01 0:52 Meena Shanmugam 2022-11-01 0:52 ` [PATCH 5.15 1/1] tcp/udp: Fix memory leak in ipv6_renew_options() Meena Shanmugam 2022-11-01 19:33 ` [PATCH 5.15 0/1] Request to backport 3c52c6bb831f to 5.15.y Greg KH 0 siblings, 2 replies; 5+ messages in thread From: Meena Shanmugam @ 2022-11-01 0:52 UTC (permalink / raw) To: stable; +Cc: gregkh, kuniyu, Meena Shanmugam The commit 3c52c6bb831f (tcp/udp: Fix memory leak in ipv6_renew_options()) fixes a memory leak reported by syzbot. This seems to be a good candidate for the stable trees. This patch didn't apply cleanly in 5.15 kernel, since release_sock() calls are changed to sockopt_release_sock() in the latest kernel versions. Kuniyuki Iwashima (1): tcp/udp: Fix memory leak in ipv6_renew_options(). net/ipv6/ipv6_sockglue.c | 7 +++++++ 1 file changed, 7 insertions(+) -- 2.38.1.273.g43a17bfeac-goog ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 5.15 1/1] tcp/udp: Fix memory leak in ipv6_renew_options(). 2022-11-01 0:52 [PATCH 5.15 0/1] Request to backport 3c52c6bb831f to 5.15.y Meena Shanmugam @ 2022-11-01 0:52 ` Meena Shanmugam 2022-11-01 19:33 ` [PATCH 5.15 0/1] Request to backport 3c52c6bb831f to 5.15.y Greg KH 1 sibling, 0 replies; 5+ messages in thread From: Meena Shanmugam @ 2022-11-01 0:52 UTC (permalink / raw) To: stable; +Cc: gregkh, kuniyu, syzbot, Jakub Kicinski, Meena Shanmugam From: Kuniyuki Iwashima <kuniyu@amazon.com> commit 3c52c6bb831f6335c176a0fc7214e26f43adbd11 upstream. syzbot reported a memory leak [0] related to IPV6_ADDRFORM. The scenario is that while one thread is converting an IPv6 socket into IPv4 with IPV6_ADDRFORM, another thread calls do_ipv6_setsockopt() and allocates memory to inet6_sk(sk)->XXX after conversion. Then, the converted sk with (tcp|udp)_prot never frees the IPv6 resources, which inet6_destroy_sock() should have cleaned up. setsockopt(IPV6_ADDRFORM) setsockopt(IPV6_DSTOPTS) +-----------------------+ +----------------------+ - do_ipv6_setsockopt(sk, ...) - sockopt_lock_sock(sk) - do_ipv6_setsockopt(sk, ...) - lock_sock(sk) ^._ called via tcpv6_prot - WRITE_ONCE(sk->sk_prot, &tcp_prot) before WRITE_ONCE() - xchg(&np->opt, NULL) - txopt_put(opt) - sockopt_release_sock(sk) - release_sock(sk) - sockopt_lock_sock(sk) - lock_sock(sk) - ipv6_set_opt_hdr(sk, ...) - ipv6_update_options(sk, opt) - xchg(&inet6_sk(sk)->opt, opt) ^._ opt is never freed. - sockopt_release_sock(sk) - release_sock(sk) Since IPV6_DSTOPTS allocates options under lock_sock(), we can avoid this memory leak by testing whether sk_family is changed by IPV6_ADDRFORM after acquiring the lock. This issue exists from the initial commit between IPV6_ADDRFORM and IPV6_PKTOPTIONS. [0]: BUG: memory leak unreferenced object 0xffff888009ab9f80 (size 96): comm "syz-executor583", pid 328, jiffies 4294916198 (age 13.034s) hex dump (first 32 bytes): 01 00 00 00 48 00 00 00 08 00 00 00 00 00 00 00 ....H........... 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ backtrace: [<000000002ee98ae1>] kmalloc include/linux/slab.h:605 [inline] [<000000002ee98ae1>] sock_kmalloc+0xb3/0x100 net/core/sock.c:2566 [<0000000065d7b698>] ipv6_renew_options+0x21e/0x10b0 net/ipv6/exthdrs.c:1318 [<00000000a8c756d7>] ipv6_set_opt_hdr net/ipv6/ipv6_sockglue.c:354 [inline] [<00000000a8c756d7>] do_ipv6_setsockopt.constprop.0+0x28b7/0x4350 net/ipv6/ipv6_sockglue.c:668 [<000000002854d204>] ipv6_setsockopt+0xdf/0x190 net/ipv6/ipv6_sockglue.c:1021 [<00000000e69fdcf8>] tcp_setsockopt+0x13b/0x2620 net/ipv4/tcp.c:3789 [<0000000090da4b9b>] __sys_setsockopt+0x239/0x620 net/socket.c:2252 [<00000000b10d192f>] __do_sys_setsockopt net/socket.c:2263 [inline] [<00000000b10d192f>] __se_sys_setsockopt net/socket.c:2260 [inline] [<00000000b10d192f>] __x64_sys_setsockopt+0xbe/0x160 net/socket.c:2260 [<000000000a80d7aa>] do_syscall_x64 arch/x86/entry/common.c:50 [inline] [<000000000a80d7aa>] do_syscall_64+0x38/0x90 arch/x86/entry/common.c:80 [<000000004562b5c6>] entry_SYSCALL_64_after_hwframe+0x63/0xcd Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Reported-by: syzbot <syzkaller@googlegroups.com> Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Meena Shanmugam <meenashanmugam@google.com> --- net/ipv6/ipv6_sockglue.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 8a1c78f38508..b24e0e5d55f9 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c @@ -417,6 +417,12 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, rtnl_lock(); lock_sock(sk); + /* Another thread has converted the socket into IPv4 with + * IPV6_ADDRFORM concurrently. + */ + if (unlikely(sk->sk_family != AF_INET6)) + goto unlock; + switch (optname) { case IPV6_ADDRFORM: @@ -976,6 +982,7 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, break; } +unlock: release_sock(sk); if (needs_rtnl) rtnl_unlock(); -- 2.38.1.273.g43a17bfeac-goog ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 5.15 0/1] Request to backport 3c52c6bb831f to 5.15.y 2022-11-01 0:52 [PATCH 5.15 0/1] Request to backport 3c52c6bb831f to 5.15.y Meena Shanmugam 2022-11-01 0:52 ` [PATCH 5.15 1/1] tcp/udp: Fix memory leak in ipv6_renew_options() Meena Shanmugam @ 2022-11-01 19:33 ` Greg KH 2022-11-01 20:55 ` Meena Shanmugam 1 sibling, 1 reply; 5+ messages in thread From: Greg KH @ 2022-11-01 19:33 UTC (permalink / raw) To: Meena Shanmugam; +Cc: stable, kuniyu On Tue, Nov 01, 2022 at 12:52:01AM +0000, Meena Shanmugam wrote: > The commit 3c52c6bb831f (tcp/udp: Fix memory leak in > ipv6_renew_options()) fixes a memory leak reported by syzbot. This seems > to be a good candidate for the stable trees. This patch didn't apply cleanly > in 5.15 kernel, since release_sock() calls are changed to > sockopt_release_sock() in the latest kernel versions. > > Kuniyuki Iwashima (1): > tcp/udp: Fix memory leak in ipv6_renew_options(). > > net/ipv6/ipv6_sockglue.c | 7 +++++++ > 1 file changed, 7 insertions(+) Can you provide a working version for 6.0.y first? We can not have people upgrading to newer kernels and having a regression. thanks, greg k-h ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 5.15 0/1] Request to backport 3c52c6bb831f to 5.15.y 2022-11-01 19:33 ` [PATCH 5.15 0/1] Request to backport 3c52c6bb831f to 5.15.y Greg KH @ 2022-11-01 20:55 ` Meena Shanmugam 2022-11-02 1:54 ` Greg KH 0 siblings, 1 reply; 5+ messages in thread From: Meena Shanmugam @ 2022-11-01 20:55 UTC (permalink / raw) To: Greg KH; +Cc: stable, kuniyu On Tue, Nov 1, 2022 at 12:32 PM Greg KH <gregkh@linuxfoundation.org> wrote: > > On Tue, Nov 01, 2022 at 12:52:01AM +0000, Meena Shanmugam wrote: > > The commit 3c52c6bb831f (tcp/udp: Fix memory leak in > > ipv6_renew_options()) fixes a memory leak reported by syzbot. This seems > > to be a good candidate for the stable trees. This patch didn't apply cleanly > > in 5.15 kernel, since release_sock() calls are changed to > > sockopt_release_sock() in the latest kernel versions. > > > > Kuniyuki Iwashima (1): > > tcp/udp: Fix memory leak in ipv6_renew_options(). > > > > net/ipv6/ipv6_sockglue.c | 7 +++++++ > > 1 file changed, 7 insertions(+) > > Can you provide a working version for 6.0.y first? We can not have > people upgrading to newer kernels and having a regression. > > thanks, > > greg k-h I have submitted the patch for 6.0.y as well. https://lore.kernel.org/all/20221101200505.291406-2-meenashanmugam@google.com/ Thanks, Meena ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 5.15 0/1] Request to backport 3c52c6bb831f to 5.15.y 2022-11-01 20:55 ` Meena Shanmugam @ 2022-11-02 1:54 ` Greg KH 0 siblings, 0 replies; 5+ messages in thread From: Greg KH @ 2022-11-02 1:54 UTC (permalink / raw) To: Meena Shanmugam; +Cc: stable, kuniyu On Tue, Nov 01, 2022 at 01:55:21PM -0700, Meena Shanmugam wrote: > On Tue, Nov 1, 2022 at 12:32 PM Greg KH <gregkh@linuxfoundation.org> wrote: > > > > On Tue, Nov 01, 2022 at 12:52:01AM +0000, Meena Shanmugam wrote: > > > The commit 3c52c6bb831f (tcp/udp: Fix memory leak in > > > ipv6_renew_options()) fixes a memory leak reported by syzbot. This seems > > > to be a good candidate for the stable trees. This patch didn't apply cleanly > > > in 5.15 kernel, since release_sock() calls are changed to > > > sockopt_release_sock() in the latest kernel versions. > > > > > > Kuniyuki Iwashima (1): > > > tcp/udp: Fix memory leak in ipv6_renew_options(). > > > > > > net/ipv6/ipv6_sockglue.c | 7 +++++++ > > > 1 file changed, 7 insertions(+) > > > > Can you provide a working version for 6.0.y first? We can not have > > people upgrading to newer kernels and having a regression. > > > > thanks, > > > > greg k-h > > I have submitted the patch for 6.0.y as well. > https://lore.kernel.org/all/20221101200505.291406-2-meenashanmugam@google.com/ Wonderful, all now queued up, thanks. greg k-h ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-11-02 1:53 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-11-01 0:52 [PATCH 5.15 0/1] Request to backport 3c52c6bb831f to 5.15.y Meena Shanmugam 2022-11-01 0:52 ` [PATCH 5.15 1/1] tcp/udp: Fix memory leak in ipv6_renew_options() Meena Shanmugam 2022-11-01 19:33 ` [PATCH 5.15 0/1] Request to backport 3c52c6bb831f to 5.15.y Greg KH 2022-11-01 20:55 ` Meena Shanmugam 2022-11-02 1:54 ` Greg KH
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.