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

net/sched: cls_route: free emptied bucket on filter move

route4_change can move an existing filter to a different top-level
bucket: route4_set_parms recomputes the handle from TCA_ROUTE4_TO/
FROM/IIF, and the handle-mismatch check is gated on the 'new' flag, so
for an existing filter the new handle may differ from the old one and
land in a different bucket. When this happens, the filter is unlinked
from the old bucket, but the bucket itself is never freed once it goes
empty. The stale empty bucket remains in head->table[], causing
route4_delete to report *last=false even after the last live filter is
gone. That pins the empty tcf_proto and causes a leak.

Fix this by refcounting the filters linked to a bucket and freeing the
bucket when the count drops to zero. The existing scan in route4_delete
goes away with it.

The count is updated at all sites that link or unlink a filter during add,
change and delete, and the bucket is dropped from head->table[] as soon as
it reaches zero.

Conditions to recreate the bug:
CONFIG_NET_CLS_ROUTE4=y, CONFIG_NET_SCH_INGRESS=y, CONFIG_NET_CLS_ACT=y.

tc qdisc replace dev lo clsact
tc filter add dev lo ingress protocol ip pref 100 route from 1 to 1
tc filter change dev lo ingress protocol ip pref 100 handle 0x10001 \
route from 1 to 2
tc filter del dev lo ingress protocol ip pref 100 handle 0x10002 \
route from 1 to 2
tc filter show dev lo ingress | grep -c 'pref 100 route chain 0 '
Published: 2026-09-25
Score: 5.5 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Memory Leak
Action: Patch
AI Analysis

Impact

The vulnerability arises when a traffic classification filter is moved to a different bucket. The route4_set_parms logic recomputes a handle that may differ, unlinking the filter from its original bucket but never freeing the now-empty bucket. This stale bucket remains in the head->table[] array, causing route4_delete to misreport a live filter and leave an empty tcf_proto object in memory. The unreferenced bucket creates a memory leak that can grow over time and lead to resource exhaustion.

Affected Systems

Affected systems include any Linux kernel built with the networking classifier route4 configuration: CONFIG_NET_CLS_ROUTE4=y, CONFIG_NET_SCH_INGRESS=y, CONFIG_NET_CLS_ACT=y. The issue manifests when administrative users use the 'tc' utility to add, change, or delete ingress filters on devices such as lo. Thus, all Linux environments that enable these networking features and allow privileged filter modifications are vulnerable.

Risk and Exploitability

Because the bug is triggered by 'tc' commands that require root privileges, the attack vector is local privilege escalation or for users already with kernel modification rights. EPSS is < 1% and the vulnerability is not in the CISA KEV list, indicating limited public exploitation. However, an unpatched kernel may acculuctions of significant memory usage over time, ultimately impacting system availability. The CVSS score is 5.5, indicating moderate severity, but the potential for denial of service warrants prompt action.

Generated by OpenCVE AI on October 1, 2026 at 06:36 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade the Linux kernel to a version that includes the fix for CVE-2026-97959.
  • If an immediate kernel upgrade is not possible, disable CONFIG_NET_CLS_ROUTE4, or omit the clsact qdisc to prevent filter manipulation.
  • Restrict the use of the 'tc' command to trusted administrators and consider applying Linux capabilities or SELinux policies to limit filter configuration changes.

Generated by OpenCVE AI on October 1, 2026 at 06:36 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Debian DLA Debian DLA DLA-4817-1 linux-6.12 security update
Debian DLA Debian DLA DLA-4841-1 linux security update
Debian DSA Debian DSA DSA-6528-1 linux security update
Ubuntu USN Ubuntu USN USN-8961-1 Linux kernel vulnerabilities
History

Sat, 03 Oct 2026 11:15:00 +0000


Thu, 01 Oct 2026 05:45:00 +0000

Type Values Removed Values Added
Weaknesses CWE-401

Thu, 01 Oct 2026 00:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-772
References
Metrics threat_severity

None

cvssV3_1

{'score': 5.5, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H'}

threat_severity

Low


Fri, 25 Sep 2026 15:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-401

Fri, 25 Sep 2026 10:30:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: net/sched: cls_route: free emptied bucket on filter move route4_change can move an existing filter to a different top-level bucket: route4_set_parms recomputes the handle from TCA_ROUTE4_TO/ FROM/IIF, and the handle-mismatch check is gated on the 'new' flag, so for an existing filter the new handle may differ from the old one and land in a different bucket. When this happens, the filter is unlinked from the old bucket, but the bucket itself is never freed once it goes empty. The stale empty bucket remains in head->table[], causing route4_delete to report *last=false even after the last live filter is gone. That pins the empty tcf_proto and causes a leak. Fix this by refcounting the filters linked to a bucket and freeing the bucket when the count drops to zero. The existing scan in route4_delete goes away with it. The count is updated at all sites that link or unlink a filter during add, change and delete, and the bucket is dropped from head->table[] as soon as it reaches zero. Conditions to recreate the bug: CONFIG_NET_CLS_ROUTE4=y, CONFIG_NET_SCH_INGRESS=y, CONFIG_NET_CLS_ACT=y. tc qdisc replace dev lo clsact tc filter add dev lo ingress protocol ip pref 100 route from 1 to 1 tc filter change dev lo ingress protocol ip pref 100 handle 0x10001 \ route from 1 to 2 tc filter del dev lo ingress protocol ip pref 100 handle 0x10002 \ route from 1 to 2 tc filter show dev lo ingress | grep -c 'pref 100 route chain 0 '
Title net/sched: cls_route: free emptied bucket on filter move
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-10-19T09:11:25.255Z

Reserved: 2026-09-25T10:18:58.205Z

Link: CVE-2026-97959

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-25T11:17:23.600

Modified: 2026-10-19T10:17:47.253

Link: CVE-2026-97959

cve-icon Redhat

Severity : Low

Publid Date: 2026-09-25T00:00:00Z

Links: CVE-2026-97959 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-10-01T06:45:02Z

Weaknesses
  • CWE-772

    Missing Release of Resource after Effective Lifetime