CVE-2026-72493 PUBLISHED

net: serialize netif_running() check in enqueue_to_backlog()

Assigner: Linux
Reserved: 09.08.2026 Published: 15.08.2026 Updated: 17.08.2026

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

net: serialize netif_running() check in enqueue_to_backlog()

Syzbot reported a KASAN slab-use-after-free in fib_rules_lookup().

The root cause is a race condition where packets can escape the backlog flushing during device unregistration (e.g., during netns exit).

Commit e9e4dd3267d0 ("net: do not process device backlog during unregistration") introduced a lockless netif_running() check in enqueue_to_backlog() to prevent queuing packets to an unregistering device.

However, this creates a TOCTOU race window.

A lockless transmitter (like veth_xmit) can pass the check before dev_close() clears IFF_UP. If the transmitter is then delayed, flush_all_backlogs() can run and finish before the transmitter grabs the backlog lock and queues the packet. The packet then escapes the flush and triggers UAF later when processed.

Fix this by moving the netif_running() check inside the backlog lock. This serializes the check with the flush work (which also grabs the lock). We then either queue the packet before the flush runs (so it gets flushed), or check netif_running() after the flush/close completes (so it gets dropped).

Metrics

CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
CVSS Score: 9.9

AV:N - The bug is in the generic per-CPU backlog receive path (netif_rx/netif_receive_skb -> enqueue_to_backlog); packets can originate from remote peers reaching veth/bridge/NIC interfaces, and syzbot reproduced it via network transmit/receive activity during device unregistration. AC:L - The attacker controls both racing sides by concurrently flooding packets through a lockless transmitter (e.g. veth) while unregistering the device/netns (e.g. ip link del or netns exit); no victim-specific timing or memory layout is required beyond repeatable parallel traffic and teardown. PR:L - Triggering veth creation, traffic injection, and netdev/netns teardown requires only CAP_NET_ADMIN inside a network namespace, obtainable by an unprivileged local user via user namespaces (unshare -Urn); init-namespace root is not required. UI:N - Exploitation needs only the attacker's own concurrent packet transmission and interface/netns teardown; no independent action by another user or administrator is required at trigger time. S:C - The use-after-free is triggered from within an isolated network namespace yet corrupts host-global kernel routing state (fib_rules_lookup on freed namespace/rule data), crossing the container/netns security boundary into the host kernel's integrity and availability. C:H - KASAN reported slab-use-after-free in fib_rules_lookup() walking net->rules_ops; freed namespace/device-associated structures can be reallocated and read through stale pointers, yielding an attacker-influenceable kernel memory read/disclosure primitive. I:H - Processing the escaped backlog skb invokes routing through freed fib_rules_ops and indirect function pointers (ops->match/ops->action); UAF on these heap objects enables heap grooming, control-flow hijack, and arbitrary kernel write leading to privilege escalation. A:H - Confirmed slab-use-after-free in core packet processing during device unregistration reliably causes kernel oops/panic (syzbot KASAN splat in fib_rules_lookup()), and repeated triggering can deny service to the entire host.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from e9e4dd3267d0c5234c5c0f47440456b10875dec9 to 2fface6e0bbd6314d1d9d071abf2c4d67548511c (excl.)
  • affected from e9e4dd3267d0c5234c5c0f47440456b10875dec9 to 46762cefe7f4e5bffc1eb467810a7bbb02e461d7 (excl.)
  • Version 78b6803a1961369d0b8350ff1f99b7375bbd7a8f is affected
  • Version b5d73d9cdd6be22795499890ea928a6f57ef829c is affected
  • Version f6533fed1bfa842e391ee50f9a9c5e963c71e579 is affected
  • Version 2095ab2456da766174cda8bc105d7a7b1bc70e16 is affected
  • Version f1fdb184aefa8447560e3ea0e605171592ffee41 is affected
  • Version f75c8a3015422128ca150e81c730bc2a471b5f4a is affected
  • affected from 3.2.71 to 3.3 (excl.)
  • affected from 3.4.111 to 3.5 (excl.)
  • affected from 3.12.48 to 3.13 (excl.)
  • affected from 3.14.54 to 3.15 (excl.)
  • affected from 3.18.22 to 3.19 (excl.)
  • affected from 4.1.9 to 4.2 (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 4.2 is affected
  • unaffected from 0 to 4.2 (excl.)
  • unaffected from 7.1.5 to 7.1.* (incl.)
  • unaffected from 7.2 to * (incl.)

References