CVE-2026-98104

EUVD-2026-86935
In the Linux kernel, the following vulnerability has been resolved:

net/sched: cls_u32: fix duplicate handle when node ID pool is exhausted

gen_new_kid() falls back to returning max (htid | 0xFFF) when both
idr_alloc_u32() ranges are full, instead of reporting an error.
u32_change() trusts that value and inserts a new knode with a handle
that is already live in the hash table, breaking handle uniqueness
within the table's node ID space.

The handle was never reserved in ht->handle_idr, so every later error
path that does idr_remove(&ht->handle_idr, handle) removes the
reservation of a different, live knode, which is then reused — one
failed add compounds into further duplicates.

The 4095 limit is per (table, bucket) — ht->handle_idr is per hash
table and the range is derived from htid (bucketid), so a table with
divisor 256 can legitimately hold 256*4095 knodes.

The sibling helper gen_new_htid() has the same silent in-band failure:
it returns 0 when the tp_c handle pool (1..0x7FF) is full, and
u32_init() publishes the root hash table with handle 0 without
checking.  Two root tables with handle 0 alias in u32_lookup_ht(),
allowing cross-tcf_proto knode add/lookup/delete.  Add the same
exhaustion check that the divisor path already has.

Return an error so u32_change() fails with ENOSPC/ENOMEM when the
node ID space is exhausted, and so u32_init() fails with -ENOMEM
when the hash table ID space is exhausted.  The extack message
distinguishes pool exhaustion (-ENOSPC) from a transient allocation
failure (-ENOMEM).

Conditions to recreate the bug:
- CONFIG_NET_SCHED=y, CONFIG_CLS_U32=y (or =m with module loaded)
- Create a clsact qdisc on a device, then add 4095 u32 filters with
  auto-generated handles to fill the node ID space for the root hash
  table (single bucket). The 4096th auto-handle filter add triggers
  the duplicate handle (fh 800::fff reused). Reachable at Level 2
  (unshare -Urn, namespace-local CAP_NET_ADMIN).
- For gen_new_htid: create 2047 u32 proto entries on the same block
  to fill the tp_c handle pool, then create one more. The root table
  gets handle 0 and aliases with other handle-0 root tables.
