CVE-2026-98104
Received Received - Intake

Integer Overflow in Linux Kernel cls_u32 Classifier

Vulnerability report for CVE-2026-98104, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-09-25

Last updated on: 2026-09-25

Assigner: kernel.org

Description

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.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-09-25
Last Modified
2026-09-25
Generated
2026-09-25
AI Q&A
2026-09-25
EPSS Evaluated
N/A
NVD
EUVD

Affected Vendors & Products

Showing 1 associated CPE
Vendor Product Version / Range
linux linux_kernel *

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-UNKNOWN

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability in the Linux kernel involves a flaw in the cls_u32 traffic control classifier. When the node ID pool for handles is exhausted, the system incorrectly reuses existing handles instead of reporting an error. This breaks handle uniqueness in the hash table, leading to potential conflicts where multiple filters share the same handle.

Detection Guidance

This vulnerability requires specific kernel configurations and conditions to be present. Check if CONFIG_NET_SCHED=y and CONFIG_CLS_U32=y are enabled in your kernel. Use commands like 'grep CONFIG_NET_SCHED /boot/config-$(uname -r)' and 'grep CONFIG_CLS_U32 /boot/config-$(uname -r)' to verify. If these are enabled, attempt to reproduce the conditions by creating a clsact qdisc and adding 4095 u32 filters to trigger the duplicate handle issue.

Impact Analysis

An attacker with CAP_NET_ADMIN privileges could exploit this to cause denial-of-service by corrupting the classifier's hash table. This might lead to traffic misclassification, crashes, or unauthorized access to network resources. Systems using cls_u32 filters are at risk if the node ID space is exhausted.

Mitigation Strategies

Apply the latest kernel patches that resolve this issue. If patches are unavailable, disable the vulnerable module by setting CONFIG_CLS_U32 to 'n' in your kernel configuration and recompiling. Alternatively, avoid creating clsact qdiscs or u32 filters in environments where CONFIG_NET_SCHED and CONFIG_CLS_U32 are enabled until patched.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-98104. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart