CVE-2026-89555

CVE-2026-89555

Critical · published September 12, 2026

CVSS v3.1
9.8
EPSS
1%
Percentile
52.4
In the wild
Unconfirmed
What it is

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

mpls: reload header after pskb_may_pull()

mpls_select_multipath() calls mpls_multipath_hash() to choose a nexthop

when an MPLS route has multiple nexthops. While walking the MPLS label

stack, the hash routine caches hdr for the current label. After finding

the bottom-of-stack label, it calls pskb_may_pull() before reading the

inner IP header.

If an skb is constructed with the inner IP header in nonlinear data and

insufficient tailroom in the linear head, pskb_may_pull() calls

pskb_expand_head() to replace the skb head and free the old one. This

leaves hdr pointing to freed memory. The IPv6 path can invalidate hdr

again when it performs a second pull for the larger header.

The issue was found through static analysis. A reproducer sending a legal

Geneve packet through a bareudp/MPLS multipath setup triggered the same

KASAN report in 2 of 2 unpatched runs:

BUG: KASAN: slab-use-after-free in mpls_select_multipath

Read of size 1 at addr ffff88800ecc6e20 by task ksoftirqd/1/23

Call Trace:

mpls_select_multipath

mpls_forward

__netif_receive_skb_list_core

netif_receive_skb_list_internal

napi_complete_done

gro_cell_poll

__napi_poll

net_rx_action

Freed by task 23:

kfree

pskb_expand_head

__pskb_pull_tail

mpls_select_multipath

Reload hdr from the current skb head after each successful pull before

deriving the inner IPv4 or IPv6 header pointer.

The record
Technical detail
CVSS v3.1
9.8 · CRITICAL
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00694 · 52.4th percentile
Published
2026-09-12T00:19Z
References (8)
EPSS history
Timeline
  • 13 SEP 03:23Z
    EPSS moved — → 0%
    epss
  • 11 SEP 19:44Z
    mpls: reload header after pskb_may_pull()
    cvelistv5