CVE-2026-46099: IPv6 Segment Routing & RPL Race Causes Kernel Use-After-Free

Linux kernel maintainers disclosed CVE-2026-46099 on May 27, 2026, describing an IPv6 lightweight-tunnel race in Segment Routing and RPL paths that can turn a no-reference destination cache entry into a use-after-free on real-time kernels. The bug is not the sort of branded, screenshot-friendly vulnerability that sends desktop users scrambling. It is narrower, stranger, and more revealing: a flaw at the seam where high-performance packet routing, per-CPU caching, and real-time preemption collide. For administrators running Linux routers, appliances, Kubernetes nodes, embedded gateways, or WSL-adjacent lab infrastructure, the lesson is familiar but uncomfortable: the kernel’s most specialized networking features can become security-relevant long before they become widely understood.

A Kernel Bug for the Infrastructure Crowd, Not the Patch-Tuesday Masses​

CVE-2026-46099 lives in the Linux IPv6 networking stack, specifically in the code handling seg6 and rpl lightweight tunnels. That already filters the audience. Segment Routing over IPv6 is used in service-provider, datacenter, and advanced routing designs; RPL is more common in low-power and lossy network environments, including IoT-style deployments. Neither is a typical consumer laptop feature.
But “niche” is not the same thing as “irrelevant.” Linux is the operating system under countless routers, firewalls, load balancers, network appliances, hypervisors, containers, and embedded systems. A bug that only matters under a particular combination of IPv6 routing features and kernel preemption behavior may still matter a great deal to the people whose systems match that combination.
The CVE record says the issue has been resolved in the Linux kernel, and the linked stable commits indicate that this is already in the patch pipeline rather than merely being a theoretical advisory. That distinction matters. In Linux kernel security, many CVEs are assigned after a fix exists, which means the operational question is not “is there a patch?” but “when does my distribution, appliance vendor, or custom kernel tree pick it up?”
The absence of an NVD score at publication time should not be mistaken for a low-risk rating. NVD had marked the record as awaiting enrichment, with no CVSS 4.0, 3.x, or 2.0 base score assigned. That leaves vulnerability scanners and patch dashboards in an awkward middle state: the identifier exists, the kernel fix exists, but the usual downstream metadata that drives prioritization may lag behind.

The Race Is Small, but the Failure Mode Is Not​

At the heart of CVE-2026-46099 is a lifetime-management mistake. The affected paths call ip6_route_input(), which can attach a NOREF destination object to a packet buffer. A NOREF destination is exactly what it sounds like: a route destination used without taking a normal reference count in that moment. That can be safe when the surrounding assumptions hold.
The problem comes later, when the same destination is passed into dst_cache_set_ip6(), which unconditionally tries to take a reference with dst_hold(). If another task has already released the underlying per-CPU route object, the code can end up taking a reference on an object that is already dead. In kernel terms, that is the road to a warning, memory corruption, or use-after-free behavior.
The race sequence in the advisory is unusually explicit. One thread of execution in ksoftirqd processes a packet through seg6_input_core() or rpl_input(). It misses the destination cache, performs an IPv6 route lookup, and receives a per-CPU route object with a reference count of one. The packet buffer is then pointed at that route as a NOREF destination.
Meanwhile, a higher-priority task on the same CPU can perform another IPv6 route lookup through a shared nexthop. If the route generation counter has changed, the cached per-CPU route can be recognized as stale, removed, and released. When the original ksoftirqd path resumes, it still sees the packet buffer pointing at the old destination and tries to cache it. The object has already been freed.
This is the kind of failure that makes kernel networking hard to reason about. No single line is obviously reckless in isolation. The bug emerges from a timing window between lookup, cache population, reference counting, per-CPU route storage, and a real-time scheduling model that changes who can interrupt whom.

PREEMPT_RT Turns a Corner Case Into a Security Boundary​

