CVE-2026-23209: macvlan: fix error recovery in macvlan_common_newlink()

Published Feb 14, 2026
·
Updated

In the Linux kernel, the following vulnerability has been resolved:

macvlan: fix error recovery in macvlancommonnewlink()

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 MACVLANMODESOURCE mode and MACVLANMACADDRADD (or MACVLANMACADDRSET) parameter, lower device already has a macvlan port and registernetdevice() called from macvlancommonnewlink() fails (e.g. because of the invalid link name).

In this case macvlanhashaddsource is called from macvlanchangesources() / macvlancommonnewlink():

This adds a reference to vlan to the port's vlansourcehash using macvlansourceentry.

vlan is a pointer to the priv data of the link that is being created.

When registernetdevice() fails, the error is returned from macvlannewlink() to rtnlnewlinkcreate():

if (ops->newlink) err = ops->newlink(dev, &params, extack); else err = registernetdevice(dev); if (err < 0) { freenetdev(dev); goto out; }

and freenetdev() is called, causing a kvfree() on the struct netdevice 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 macvlanforwardsource().

</quote valis>

With all that, my fix is to make sure we call macvlanflushsources() regardless of @create value whenever "goto destroymacvlanport;" path is taken.

Many thanks to valis for following up on this issue.

Other sources

In the Linux kernel, the following vulnerability has been resolved:

macvlan: fix error recovery in macvlancommonnewlink()

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 MACVLANMODESOURCE mode and MACVLANMACADDRADD (or MACVLANMACADDRSET) parameter, lower device already has a macvlan port and registernetdevice() called from macvlancommonnewlink() fails (e.g. because of the invalid link name).

In this case macvlanhashaddsource is called from macvlanchangesources() / macvlancommonnewlink():

This adds a reference to vlan to the port's vlansourcehash using macvlansourceentry.

vlan is a pointer to the priv data of the link that is being created.

When registernetdevice() fails, the error is returned from macvlannewlink() to rtnlnewlinkcreate():

if (ops-newlink) err = ops-newlink(dev, ¶ms, extack); else err = registernetdevice(dev); if (err 0) { freenetdev(dev); goto out; }

and freenetdev() is called, causing a kvfree() on the struct netdevice 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 macvlanforwardsource().

/quote valis

With all that, my fix is to make sure we call macvlanflushsources() regardless of @create value whenever "goto destroymacvlanport;" path is taken.

Many thanks to valis for following up on this issue.

IBM

Affected Software

25 affected componentsFixes available
Linux Linux kernel
Linux Linux kernel>=4.9.1<5.10.250
Linux Linux kernel>=5.11<5.15.200
Linux Linux kernel>=5.16<6.1.163
Linux Linux kernel>=6.2<6.6.124
Linux Linux kernel>=6.7<6.12.70
Linux Linux kernel>=6.13<6.18.10
Linux Linux kernel=4.9
Linux Linux kernel=4.9-rc6
Linux Linux kernel=4.9-rc7
Linux Linux kernel=4.9-rc8
Linux Linux kernel=6.19-rc1
Linux Linux kernel=6.19-rc2
Linux Linux kernel=6.19-rc3
Linux Linux kernel=6.19-rc4
Linux Linux kernel=6.19-rc5
Linux Linux kernel=6.19-rc6
Linux Linux kernel=6.19-rc7
Linux Linux kernel=6.19-rc8
debian/linux<=5.10.223-1
5.10.251-56.1.170-36.1.172-16.12.86-16.12.88-17.0.7-1
debian/linux-6.1
6.1.172-1~deb11u1
IBM Verify Identity Access<=11.0 - 11.0.2
IBM Security Verify Access<=10.0 - 10.0.9.1
IBM Verify Identity Access Container<=11.0 - 11.0.2
IBM Security Verify Access Container<=10.0 - 10.0.9.1

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade debian/linux to a version that resolves this vulnerability.

    Fixed in 5.10.251-5Fixed in 6.1.170-3Fixed in 6.1.172-1Fixed in 6.12.86-1Fixed in 6.12.88-1Fixed in 7.0.7-1
  2. Upgrade

    Upgrade debian/linux-6.1 to a version that resolves this vulnerability.

    Fixed in 6.1.172-1~deb11u1
  3. Configuration

    Apply the macvlan error-recovery fix so that macvlan_flush_sources() is invoked regardless of @create whenever execution takes the 'goto destroy_macvlan_port;' path in macvlan_common_newlink(), preventing a use-after-free in macvlan_forward_source() when register_netdevice() fails.

    Linux kernel macvlan macvlan_flush_sources() call during error recovery = call macvlan_flush_sources() regardless of @create when taking path 'goto destroy_macvlan_port;'

Event History

Feb 14, 2026
CVE Published
via MITRE·04:27 PM
Data Sourced
via MITRE·04:27 PM
DescriptionSeverity
Data Sourced
via Red Hat·05:02 PM
DescriptionSeverityAffected Software
Data Sourced
via NVD·05:15 PM
RemedyDescriptionSeverityWeaknessAffected Software
May 18, 2026
Data Sourced
via Debian·04:11 AM
DescriptionAffected Software
May 20, 2026
Data Sourced
via Ubuntu·04:11 AM
RemedyDescriptionSeverityAffected Software
Jul 8, 2026
Data Sourced
via IBM·12:00 AM
DescriptionAffected Software

Parent advisories

This vulnerability appears in the following advisories.

Free Weekly Intel

Don't miss critical vulnerabilities

Join thousands of security professionals who receive our weekly digest of trending CVEs, zero-days, and exploited vulnerabilities.

No spam. Unsubscribe anytime.

Frequently Asked Questions

1

What is the severity of CVE-2026-23209?

CVE-2026-23209 has a high severity due to its potential to crash the kernel during error recovery processes.

2

How do I fix CVE-2026-23209?

Fixing CVE-2026-23209 involves updating to the latest version of the Linux kernel where the vulnerability has been addressed.

3

What are the consequences of CVE-2026-23209?

The consequences of CVE-2026-23209 include system crashes and possible denial of service due to improper error handling in macvlan.

4

Which software is affected by CVE-2026-23209?

CVE-2026-23209 affects various versions of the Linux Kernel, particularly those utilizing macvlan functionalities.

5

Is there a workaround for CVE-2026-23209?

Currently, there is no established workaround for CVE-2026-23209, so updating the kernel is the recommended approach.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203