CVE-2026-93250
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
24/09/2026
Last modified:
25/09/2026
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
vxlan: mdb: Fix use-after-free in vxlan_mdb_flush()<br />
<br />
vxlan_mdb_flush() iterates over the MDB entries using<br />
hlist_for_each_entry_safe(), which only tolerates the removal of the<br />
current entry. Contrary to the comment above the loop, the removal of an<br />
entry can trigger the removal of another entry.<br />
<br />
Flushing the remotes of a (*, G) entry also removes the (S, G) entries<br />
that were created for its source list, once they are left without<br />
remotes:<br />
<br />
vxlan_mdb_remotes_flush()<br />
-> vxlan_mdb_remote_del()<br />
-> vxlan_mdb_remote_srcs_del()<br />
-> vxlan_mdb_remote_src_del()<br />
-> vxlan_mdb_remote_src_fwd_del()<br />
-> __vxlan_mdb_del()<br />
-> vxlan_mdb_entry_put()<br />
<br />
Such an entry can be located after the (*, G) entry in the list, as<br />
vxlan_mdb_entry_get() returns an existing entry without moving it to the<br />
head of the list. This order is obtained by adding the (S, G) entry<br />
before the (*, G) entry, the latter with NLM_F_REPLACE, as the addition<br />
of the source otherwise fails with -EEXIST. The (S, G) entry is then the<br />
entry saved by hlist_for_each_entry_safe() and it is freed while the<br />
(*, G) entry is processed. The next iteration calls hlist_del() on it<br />
again, writing LIST_POISON1 to LIST_POISON2 [1].<br />
<br />
Besides device deletion, the flush is also reachable from RTM_DELMDB<br />
with NLM_F_BULK.<br />
<br />
Fix by re-reading the next entry after the remotes were flushed. The<br />
current entry cannot be removed by this flush, as source lists can only<br />
be configured on (*, G) entries and the removed entries are (S, G)<br />
entries. It is therefore still linked and its next pointer reflects the<br />
removals.<br />
<br />
[1]<br />
BUG: KASAN: wild-memory-access in vxlan_mdb_entry_put.part.0+0x328/0x588<br />
Write of size 8 at addr dead000000000122 by task ip/327<br />
<br />
CPU: 3 UID: 1000 PID: 327 Comm: ip Not tainted 7.2.0-rc7 #2 PREEMPT<br />
Call trace:<br />
vxlan_mdb_entry_put.part.0+0x328/0x588<br />
vxlan_mdb_flush+0x1d8/0x25c<br />
vxlan_mdb_fini+0x8c/0x100<br />
vxlan_uninit+0x1c/0x7c<br />
unregister_netdevice_many_notify+0x954/0xd4c<br />
rtnl_dellink+0x210/0x530<br />
rtnetlink_rcv_msg+0x434/0x4d0<br />
netlink_rcv_skb+0xc4/0x204<br />
rtnetlink_rcv+0x18/0x24<br />
netlink_unicast+0x4b8/0x548<br />
netlink_sendmsg+0x29c/0x560<br />
____sys_sendmsg+0x390/0x3ec<br />
___sys_sendmsg+0x114/0x188<br />
__sys_sendmsg+0xf0/0x178<br />
__arm64_sys_sendmsg+0x48/0x60<br />
invoke_syscall.constprop.0+0x58/0x180<br />
el0_svc_common.constprop.0+0x74/0x140<br />
do_el0_svc+0x30/0x40<br />
el0_svc+0x38/0x98<br />
el0t_64_sync_handler+0xa0/0xe4<br />
el0t_64_sync+0x198/0x19c
Impact
Base Score 3.x
7.80
Severity 3.x
HIGH
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/3e6b705bc162fc7257645725a7d2cf6c71250318
- https://git.kernel.org/stable/c/bc2dc66a6693a78f8c1e6ca2dbebd50f16e2c366
- https://git.kernel.org/stable/c/c7dc26d06f90ca11bbd6114f6a62a67d038816c7
- https://git.kernel.org/stable/c/f26400b325bdc2868e40612c4804c82cf8ba6275
- https://git.kernel.org/stable/c/f8a9b988e7a7bc674e74e8c901794d792c35689e