The advisory is careful about the conditions. The race requires ksoftirqd to be preemptible, which points directly at PREEMPT_RT kernels without the specific bottom-half locking behavior that would otherwise close the window. PREEMPT_RT is the real-time Linux work that makes more of the kernel preemptible so latency-sensitive workloads can meet tighter timing goals.
That is not an exotic academic configuration anymore. Real-time Linux has moved steadily from specialist industrial deployments into broader enterprise and edge computing conversations. Telecom systems, industrial controllers, audio systems, robotics, trading systems, and embedded appliances may all have reasons to care about bounded latency. The security trade-off is that preemption changes concurrency assumptions in code originally written around more rigid execution contexts.
CVE-2026-46099 is a clean example of that trade-off. The bug does not simply say, “IPv6 routing is broken.” It says that a particular IPv6 lightweight tunnel path made an assumption about a destination object’s lifetime that can fail when a softirq thread is preemptible and another task can invalidate a shared per-CPU route entry before the first path caches it.
That is why this CVE should not be read only as a networking advisory. It is also a warning about kernel configuration as part of the threat model. Two systems can run “Linux” and expose very different practical behavior depending on preemption model, networking features, route topology, and vendor backports.
For WindowsForum readers, that nuance matters because many Windows environments now contain Linux in less obvious places. Linux runs inside appliances that sit in front of Windows fleets, inside WSL development environments, inside CI systems, inside cloud images that host Windows-adjacent services, and inside network infrastructure that Active Directory, Entra-connected workloads, VPNs, and endpoint management depend on. A Linux kernel bug may not be a Windows desktop bug, but it can still be a Windows operations problem.

Shared Nexthops Are the Detail That Makes This More Than Theory​

The advisory calls out shared nexthop objects as a practical path for triggering the race. That is important because shared nexthops are not a laboratory fantasy. They are a normal routing optimization: multiple routes can point to the same nexthop identifier, sharing the same underlying forwarding object.
In the failing sequence, two routes pointing at the same nhid share the same fib6_nh and its per-CPU route cache entry. That sharing is what allows the second lookup to invalidate and release the object the first path still intends to cache. The bug is not merely “two things happen at once.” It is “two legitimate users of the same routing structure disagree about whether a cached destination remains alive.”
This is where infrastructure operators should pay attention. Routing designs that make heavy use of reusable nexthop objects, IPv6 lightweight tunnels, and real-time kernels are more likely to fit the shape of the issue than a stock desktop. The affected surface is bounded, but in the environments where it exists, it is tied to core packet handling.
There is no public indication from the supplied record that CVE-2026-46099 is being exploited in the wild. There is also no NVD severity score yet to tell scanners how loudly to complain. But the underlying class — use-after-free in kernel networking — is not something administrators should casually defer once their systems are known to match the affected conditions.
The more practical challenge is identification. Many organizations do not have a crisp inventory of which Linux systems use SRv6, RPL, PREEMPT_RT, or vendor kernels with real-time patches. The people who manage the appliance may not be the people who manage vulnerability scanning. The people who own the routing policy may not own the kernel update cadence. CVEs like this expose those seams.

The Fix Is Simple Because the Bug Was About an Assumption​

The kernel fix described in the CVE is straightforward: after ip6_route_input(), the affected paths now call skb_dst_force(). That forces the NOREF destination attached to the socket buffer into a properly refcounted destination before it is placed in the destination cache.
In plain English, the patch makes the code stop betting that the destination object will still be alive by the time it is cached. It takes the reference it needs before handing the object to machinery that assumes references are valid. That is the right shape of fix for a lifetime bug: do not merely narrow the timing window, remove the unsafe assumption.
The advisory also notes that the output path is not affected because ip6_route_output() already returns a refcounted destination. That split matters. It means this is not a blanket indictment of all seg6 and RPL lightweight tunnel routing; it is specifically about the input path using an object in a way that did not match later caching behavior.
This is also why backporting should be handled by kernel maintainers and distribution vendors, not by local patch improvisation unless an organization already maintains its own kernel tree. The fix touches subtle networking internals, and the surrounding code may differ between stable kernel branches. The linked stable commits suggest that the maintainers have already done the branch-specific work.
For administrators, the right mitigation path is boring by design: update to a vendor kernel that includes the fix, or obtain a vendor advisory for appliances and distributions that ship kernels with SRv6, RPL, or PREEMPT_RT support. If the relevant features are not needed, disabling unused IPv6 lightweight-tunnel capabilities can reduce exposure, but that is a configuration decision that must be weighed against the routing design.

NVD’s Blank Score Is Now Part of the Story​

The CVE record’s “awaiting enrichment” status is not just bureaucratic background noise. In 2026, vulnerability management teams increasingly depend on a chain of metadata that starts with CVE assignment and then flows through NVD enrichment, CVSS scoring, CPE matching, vendor advisories, SBOM tools, and scanner plugins. When the middle of that chain is empty, organizations are left to make decisions from raw advisory text.
CVE-2026-46099 is exactly the kind of record that suffers from that gap. It is technical, conditional, and likely to be misunderstood by generic scanners. Without a CVSS score, affected product mapping, or a clean vendor matrix, the burden shifts to administrators to answer questions that automated tooling usually pretends to answer for them.
Is the system running a kernel branch that contains the vulnerable code? Is PREEMPT_RT enabled? Are seg6 or RPL lightweight tunnels configured or available? Are shared nexthops used in a way that could exercise the race? Has the distribution backported the fix without changing the upstream version number? A scanner that merely says “CVE present” or “CVE absent” may be less useful than a careful configuration review.
This is not an argument against vulnerability databases. It is an argument against treating them as the whole truth. Kernel CVEs often require reading the commit message, understanding the subsystem, and checking the distribution’s backport policy. When NVD enrichment lags, that work becomes visible.
The irony is that the most mature teams are already equipped for this. They track upstream kernel stable releases, distribution security advisories, appliance firmware notes, and configuration drift. The teams most likely to be surprised are those that outsourced prioritization entirely to scanner severity numbers — precisely the numbers missing from this record at launch.

