From: Wentao Luo <luowentao077@gmail.com>
To: netdev@vger.kernel.org
Cc: Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@kernel.org>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Kuniyuki Iwashima <kuniyu@google.com>,
Edward Cree <ecree.xilinx@gmail.com>,
Fernando Fernandez Mancera <fmancera@suse.de>,
Antonio Quartulli <antonio@openvpn.net>,
Jiri Benc <jbenc@redhat.com>
Subject: [PATCH net] vxlan: fix NULL deref when joining a group without a socket
Date: Tue, 29 Sep 2026 20:22:28 +0800 [thread overview]
Message-ID: <b397156b-c184-4061-a9d5-52cce5c4f07e@gmail.com> (raw)
vxlan_sock_add() ignores -EAFNOSUPPORT when creating the IPv6 socket
of a metadata device, so the device can come up with vn6_sock NULL
after ipv6.disable=1. A later IPv6 multicast join still uses that
socket. vxlan_igmp_join() dereferences it and oopses.
This was observed on an external vnifilter device by adding an IPv6
group while the device was up:
BUG: KASAN: null-ptr-deref in vxlan_igmp_join+0xb8/0x18c
Read of size 8 at addr 0000000000000010 by task bridge/729
Call trace:
show_stack+0x18/0x24 (C)
dump_stack_lvl+0x78/0x90
print_report+0x468/0x5cc
kasan_report+0xa4/0xf0
__asan_load8+0x7c/0xd0
vxlan_igmp_join+0xb8/0x18c
vxlan_vni_update_group+0x2b4/0x390
vxlan_process_vni_filter+0xfe0/0x1750
vxlan_vnifilter_process+0x218/0x270
rtnetlink_rcv_msg+0x1ec/0x514
netlink_rcv_skb+0xc0/0x1f0
rtnetlink_rcv+0x18/0x24
netlink_unicast+0x4b8/0x558
netlink_sendmsg+0x2b8/0x584
...
Return -EAFNOSUPPORT from vxlan_igmp_join() and vxlan_igmp_leave()
when the address family has no socket. The same leave path runs while
rolling back a failed join.
Fixes: d074bf960044 ("vxlan: correctly handle ipv6.disable module
parameter")
Signed-off-by: Wentao Luo <luowentao077@gmail.com>
---
Simplest reproducer. Build with CONFIG_IPV6=y and boot with
ipv6.disable=1:
ip link add vxlan0 type vxlan external group ff05::1 dev lo dstport 4789
ip link set vxlan0 up
The NULL pointer dereference is then reproduced.
drivers/net/vxlan/vxlan_multicast.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/drivers/net/vxlan/vxlan_multicast.c
b/drivers/net/vxlan/vxlan_multicast.c
index 3b75b48dc726d..33ec1fd59ca82 100644
--- a/drivers/net/vxlan/vxlan_multicast.c
+++ b/drivers/net/vxlan/vxlan_multicast.c
@@ -29,6 +29,9 @@ int vxlan_igmp_join(struct vxlan_dev *vxlan, union
vxlan_addr *rip,
.imr_ifindex = ifindex,
};
+ if (!sock4)
+ return -EAFNOSUPPORT;
+
sk = sock4->sk;
lock_sock(sk);
ret = ip_mc_join_group(sk, &mreq);
@@ -37,6 +40,9 @@ int vxlan_igmp_join(struct vxlan_dev *vxlan, union
vxlan_addr *rip,
} else {
struct vxlan_sock *sock6 = rtnl_dereference(vxlan->vn6_sock);
+ if (!sock6)
+ return -EAFNOSUPPORT;
+
sk = sock6->sk;
lock_sock(sk);
ret = ipv6_sock_mc_join(sk, ifindex, &ip->sin6.sin6_addr);
@@ -62,6 +68,9 @@ int vxlan_igmp_leave(struct vxlan_dev *vxlan, union
vxlan_addr *rip,
.imr_ifindex = ifindex,
};
+ if (!sock4)
+ return -EAFNOSUPPORT;
+
sk = sock4->sk;
lock_sock(sk);
ret = ip_mc_leave_group(sk, &mreq);
@@ -70,6 +79,9 @@ int vxlan_igmp_leave(struct vxlan_dev *vxlan, union
vxlan_addr *rip,
} else {
struct vxlan_sock *sock6 = rtnl_dereference(vxlan->vn6_sock);
+ if (!sock6)
+ return -EAFNOSUPPORT;
+
sk = sock6->sk;
lock_sock(sk);
ret = ipv6_sock_mc_drop(sk, ifindex, &ip->sin6.sin6_addr);
--
2.43.0
next reply other threads:[~2026-09-29 12:22 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-29 12:22 Wentao Luo [this message]
2026-09-29 15:27 ` [PATCH net] vxlan: fix NULL deref when joining a group without a socket Fernando Fernandez Mancera
2026-09-30 6:03 ` Jiri Benc
2026-09-30 10:07 ` Fernando Fernandez Mancera
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=b397156b-c184-4061-a9d5-52cce5c4f07e@gmail.com \
--to=luowentao077@gmail.com \
--cc=andrew+netdev@lunn.ch \
--cc=antonio@openvpn.net \
--cc=davem@davemloft.net \
--cc=ecree.xilinx@gmail.com \
--cc=edumazet@kernel.org \
--cc=fmancera@suse.de \
--cc=jbenc@redhat.com \
--cc=kuba@kernel.org \
--cc=kuniyu@google.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.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 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.