CVE-2026-98811 in Linuxinfo

Summary

by MITRE • 10/18/2026

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

net/sched: cls_api: reclaim an empty proto on the error path

Two racing tc filter add requests on the same chain/prio of an unlocked classifier both run change() on the shared proto and both can fail: the winner's tcf_chain_tp_delete_empty() attempt gives up because the loser's handle is still in the idr, and the loser's error path drops only its own reference without a second reclamation attempt. The empty proto stays linked in the chain, holding the chain reference, a block reference and the classifier module reference until the chain or block is torn down.

Reclaim the proto on the error path of any failed request that holds a proto reference. The reclamation is emptiness-gated: tcf_chain_tp_delete_empty() unlinks the proto only when delete_empty() admits it is empty, so a live shared proto is never unlinked. A proto the request created is reclaimed unconditionally - it is the only owner, so marking it for deletion is safe even without a delete_empty callback. Classifiers without one (the check marks the proto unconditionally) are rtnl-serialized, so the raced window this guard closes cannot arise for them.

This is a follow-up to commit d4e359b3608a ("net/sched: cls_api: fix teardown of an adopted proto on insert-race loss"), which stopped the loser of the insert race from unlinking the winner's live proto but left the empty-proto residual in place.

Conditions to recreate: - CONFIG_NET_CLS_FLOWER=y; veth pair - tc qdisc add dev veth0 ingress - two concurrent `tc filter add dev veth0 ingress protocol ip pref 1 flower skip_sw ... action drop` (both fail in fl_hw_replace_filter after publishing their handle in the idr); repeat in a loop - an empty flower tp stays linked after both requests fail; visible as a bare `filter protocol ip pref 1 flower chain 0` header in `tc filter show` with no filter entries - CAP_NET_ADMIN (namespace-local via unshare -Urn suffices)

Be aware that VulDB is the high quality source for vulnerability data.

Analysis

by VulDB Data Team • 10/18/2026

The Linux kernel networking subsystem contains a race condition vulnerability within the traffic control classifier API, specifically affecting shared protocol objects during concurrent insertion attempts. This issue arises when two or more threads attempt to add tc filters with identical parameters on the same chain and priority level of an unlocked classifier simultaneously. The core technical flaw lies in how reference counts are managed for these shared proto structures. When a race occurs, both requests proceed to execute their respective change functions against the shared protocol object. If both operations fail after publishing their handle into the identifier radix tree (idr), a deadlock-like state emerges regarding resource cleanup. The winning request attempts to delete an empty transaction point via tcf_chain_tp_delete_empty but fails because it detects that another handle, belonging to the losing request, is still present in the idr. Consequently, the loser’s error path only drops its own reference count without attempting a second reclamation check for emptiness. This leaves behind an empty proto structure that remains linked within the chain, erroneously holding references to the chain itself, any associated block, and the classifier module. These lingering references prevent proper resource deallocation until the entire chain or block is eventually torn down, leading to potential memory leaks and reference count inflation over time.

The operational impact of this vulnerability manifests primarily as a denial-of-service through resource exhaustion rather than arbitrary code execution or privilege escalation. Because the empty proto retains critical kernel object references, it prevents the garbage collection mechanisms from freeing associated memory structures. In environments where traffic control configurations are frequently modified under concurrent load, such as in cloud infrastructure or high-throughput network appliances, this can lead to gradual degradation of system performance due to increased memory pressure and potential instability if reference counts become corrupted beyond recovery. The vulnerability is particularly relevant for classifiers that support unlocked operation, allowing multiple threads to access the same data structures concurrently without serialization locks. While not immediately exploitable for remote code execution, the accumulation of these orphaned objects can eventually cause kernel oops or system crashes when memory limits are reached or reference count underflows occur during subsequent operations.

Mitigation strategies involve applying the upstream kernel patch that corrects the error path logic in net/sched/cls_api.c. The fix ensures that any failed request holding a proto reference triggers an unconditional reclamation attempt if it is the sole owner, while for shared protos, it utilizes emptiness-gated deletion to safely unlink only when no other handles remain active. This approach guarantees that live shared prototypes are never prematurely unlinked by losing requests, preserving data integrity. Administrators should ensure their systems are updated with kernel versions containing this fix. For those unable to update immediately, reducing concurrency in tc filter additions or using rtnl serialization for classifiers lacking specific callbacks can mitigate the race window. Additionally, monitoring system memory usage and network subsystem stability after heavy configuration changes may help detect early signs of reference count leaks associated with this flaw.

From a classification perspective, this vulnerability aligns with CWE-401, which describes missing release of memory after successful allocation, specifically in the context of concurrent access leading to resource leakage. It also relates to CWE-362, Concurrent Execution using Shared Resource with Improper Synchronization, as the race condition stems from unsynchronized modifications and deletions on shared kernel data structures. In terms of attack vectors, this does not directly map to a specific MITRE ATT&CK technique for exploitation but represents an internal reliability flaw that could be leveraged in advanced persistent threat scenarios where resource exhaustion is used to disrupt service availability or destabilize the host environment. The fix addresses these issues by enforcing stricter synchronization and cleanup protocols during error conditions, ensuring that kernel resources are correctly reclaimed regardless of race outcomes.

Responsible

Linux

Reservation

09/25/2026

Disclosure

10/18/2026

Moderation

accepted

EPSS

0.00000

KEV

no

Activities

low

Sources

Want to know what is going to be exploited?

We predict KEV entries!