Windows Shops Should Care Because Linux Owns the Network Edge​

A Windows-focused administrator could reasonably ask why a Linux IPv6 tunnel bug belongs on their radar. The answer is that few Windows environments are Windows-only environments anymore. The identity plane may be Microsoft, the endpoints may be Windows 11, and the management stack may be Intune, but the network edge is often Linux.
VPN concentrators, SD-WAN appliances, container hosts, reverse proxies, firewalls, monitoring nodes, CI runners, and cloud routers all commonly depend on Linux kernels. Some are obvious Linux systems. Others are black-box appliances whose firmware release notes are the only visible hint. Still others are cloud images where the kernel update process is delegated to an image pipeline that no one has revisited in months.
IPv6 makes this even more complicated. Many organizations have partial IPv6 deployments: enabled in the kernel, used internally by containers, present in cloud networks, allowed on some interfaces, ignored in policy documents, and absent from mental models. Segment Routing and RPL are specialized, but IPv6 itself is no longer optional background noise.
The operational lesson is not to panic-patch every Linux machine because a new CVE exists. It is to stop assuming that a “Windows environment” ends at Windows Update. The systems that route, encapsulate, inspect, and deliver traffic to Windows workloads may have entirely separate patch chains.
For hybrid shops, CVE-2026-46099 is a useful inventory test. If you cannot quickly determine which Linux kernels in your estate run PREEMPT_RT, which appliances expose SRv6 or RPL functionality, and which vendors have shipped the relevant stable backports, then the immediate problem is not only this CVE. It is the visibility gap the CVE reveals.

The Real Risk Is a Crash, a Primitive, or a Warning That Nobody Sees​

The advisory describes a WARN and use-after-free condition. That phrasing is both specific and intentionally cautious. A kernel use-after-free can range from a warning and crash to a more useful exploitation primitive, depending on memory layout, attacker influence, kernel hardening, timing reliability, and whether the affected path can be triggered remotely or only through privileged routing configuration.
For this CVE, the conditions are restrictive enough that it should not be lumped in with easy remote compromise bugs. The attacker would need a way to exercise the affected seg6 or RPL input path and align the race with concurrent route activity on a system whose kernel preemption model permits the sequence. In many environments, that is a high bar.
But the bar is not the same everywhere. A router or appliance intentionally processing SRv6 traffic is different from a laptop with unused code compiled in. A real-time edge gateway with complex IPv6 routing is different from a default cloud VM. A multi-tenant environment where less-trusted actors can influence routes or packet flows is different from a sealed industrial network.
The safest wording is therefore also the least dramatic: this is a serious kernel correctness bug in a specialized path, with risk concentrated in systems that combine real-time preemption, IPv6 lightweight tunnels, and shared nexthop routing. It deserves patching where applicable, but it does not deserve the same treatment as a universally reachable unauthenticated remote-code-execution flaw.
That distinction matters because vulnerability fatigue is real. If every CVE becomes an emergency, none of them do. The job is to identify whether your systems match the vulnerable shape, then patch with urgency proportional to exposure.

Kernel Security Keeps Moving Toward Configuration-Specific Risk​

CVE-2026-46099 fits a broader pattern in Linux kernel security: the most interesting bugs increasingly depend on specific feature combinations. Namespaces, eBPF, io_uring, IPv6 extensions, hardware offloads, real-time preemption, filesystem features, and obscure protocol paths all change the practical attack surface.
That is uncomfortable for defenders because it undermines simple asset labels. “Linux 6.x” is not a risk category. “Linux 6.x with vendor backports, PREEMPT_RT, SRv6 enabled, shared nexthops configured, and exposed packet paths” is closer to a meaningful statement — but it is much harder to inventory.
The same problem shows up in Windows land, though in different clothing. A Windows Server with Hyper-V, SMB over QUIC, Credential Guard, WSL, and custom endpoint security drivers is not the same as a Windows desktop with none of those features enabled. Modern operating systems are platforms of conditional attack surfaces.
Kernel maintainers can fix individual bugs, but they cannot make every deployment easy to classify. That burden falls on operators. The more specialized the feature, the more important it becomes to know whether it is merely compiled, enabled, configured, reachable, or actually in production use.
CVE-2026-46099 is a reminder that “not widely used” is not a mitigation. Unused features should be disabled where practical, but used features must be patched and monitored. The middle ground — enabled, forgotten, and unowned — is where organizations tend to get surprised.

