From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, ch3332xr@gmail.com,
Cong Wang <xiyou.wangcong@gmail.com>,
"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 5.7 56/79] ipv6: fix memory leaks on IPV6_ADDRFORM path
Date: Mon, 10 Aug 2020 17:21:15 +0200 [thread overview]
Message-ID: <20200810151815.018347336@linuxfoundation.org> (raw)
In-Reply-To: <20200810151812.114485777@linuxfoundation.org>
From: Cong Wang <xiyou.wangcong@gmail.com>
[ Upstream commit 8c0de6e96c9794cb523a516c465991a70245da1c ]
IPV6_ADDRFORM causes resource leaks when converting an IPv6 socket
to IPv4, particularly struct ipv6_ac_socklist. Similar to
struct ipv6_mc_socklist, we should just close it on this path.
This bug can be easily reproduced with the following C program:
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int main()
{
int s, value;
struct sockaddr_in6 addr;
struct ipv6_mreq m6;
s = socket(AF_INET6, SOCK_DGRAM, 0);
addr.sin6_family = AF_INET6;
addr.sin6_port = htons(5000);
inet_pton(AF_INET6, "::ffff:192.168.122.194", &addr.sin6_addr);
connect(s, (struct sockaddr *)&addr, sizeof(addr));
inet_pton(AF_INET6, "fe80::AAAA", &m6.ipv6mr_multiaddr);
m6.ipv6mr_interface = 5;
setsockopt(s, SOL_IPV6, IPV6_JOIN_ANYCAST, &m6, sizeof(m6));
value = AF_INET;
setsockopt(s, SOL_IPV6, IPV6_ADDRFORM, &value, sizeof(value));
close(s);
return 0;
}
Reported-by: ch3332xr@gmail.com
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
include/net/addrconf.h | 1 +
net/ipv6/anycast.c | 17 ++++++++++++-----
net/ipv6/ipv6_sockglue.c | 1 +
3 files changed, 14 insertions(+), 5 deletions(-)
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
@@ -276,6 +276,7 @@ int ipv6_sock_ac_join(struct sock *sk, i
const struct in6_addr *addr);
int ipv6_sock_ac_drop(struct sock *sk, int ifindex,
const struct in6_addr *addr);
+void __ipv6_sock_ac_close(struct sock *sk);
void ipv6_sock_ac_close(struct sock *sk);
int __ipv6_dev_ac_inc(struct inet6_dev *idev, const struct in6_addr *addr);
--- a/net/ipv6/anycast.c
+++ b/net/ipv6/anycast.c
@@ -183,7 +183,7 @@ int ipv6_sock_ac_drop(struct sock *sk, i
return 0;
}
-void ipv6_sock_ac_close(struct sock *sk)
+void __ipv6_sock_ac_close(struct sock *sk)
{
struct ipv6_pinfo *np = inet6_sk(sk);
struct net_device *dev = NULL;
@@ -191,10 +191,7 @@ void ipv6_sock_ac_close(struct sock *sk)
struct net *net = sock_net(sk);
int prev_index;
- if (!np->ipv6_ac_list)
- return;
-
- rtnl_lock();
+ ASSERT_RTNL();
pac = np->ipv6_ac_list;
np->ipv6_ac_list = NULL;
@@ -211,6 +208,16 @@ void ipv6_sock_ac_close(struct sock *sk)
sock_kfree_s(sk, pac, sizeof(*pac));
pac = next;
}
+}
+
+void ipv6_sock_ac_close(struct sock *sk)
+{
+ struct ipv6_pinfo *np = inet6_sk(sk);
+
+ if (!np->ipv6_ac_list)
+ return;
+ rtnl_lock();
+ __ipv6_sock_ac_close(sk);
rtnl_unlock();
}
--- a/net/ipv6/ipv6_sockglue.c
+++ b/net/ipv6/ipv6_sockglue.c
@@ -205,6 +205,7 @@ static int do_ipv6_setsockopt(struct soc
fl6_free_socklist(sk);
__ipv6_sock_mc_close(sk);
+ __ipv6_sock_ac_close(sk);
/*
* Sock is moving from IPv6 to IPv4 (sk_prot), so
next prev parent reply other threads:[~2020-08-10 15:24 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-10 15:20 [PATCH 5.7 00/79] 5.7.15-rc1 review Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 01/79] scsi: ufs: Fix and simplify setup_xfer_req variant operation Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 02/79] USB: serial: qcserial: add EM7305 QDL product ID Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 03/79] USB: iowarrior: fix up report size handling for some devices Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 04/79] usb: xhci: define IDs for various ASMedia host controllers Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 05/79] usb: xhci: Fix ASMedia ASM1142 DMA addressing Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 06/79] Revert "ALSA: hda: call runtime_allow() for all hda controllers" Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 07/79] ALSA: hda/realtek: Add alc269/alc662 pin-tables for Loongson-3 laptops Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 08/79] ALSA: hda/ca0132 - Add new quirk ID for Recon3D Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 09/79] ALSA: hda/ca0132 - Fix ZxR Headphone gain control get value Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 10/79] ALSA: hda/ca0132 - Fix AE-5 microphone selection commands Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 11/79] ALSA: seq: oss: Serialize ioctls Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 12/79] staging: android: ashmem: Fix lockdep warning for write operation Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 13/79] staging: rtl8712: handle firmware load failure Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 14/79] Staging: rtl8188eu: rtw_mlme: Fix uninitialized variable authmode Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 15/79] Bluetooth: Fix slab-out-of-bounds read in hci_extended_inquiry_result_evt() Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 16/79] Bluetooth: Prevent out-of-bounds read in hci_inquiry_result_evt() Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 17/79] Bluetooth: Prevent out-of-bounds read in hci_inquiry_result_with_rssi_evt() Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 18/79] omapfb: dss: Fix max fclk divider for omap36xx Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 19/79] binder: Prevent context manager from incrementing ref 0 Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 20/79] Smack: fix use-after-free in smk_write_relabel_self() Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 21/79] scripts: add dummy report mode to add_namespace.cocci Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 22/79] lkdtm/heap: Avoid edge and middle of slabs Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 23/79] vgacon: Fix for missing check in scrollback handling Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 24/79] mtd: properly check all write ioctls for permissions Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 25/79] leds: wm831x-status: fix use-after-free on unbind Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 26/79] leds: lm36274: " Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 27/79] leds: da903x: " Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 28/79] leds: lm3533: " Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 29/79] leds: 88pm860x: " Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 30/79] gpio: max77620: Fix missing release of interrupt Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 31/79] bpf: Fix NULL pointer dereference in __btf_resolve_helper_id() Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 32/79] net/9p: validate fds in p9_fd_open Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 33/79] drm/nouveau/kms/tu102: wait for core update to complete when assigning windows Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 34/79] drm/nouveau/fbcon: fix module unload when fbcon init has failed for some reason Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 35/79] drm/nouveau/fbcon: zero-initialise the mode_cmd2 structure Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 36/79] io_uring: fix lockup in io_fail_links() Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 37/79] nvme-pci: prevent SK hynix PC400 from using Write Zeroes command Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 38/79] drm/bridge/adv7511: set the bridge type properly Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 39/79] drm/panel: Fix auo, kd101n80-45na horizontal noise on edges of panel Greg Kroah-Hartman
2020-08-10 15:20 ` [PATCH 5.7 40/79] drm/drm_fb_helper: fix fbdev with sparc64 Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 41/79] net: mscc: ocelot: fix hardware timestamp dequeue logic Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 42/79] i2c: slave: improve sanity check when registering Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 43/79] i2c: slave: add sanity check when unregistering Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 44/79] usb: hso: check for return value in hso_serial_common_create() Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 45/79] net: ethernet: mtk_eth_soc: Always call mtk_gmac0_rgmii_adjust() for mt7623 Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 46/79] ALSA: hda: fix NULL pointer dereference during suspend Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 47/79] firmware: Fix a reference count leak Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 48/79] cfg80211: check vendor command doit pointer before use Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 49/79] igb: reinit_locked() should be called with rtnl_lock Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 50/79] atm: fix atm_dev refcnt leaks in atmtcp_remove_persistent Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 51/79] tools lib traceevent: Fix memory leak in process_dynamic_array_len Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 52/79] xattr: break delegations in {set,remove}xattr Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 53/79] Revert "powerpc/kasan: Fix shadow pages allocation failure" Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 54/79] PCI: tegra: Revert tegra124 raw_violation_fixup Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 55/79] ipv4: Silence suspicious RCU usage warning Greg Kroah-Hartman
2020-08-10 15:21 ` Greg Kroah-Hartman [this message]
2020-08-10 15:21 ` [PATCH 5.7 57/79] ipv6: Fix nexthop refcnt leak when creating ipv6 route info Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 58/79] rxrpc: Fix race between recvmsg and sendmsg on immediate call failure Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 59/79] vxlan: Ensure FDB dump is performed under RCU Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 60/79] net: lan78xx: replace bogus endpoint lookup Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 61/79] rhashtable: Restore RCU marking on rhash_lock_head Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 62/79] devlink: ignore -EOPNOTSUPP errors on dumpit Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 63/79] appletalk: Fix atalk_proc_init() return path Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 64/79] dpaa2-eth: Fix passing zero to PTR_ERR warning Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 65/79] hv_netvsc: do not use VF device if link is down Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 66/79] net: bridge: clear bridges private skb space on xmit Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 67/79] net: gre: recompute gre csum for sctp over gre tunnels Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 68/79] net: macb: Properly handle phylink on at91sam9x Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 69/79] net: mvpp2: fix memory leak in mvpp2_rx Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 70/79] net/sched: act_ct: fix miss set mru for ovs after defrag in act_ct Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 71/79] net: thunderx: use spin_lock_bh in nicvf_set_rx_mode_task() Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 72/79] openvswitch: Prevent kernel-infoleak in ovs_ct_put_key() Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 73/79] Revert "vxlan: fix tos value before xmit" Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 74/79] selftests/net: relax cpu affinity requirement in msg_zerocopy test Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 75/79] tcp: apply a floor of 1 for RTT samples from TCP timestamps Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 76/79] mptcp: be careful on subflow creation Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 77/79] mptcp: fix bogus sendmsg() return code under pressure Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 78/79] ima: move APPRAISE_BOOTPARAM dependency on ARCH_POLICY to runtime Greg Kroah-Hartman
2020-08-10 15:21 ` [PATCH 5.7 79/79] arm64: kaslr: Use standard early random function Greg Kroah-Hartman
2020-08-10 23:07 ` [PATCH 5.7 00/79] 5.7.15-rc1 review Shuah Khan
2020-08-11 7:10 ` Naresh Kamboju
2020-08-11 14:23 ` Guenter Roeck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200810151815.018347336@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=ch3332xr@gmail.com \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=xiyou.wangcong@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox