UBUNTU-CVE-2026-23209
In the Linux kernel, the following vulnerability has been resolved: macvlan: fix error recovery in macvlan_common_newlink() valis provided a nice repro to crash the kernel: ip link add p1 type veth peer p2 ip link set address 00:00:00:00:00:20 dev p1 ip link set up dev p1 ip link set up dev p2 ip link add mv0 link p2 type macvlan mode source ip link add invalid% link p2 type macvlan mode source macaddr add 00:00:00:00:00:20 ping -c1 -I p1 1.2.3.4 He also gave a very detailed analysis: <quote valis> The issue is triggered when a new macvlan link is created with MACVLAN_MODE_SOURCE mode and MACVLAN_MACADDR_ADD (or MACVLAN_MACADDR_SET) parameter, lower device already has a macvlan port and register_netdevice() called from macvlan_common_newlink() fails (e.g. because of the invalid link name). In this case macvlan_hash_add_source is called from macvlan_change_sources() / macvlan_common_newlink(): This adds a reference to vlan to the port's vlan_source_hash using macvlan_source_entry. vlan is a pointer to the priv data of the link that is being created. When register_netdevice() fails, the error is returned from macvlan_newlink() to rtnl_newlink_create(): if (ops->newlink) err = ops->newlink(dev, ¶ms, extack); else err = register_netdevice(dev); if (err < 0) { free_netdev(dev); goto out; } and free_netdev() is called, causing a kvfree() on the struct net_device that is still referenced in the source entry attached to the lower device's macvlan port. Now all packets sent on the macvlan port with a matching source mac address will trigger a use-after-free in macvlan_forward_source(). </quote valis> With all that, my fix is to make sure we call macvlan_flush_sources() regardless of @create value whenever "goto destroy_macvlan_port;" path is taken. Many thanks to valis for following up on this issue.
02 / AFFECTED SOFTWARE
Affected packages
11 explicit affected versions
49 explicit affected versions
112 explicit affected versions
82 explicit affected versions
50 explicit affected versions
6 explicit affected versions
12 explicit affected versions
19 explicit affected versions
10 explicit affected versions
6 explicit affected versions
92 explicit affected versions
24 explicit affected versions
77 explicit affected versions
77 explicit affected versions
87 explicit affected versions
80 explicit affected versions
72 explicit affected versions
10 explicit affected versions
32 explicit affected versions
26 explicit affected versions
84 explicit affected versions
7 explicit affected versions
79 explicit affected versions
35 explicit affected versions
13 explicit affected versions
80 explicit affected versions
39 explicit affected versions
35 explicit affected versions
44 explicit affected versions
42 explicit affected versions
18 explicit affected versions
36 explicit affected versions
113 explicit affected versions
64 explicit affected versions
40 explicit affected versions
117 explicit affected versions
13 explicit affected versions
4 explicit affected versions
23 explicit affected versions
47 explicit affected versions
120 explicit affected versions
1 explicit affected versions
1 explicit affected versions
21 explicit affected versions
9 explicit affected versions
16 explicit affected versions
10 explicit affected versions
15 explicit affected versions
72 explicit affected versions
43 explicit affected versions
8 explicit affected versions
7 explicit affected versions
12 explicit affected versions
11 explicit affected versions
7 explicit affected versions
12 explicit affected versions
14 explicit affected versions
10 explicit affected versions
1 explicit affected versions
7 explicit affected versions
11 explicit affected versions
100 explicit affected versions
12 explicit affected versions
4 explicit affected versions
103 explicit affected versions
12 explicit affected versions
36 explicit affected versions
38 explicit affected versions
16 explicit affected versions
12 explicit affected versions
25 explicit affected versions
29 explicit affected versions
10 explicit affected versions
37 explicit affected versions
10 explicit affected versions
4 explicit affected versions
13 explicit affected versions
35 explicit affected versions
3 explicit affected versions
10 explicit affected versions
11 explicit affected versions
59 explicit affected versions
1 explicit affected versions
26 explicit affected versions
6 explicit affected versions
13 explicit affected versions
32 explicit affected versions
1 explicit affected versions
29 explicit affected versions
107 explicit affected versions
13 explicit affected versions
12 explicit affected versions
89 explicit affected versions
36 explicit affected versions
36 explicit affected versions
3 explicit affected versions
1 explicit affected versions
98 explicit affected versions
84 explicit affected versions
47 explicit affected versions
33 explicit affected versions
23 explicit affected versions
53 explicit affected versions
10 explicit affected versions
15 explicit affected versions
14 explicit affected versions
111 explicit affected versions
11 explicit affected versions
5 explicit affected versions
12 explicit affected versions
4 explicit affected versions
134 explicit affected versions
7 explicit affected versions
12 explicit affected versions
3 explicit affected versions
11 explicit affected versions
5 explicit affected versions
69 explicit affected versions
126 explicit affected versions
85 explicit affected versions
148 explicit affected versions
10 explicit affected versions
26 explicit affected versions
34 explicit affected versions
1 explicit affected versions
61 explicit affected versions
30 explicit affected versions
42 explicit affected versions
11 explicit affected versions
4 explicit affected versions
13 explicit affected versions
41 explicit affected versions
134 explicit affected versions
75 explicit affected versions
16 explicit affected versions
83 explicit affected versions
45 explicit affected versions
3 explicit affected versions
128 explicit affected versions
88 explicit affected versions
1 explicit affected versions
7 explicit affected versions
2 explicit affected versions
10 explicit affected versions
51 explicit affected versions
11 explicit affected versions
87 explicit affected versions
18 explicit affected versions
37 explicit affected versions
12 explicit affected versions
66 explicit affected versions
72 explicit affected versions
3 explicit affected versions
27 explicit affected versions
58 explicit affected versions
117 explicit affected versions
1 explicit affected versions
1 explicit affected versions
92 explicit affected versions
38 explicit affected versions
8 explicit affected versions
49 explicit affected versions
5 explicit affected versions
8 explicit affected versions
1 explicit affected versions
10 explicit affected versions
7 explicit affected versions
41 explicit affected versions
13 explicit affected versions
106 explicit affected versions
13 explicit affected versions
68 explicit affected versions
7 explicit affected versions
8 explicit affected versions
89 explicit affected versions
10 explicit affected versions
12 explicit affected versions
9 explicit affected versions
31 explicit affected versions
105 explicit affected versions
76 explicit affected versions
52 explicit affected versions
44 explicit affected versions
16 explicit affected versions
3 explicit affected versions
13 explicit affected versions
26 explicit affected versions
45 explicit affected versions
37 explicit affected versions
46 explicit affected versions
14 explicit affected versions
38 explicit affected versions
9 explicit affected versions
12 explicit affected versions
11 explicit affected versions
34 explicit affected versions
15 explicit affected versions
9 explicit affected versions
85 explicit affected versions
8 explicit affected versions
7 explicit affected versions
137 explicit affected versions
117 explicit affected versions
4 explicit affected versions
74 explicit affected versions
3 explicit affected versions
1 explicit affected versions
1 explicit affected versions
1 explicit affected versions
83 explicit affected versions
107 explicit affected versions
73 explicit affected versions
73 explicit affected versions
13 explicit affected versions
43 explicit affected versions
73 explicit affected versions
9 explicit affected versions
115 explicit affected versions
162 explicit affected versions
10 explicit affected versions
8 explicit affected versions
40 explicit affected versions
85 explicit affected versions
14 explicit affected versions
4 explicit affected versions
78 explicit affected versions
9 explicit affected versions
11 explicit affected versions
1 explicit affected versions
64 explicit affected versions
119 explicit affected versions
14 explicit affected versions
34 explicit affected versions
73 explicit affected versions
03 / CONNECTIONS
Connected vulnerabilities
04 / EVIDENCE
Source records
In the Linux kernel, the following vulnerability has been resolved: macvlan: fix error recovery in macvlan_common_newlink() valis provided a nice repro to crash the kernel: ip link add p1 type veth peer p2 ip link set address 00:00:00:00:00:20 dev p1 ip link set up dev p1 ip link set up dev p2 ip link add mv0 link p2 type macvlan mode source ip link add invalid% link p2 type macvlan mode source macaddr add 00:00:00:00:00:20 ping -c1 -I p1 1.2.3.4 He also gave a very detailed analysis: <quote valis> The issue is triggered when a new macvlan link is created with MACVLAN_MODE_SOURCE mode and MACVLAN_MACADDR_ADD (or MACVLAN_MACADDR_SET) parameter, lower device already has a macvlan port and register_netdevice() called from macvlan_common_newlink() fails (e.g. because of the invalid link name). In this case macvlan_hash_add_source is called from macvlan_change_sources() / macvlan_common_newlink(): This adds a reference to vlan to the port's vlan_source_hash using macvlan_source_entry. vlan is a pointer to the priv data of the link that is being created. When register_netdevice() fails, the error is returned from macvlan_newlink() to rtnl_newlink_create(): if (ops->newlink) err = ops->newlink(dev, ¶ms, extack); else err = register_netdevice(dev); if (err < 0) { free_netdev(dev); goto out; } and free_netdev() is called, causing a kvfree() on the struct net_device that is still referenced in the source entry attached to the lower device's macvlan port. Now all packets sent on the macvlan port with a matching source mac address will trigger a use-after-free in macvlan_forward_source(). </quote valis> With all that, my fix is to make sure we call macvlan_flush_sources() regardless of @create value whenever "goto destroy_macvlan_port;" path is taken. Many thanks to valis for following up on this issue.
05 / REFERENCES
Further evidence
- https://git.kernel.org/linus/f8db6475a83649689c087a8f52486fcc53e627e9
- https://git.kernel.org/stable/c/11ba9f0dc865136174cb98834280fb21bbc950c7
- https://git.kernel.org/stable/c/5dae6b36a7cb7a4fcf4121b95e9ca7f96f816c8a
- https://git.kernel.org/stable/c/986967a162142710076782d5b93daab93a892980
- https://git.kernel.org/stable/c/c43d0e787cbba569ec9d11579ed370b50fab6c9c
- https://git.kernel.org/stable/c/cdedcd5aa3f3cb8b7ae0f87ab3a936d0bd583d66
- https://git.kernel.org/stable/c/da5c6b8ae47e414be47e5e04def15b25d5c962dc
- https://git.kernel.org/stable/c/f8db6475a83649689c087a8f52486fcc53e627e9
- https://ubuntu.com/security/CVE-2026-23209
- https://ubuntu.com/security/notices/USN-8162-1
- https://ubuntu.com/security/notices/USN-8177-1
- https://ubuntu.com/security/notices/USN-8177-2
- https://ubuntu.com/security/notices/USN-8179-1
- https://ubuntu.com/security/notices/USN-8179-2
- https://ubuntu.com/security/notices/USN-8179-3
- https://ubuntu.com/security/notices/USN-8179-4
- https://ubuntu.com/security/notices/USN-8180-1
- https://ubuntu.com/security/notices/USN-8180-2
- https://ubuntu.com/security/notices/USN-8180-3
- https://ubuntu.com/security/notices/USN-8180-4
- https://ubuntu.com/security/notices/USN-8180-5
- https://ubuntu.com/security/notices/USN-8180-6
- https://ubuntu.com/security/notices/USN-8183-1
- https://ubuntu.com/security/notices/USN-8183-2
- https://ubuntu.com/security/notices/USN-8184-1
- https://ubuntu.com/security/notices/USN-8185-1
- https://ubuntu.com/security/notices/USN-8185-2
- https://ubuntu.com/security/notices/USN-8186-1
- https://ubuntu.com/security/notices/USN-8187-1
- https://ubuntu.com/security/notices/USN-8188-1
- https://ubuntu.com/security/notices/USN-8203-1
- https://ubuntu.com/security/notices/USN-8204-1
- https://ubuntu.com/security/notices/USN-8243-1
- https://ubuntu.com/security/notices/USN-8245-1
- https://ubuntu.com/security/notices/USN-8257-1
- https://ubuntu.com/security/notices/USN-8258-1
- https://ubuntu.com/security/notices/USN-8260-1
- https://ubuntu.com/security/notices/USN-8261-1
- https://ubuntu.com/security/notices/USN-8265-1
- https://ubuntu.com/security/notices/USN-8266-1
- https://ubuntu.com/security/notices/USN-8267-1
- https://ubuntu.com/security/notices/USN-8273-1
- https://ubuntu.com/security/notices/USN-8275-1
- https://ubuntu.com/security/notices/USN-8297-1
- https://ubuntu.com/security/notices/USN-8391-1
- https://ubuntu.com/security/notices/USN-8440-1
- https://www.cve.org/CVERecord?id=CVE-2026-23209