The Patch Queue Tells Admins More Than the CVSS Box​

The most actionable detail in this disclosure is not a severity score. It is the presence of stable kernel references. Those commits indicate that the issue has moved through the upstream fix process and into the branches that downstream distributions and vendors draw from.
That does not mean every affected system is already safe. Linux distribution kernels are not identical to upstream kernels, and enterprise vendors often backport fixes without changing the visible major kernel version. Appliance vendors may take longer still, especially where firmware validation cycles are involved. Real-time kernels can also have their own cadence.
Administrators should therefore avoid version-number absolutism. A system may report an older kernel version but include the fix as a backport. Another may report a newer custom kernel but lack the precise patch. The only reliable answer comes from the vendor’s changelog, package advisory, source package, or direct confirmation.
For self-built kernels, the path is clearer but more labor-intensive. Kernel maintainers need to identify the relevant stable branch, apply the branch-appropriate fix, rebuild, test routing behavior, and deploy in a maintenance window. Because this is networking code, regression testing should include the tunnel paths and route-cache behavior actually used in production, not just a successful boot.
Security teams should also resist the temptation to overfit on exploitability before patching. Race bugs in kernel networking can be deceptively hard to prove dangerous and deceptively dangerous once a skilled researcher finds a reliable trigger. If the system is in the affected class, the patch should be treated as a normal kernel security update, not as optional hygiene.

The CVE’s Narrowness Is Exactly Why It Matters​

There is a tendency to dismiss narrow kernel CVEs as background noise. That is understandable. The Linux kernel receives a steady stream of CVE assignments, many of which describe fixed bugs in subsystems most administrators never knowingly touch. But infrastructure security is built out of narrow cases.
A firewall is a narrow case. A container host with tuned networking is a narrow case. A telecom edge node is a narrow case. An IoT gateway using low-power routing protocols is a narrow case. The systems that differ most from generic desktops are often the systems that sit closest to traffic, identity, uptime, or physical processes.
CVE-2026-46099 does not need to affect everyone to be consequential. It needs only to affect the systems whose owners assumed that a low-level IPv6 route-cache race would be somebody else’s problem. That is how specialized vulnerabilities become operational incidents.
The right response is neither alarmism nor indifference. Treat the advisory as a prompt to map exposure, check vendor fixes, and tighten assumptions about IPv6 and real-time kernels. If the answer is “we do not use these features,” document how you know. If the answer is “we might,” the patch belongs higher in the queue.

The Practical Read for CVE-2026-46099 Is Hidden in the Conditions​

The useful takeaway from this disclosure is not that every Linux system is suddenly in danger. It is that kernel vulnerability response now depends on configuration literacy as much as package management. CVE-2026-46099 is a small, sharp example of a bug whose real severity lives in the deployment details.
  • Administrators should prioritize systems running real-time Linux kernels with IPv6 Segment Routing or RPL lightweight tunnels enabled or exposed.
  • Security teams should not wait for an NVD score before checking whether their vendors have shipped the stable kernel fix.
  • Appliance owners should review firmware advisories because many Linux-based network devices will not advertise their kernel exposure in ordinary asset inventories.
  • Teams using custom kernels should verify the exact upstream stable commit or backport rather than relying only on reported kernel version strings.
  • Organizations that do not need SRv6, RPL, or related IPv6 lightweight-tunnel features should consider disabling unused functionality as part of routine hardening.
The larger story is that CVE-2026-46099 turns a tiny reference-counting assumption into a useful operational test: do you know which Linux kernels actually carry your Windows-era infrastructure? As IPv6 routing grows more capable, real-time Linux becomes more mainstream, and vulnerability metadata arrives later than defenders would like, the winners will be the teams that can answer that question before the scanner does.

References​

  1. Primary source: NVD / Linux Kernel
    Published: 2026-05-28T01:10:13-07:00
  2. Security advisory: MSRC
    Published: 2026-05-28T01:10:13-07:00
    Original feed URL
  3. Official source: nist.gov
  4. Related coverage: cvefeed.io
  5. Related coverage: radar.offseq.com
  6. Related coverage: git.zx2c4.com
  1. Related coverage: mail-archive.com
  2. Related coverage: labs.cloudsecurityalliance.org
 

Back
Top