ProviderTypeBase ScoreAtk. VectorAtk. ComplexityPriv. RequiredVector
NISTPrimary
UNKNOWN
---
Awaiting analysis
This vulnerability is currently awaiting analysis.
Base Score
CVSS 3.x
EPSS Score
Percentile: Unknown
Debian logo
Debian Releases
Debian Product
Codename
linux
bookworm
vulnerable
bookworm (security)
vulnerable
forky
vulnerable
sid
7.2.7-1
fixed
trixie
vulnerable
trixie (security)
vulnerable
Ubuntu logo
Ubuntu Releases
Ubuntu Product
Codename
linux
bionic
needs-triage
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
trusty
needs-triage
xenial
needs-triage
linux-hwe
bionic
ignored
jammy
dne
noble
dne
resolute
dne
xenial
needs-triage
linux-hwe-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-hwe-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-hwe-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-hwe-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-hwe-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-hwe-5.19
jammy
ignored
noble
dne
resolute
dne
linux-hwe-6.2
jammy
ignored
noble
dne
resolute
dne
linux-hwe-6.5
jammy
ignored
noble
dne
resolute
dne
linux-hwe-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-hwe-6.11
jammy
dne
noble
ignored
resolute
dne
linux-hwe-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-hwe-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-hwe-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-hwe-edge
bionic
ignored
jammy
dne
noble
dne
resolute
dne
xenial
ignored
linux-lts-xenial
jammy
dne
noble
dne
resolute
dne
trusty
needs-triage
linux-kvm
bionic
needs-triage
focal
needs-triage
jammy
needs-triage
noble
dne
resolute
dne
xenial
needs-triage
linux-allwinner-5.19
jammy
ignored
noble
dne
resolute
dne
linux-aws
bionic
needs-triage
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
trusty
needs-triage
xenial
needs-triage
linux-aws-5.0
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-aws-5.3
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-aws-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-aws-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-aws-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-aws-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-aws-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-aws-5.19
jammy
ignored
noble
dne
resolute
dne
linux-aws-6.2
jammy
ignored
noble
dne
resolute
dne
linux-aws-6.5
jammy
ignored
noble
dne
resolute
dne
linux-aws-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-aws-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-aws-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-aws-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-aws-hwe
jammy
dne
noble
dne
resolute
dne
xenial
needs-triage
linux-azure
bionic
ignored
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
trusty
needs-triage
xenial
needs-triage
linux-azure-4.15
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-azure-5.3
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-azure-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-azure-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-azure-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-azure-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-azure-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-azure-5.19
jammy
ignored
noble
dne
resolute
dne
linux-azure-6.2
jammy
ignored
noble
dne
resolute
dne
linux-azure-6.5
jammy
ignored
noble
dne
resolute
dne
linux-azure-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-azure-6.11
jammy
dne
noble
ignored
resolute
dne
linux-azure-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-azure-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-azure-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-azure-fde
focal
ignored
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
linux-azure-fde-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-azure-fde-5.19
jammy
ignored
noble
dne
resolute
dne
linux-azure-fde-6.2
jammy
ignored
noble
dne
resolute
dne
linux-azure-fde-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-azure-fde-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-azure-fde-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-azure-fde-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-azure-nvidia
jammy
dne
noble
needs-triage
resolute
dne
linux-azure-nvidia-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-bluefield
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-azure-edge
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-fips
bionic
needs-triage
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
xenial
needs-triage
linux-aws-fips
bionic
needs-triage
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-azure-fips
bionic
needs-triage
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-gcp-fips
bionic
needs-triage
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-gcp
bionic
ignored
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
xenial
needs-triage
linux-gcp-4.15
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-gcp-5.3
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-gcp-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-gcp-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-gcp-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-gcp-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-gcp-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-gcp-5.19
jammy
ignored
noble
dne
resolute
dne
linux-gcp-6.2
jammy
ignored
noble
dne
resolute
dne
linux-gcp-6.5
jammy
ignored
noble
dne
resolute
dne
linux-gcp-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-gcp-6.11
jammy
dne
noble
ignored
resolute
dne
linux-gcp-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-gcp-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-gcp-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-gke
focal
ignored
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
linux-gke-4.15
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-gke-5.4
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-gke-5.15
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-gkeop
focal
ignored
jammy
needs-triage
noble
needs-triage
resolute
dne
linux-gkeop-5.4
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-gkeop-5.15
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-ibm
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
linux-ibm-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-ibm-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-ibm-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-intel-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-intel-iotg
jammy
needs-triage
noble
dne
resolute
dne
linux-intel-iotg-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-iot
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-intel-iot-realtime
jammy
needs-triage
noble
dne
resolute
dne
linux-lowlatency
jammy
needs-triage
noble
needs-triage
resolute
dne
linux-lowlatency-hwe-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-lowlatency-hwe-5.19
jammy
ignored
noble
dne
resolute
dne
linux-lowlatency-hwe-6.2
jammy
ignored
noble
dne
resolute
dne
linux-lowlatency-hwe-6.5
jammy
ignored
noble
dne
resolute
dne
linux-lowlatency-hwe-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-lowlatency-hwe-6.11
jammy
dne
noble
ignored
resolute
dne
linux-nvidia
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
linux-nvidia-6.2
jammy
ignored
noble
dne
resolute
dne
linux-nvidia-6.5
jammy
ignored
noble
dne
resolute
dne
linux-nvidia-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-nvidia-6.11
jammy
dne
noble
ignored
resolute
dne
linux-nvidia-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-nvidia-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-nvidia-bos
jammy
dne
noble
dne
resolute
needs-triage
linux-nvidia-lowlatency
jammy
dne
noble
needs-triage
resolute
dne
linux-nvidia-tegra
jammy
needs-triage
noble
needs-triage
resolute
dne
linux-nvidia-tegra-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-nvidia-tegra-igx
jammy
needs-triage
noble
dne
resolute
dne
linux-oracle
bionic
needs-triage
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
xenial
needs-triage
linux-oracle-5.0
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-oracle-5.3
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-oracle-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-oracle-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-oracle-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-oracle-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-oracle-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-oracle-6.5
jammy
ignored
noble
dne
resolute
dne
linux-oracle-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-oracle-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-oracle-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-oracle-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-oem
bionic
ignored
jammy
dne
noble
dne
resolute
dne
linux-oem-5.6
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-oem-5.10
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-oem-5.13
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-oem-5.14
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-oem-5.17
jammy
ignored
noble
dne
resolute
dne
linux-oem-6.0
jammy
ignored
noble
dne
resolute
dne
linux-oem-6.1
jammy
ignored
noble
dne
resolute
dne
linux-oem-6.5
jammy
ignored
noble
dne
resolute
dne
linux-oem-6.8
jammy
dne
noble
ignored
resolute
dne
linux-oem-6.11
jammy
dne
noble
ignored
resolute
dne
linux-oem-6.14
jammy
dne
noble
needs-triage
resolute
dne
linux-oem-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-oem-7.0
jammy
dne
noble
dne
resolute
needs-triage
linux-raspi
focal
needs-triage
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
linux-raspi2
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-raspi-5.4
bionic
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-raspi-realtime
jammy
dne
noble
needs-triage
resolute
dne
linux-realtime
jammy
needs-triage
noble
needs-triage
resolute
needs-triage
linux-realtime-6.8
jammy
dne
noble
dne
resolute
dne
linux-realtime-6.14
jammy
dne
noble
dne
resolute
dne
linux-riscv
focal
ignored
jammy
ignored
noble
ignored
resolute
needs-triage
linux-riscv-5.8
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-riscv-5.11
focal
ignored
jammy
dne
noble
dne
resolute
dne
linux-riscv-5.15
focal
needs-triage
jammy
dne
noble
dne
resolute
dne
linux-riscv-5.19
jammy
ignored
noble
dne
resolute
dne
linux-riscv-6.5
jammy
ignored
noble
dne
resolute
dne
linux-riscv-6.8
jammy
needs-triage
noble
dne
resolute
dne
linux-riscv-6.14
jammy
dne
noble
ignored
resolute
dne
linux-riscv-6.17
jammy
dne
noble
needs-triage
resolute
dne
linux-riscv-7.0
jammy
dne
noble
needs-triage
resolute
dne
linux-starfive-5.19
jammy
ignored
noble
dne
resolute
dne
linux-starfive-6.2
jammy
ignored
noble
dne
resolute
dne
linux-starfive-6.5
jammy
ignored
noble
dne
resolute
dne
linux-xilinx
jammy
dne
noble
needs-triage
resolute
dne
linux-xilinx-zynqmp
focal
needs-triage
jammy
needs-triage
noble
dne
resolute
dne
linux-realtime-6.17
jammy
dne
noble
dne
resolute
dne