Skip to main content

Linux Kernel CVE-2025-68815

HIGH
2026-01-13 416baaa9-dc9f-4396-8d5f-8c081fb06d67
7.8
CVSS 3.1 · Vendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Share

Severity by source

Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67) PRIMARY
7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI
7.8 HIGH

Local trigger via tc requires CAP_NET_ADMIN (PR:L, AV:L), reliably reproducible (AC:L); kernel list corruption yields memory-corruption-grade C/I/A:H within the same privilege scope (S:U).

3.1 AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
SUSE
5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Red Hat
6.1 MEDIUM
qualitative

Primary rating from Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67).

CVSS VectorVendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

7
Analysis Updated
Jul 30, 2026 - 07:07 vuln.today
v3 (cvss_changed)
Analysis Updated
Jul 30, 2026 - 07:05 vuln.today
v2 (cvss_changed)
Re-analysis Queued
Jul 30, 2026 - 06:37 vuln.today
cvss_changed
CVSS changed
Jul 30, 2026 - 06:37 NVD
7.8 (HIGH)
Patch released
Mar 16, 2026 - 15:00 nvd
Patch available
Analysis Generated
Mar 12, 2026 - 21:54 vuln.today
CVE Published
Jan 13, 2026 - 16:16 nvd
N/A

DescriptionCVE.org

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

net/sched: ets: Remove drr class from the active list if it changes to strict

Whenever a user issues an ets qdisc change command, transforming a drr class into a strict one, the ets code isn't checking whether that class was in the active list and removing it. This means that, if a user changes a strict class (which was in the active list) back to a drr one, that class will be added twice to the active list [1].

Doing so with the following commands:

tc qdisc add dev lo root handle 1: ets bands 2 strict 1 tc qdisc add dev lo parent 1:2 handle 20: \ tbf rate 8bit burst 100b latency 1s tc filter add dev lo parent 1: basic classid 1:2 ping -c1 -W0.01 -s 56 127.0.0.1 tc qdisc change dev lo root handle 1: ets bands 2 strict 2 tc qdisc change dev lo root handle 1: ets bands 2 strict 1 ping -c1 -W0.01 -s 56 127.0.0.1

Will trigger the following splat with list debug turned on:

[ 59.279014][ T365] ------------[ cut here ]------------ [ 59.279452][ T365] list_add double add: new=ffff88801d60e350, prev=ffff88801d60e350, next=ffff88801d60e2c0. [ 59.280153][ T365] WARNING: CPU: 3 PID: 365 at lib/list_debug.c:35 __list_add_valid_or_report+0x17f/0x220 [ 59.280860][ T365] Modules linked in: [ 59.281165][ T365] CPU: 3 UID: 0 PID: 365 Comm: tc Not tainted 6.18.0-rc7-00105-g7e9f13163c13-dirty #239 PREEMPT(voluntary) [ 59.281977][ T365] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011 [ 59.282391][ T365] RIP: 0010:__list_add_valid_or_report+0x17f/0x220 [ 59.282842][ T365] Code: 89 c6 e8 d4 b7 0d ff 90 0f 0b 90 90 31 c0 e9 31 ff ff ff 90 48 c7 c7 e0 a0 22 9f 48 89 f2 48 89 c1 4c 89 c6 e8 b2 b7 0d ff 90 <0f> 0b 90 90 31 c0 e9 0f ff ff ff 48 89 f7 48 89 44 24 10 4c 89 44 ... [ 59.288812][ T365] Call Trace: [ 59.289056][ T365] <TASK> [ 59.289224][ T365] ? srso_alias_return_thunk+0x5/0xfbef5 [ 59.289546][ T365] ets_qdisc_change+0xd2b/0x1e80 [ 59.289891][ T365] ? __lock_acquire+0x7e7/0x1be0 [ 59.290223][ T365] ? __pfx_ets_qdisc_change+0x10/0x10 [ 59.290546][ T365] ? srso_alias_return_thunk+0x5/0xfbef5 [ 59.290898][ T365] ? __mutex_trylock_common+0xda/0x240 [ 59.291228][ T365] ? __pfx___mutex_trylock_common+0x10/0x10 [ 59.291655][ T365] ? srso_alias_return_thunk+0x5/0xfbef5 [ 59.291993][ T365] ? srso_alias_return_thunk+0x5/0xfbef5 [ 59.292313][ T365] ? trace_contention_end+0xc8/0x110 [ 59.292656][ T365] ? srso_alias_return_thunk+0x5/0xfbef5 [ 59.293022][ T365] ? srso_alias_return_thunk+0x5/0xfbef5 [ 59.293351][ T365] tc_modify_qdisc+0x63a/0x1cf0

Fix this by always checking and removing an ets class from the active list when changing it to strict.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/tree/net/sched/sch_ets.c?id=ce052b9402e461a9aded599f5b47e76bc727f7de#n663

AnalysisAI

Local privilege escalation and kernel memory corruption in the Linux kernel's net/sched ETS (Enhanced Transmission Selection) qdisc allows a user with network-configuration capability to corrupt an internal linked list by toggling a scheduling class between DRR and strict modes. When an active DRR class is reconfigured to strict, ets_qdisc_change() fails to remove it from the active list, so switching it back to DRR performs a double list_add, corrupting kernel list pointers. No public exploit has been identified at time of analysis and the EPSS score is very low (0.05%), but the flaw is a classic kernel list-corruption primitive that can escalate to arbitrary write and full compromise.

Technical ContextAI

The affected component is the ETS packet scheduler (net/sched/sch_ets.c), a queuing discipline that combines strict-priority bands with Deferred Deficit Round Robin (DRR) bands for weighted bandwidth sharing. ETS tracks DRR classes that currently have packets to send in a per-qdisc 'active' linked list. The root cause is a state-management error (a linked-list double-add, conceptually CWE-415/CWE-664-class list corruption; the feed lists CWE as N/A): the change path that converts a DRR class into a strict one omits the list_del of that class from the active list. Because a strict class is never supposed to be on the active list, a subsequent conversion back to DRR re-inserts an already-linked node, tripping the CONFIG_DEBUG_LIST list_add double-add check and, without list debugging, silently corrupting the doubly-linked list. The fix unconditionally removes the class from the active list whenever it is changed to strict.

Affected ProductsAI

The Linux kernel is affected wherever the ETS qdisc (CONFIG_NET_SCH_ETS) is compiled and usable. No exact vulnerable-version range or CPE is provided in the input; affected/fixed versions must be derived from the stable-tree commits, which span multiple maintained branches (fix commits 02783a37cb1c, 2f125ebe47d6, 43d9a530c8c0, 58fdce6bc005, 8067db5c95aa, b1e125ae425a, cca2ed931b73 on git.kernel.org). Distribution exposure is confirmed for Ubuntu via advisory USN-8096-1 (https://ubuntu.com/security/notices/USN-8096-1). VulDB tracks this as entry https://vuldb.com/vuln/340628. Because ETS was introduced in the 5.x series and the bug is in the change path, all kernels shipping sch_ets prior to the backported fix should be considered potentially affected pending confirmation from each distro's advisory.

RemediationAI

Patch available per vendor advisory - apply the fixed kernel from your distribution or rebuild from a stable tree containing the upstream fix (git.kernel.org commits 02783a37cb1c / 2f125ebe47d6 / 43d9a530c8c0 / 58fdce6bc005 / 8067db5c95aa / b1e125ae425a / cca2ed931b73). Ubuntu users should install the kernel update tracked in USN-8096-1 (https://ubuntu.com/security/notices/USN-8096-1) and reboot; other distributions should apply the corresponding backport. If patching must be deferred, the concrete compensating control is to prevent the vulnerable code path from being reached: avoid deploying the ETS qdisc (do not create 'tc qdisc ... ets' with DRR bands) and restrict CAP_NET_ADMIN, since the tc change commands that trigger the double-add require it - practically, disallow unprivileged user namespaces (sysctl kernel.unprivileged_userns_clone=0 or user.max_user_namespaces=0) so unprivileged users cannot obtain CAP_NET_ADMIN inside a netns; the trade-off is that this breaks containers and sandboxes relying on user namespaces. Blocking the sch_ets module from loading (modprobe blacklist) is an option only where ETS is not needed and will break any traffic-shaping configuration that depends on it.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
Container suse/sl-micro/6.0/baremetal-os-container:latest Container suse/sl-micro/6.0/toolbox:latest Affected
Container suse/sl-micro/6.0/base-os-container:2.1.3-7.95 Image SL-Micro Image SLE-Micro Image SLE-Micro-Azure Image SLE-Micro-BYOS Image SLE-Micro-BYOS-Azure Image SLE-Micro-BYOS-EC2 Image SLE-Micro-BYOS-GCE Image SLE-Micro-EC2 Image SLE-Micro-GCE Affected
Container suse/sl-micro/6.0/kvm-os-container:2.1.3-6.115 Affected
Container suse/sl-micro/6.0/rt-os-container:2.1.3-7.146 Affected
Container suse/sl-micro/6.1/base-os-container:2.2.1-5.80 Image SL-Micro-Azure Image SL-Micro-BYOS-Azure Image SL-Micro-BYOS-EC2 Image SL-Micro-BYOS-GCE Image SL-Micro-EC2 Image SUSE-Multi-Linux-Manager-Proxy-BYOS-Azure Image SUSE-Multi-Linux-Manager-Proxy-BYOS-EC2 Image SUSE-Multi-Linux-Manager-Proxy-BYOS-GCE Image SUSE-Multi-Linux-Manager-Server-Azure-llc Image SUSE-Multi-Linux-Manager-Server-Azure-ltd Image SUSE-Multi-Linux-Manager-Server-BYOS-Azure Image SUSE-Multi-Linux-Manager-Server-BYOS-EC2 Image SUSE-Multi-Linux-Manager-Server-BYOS-GCE Image SUSE-Multi-Linux-Manager-Server-EC2-llc Image SUSE-Multi-Linux-Manager-Server-EC2-ltd Affected

Share

CVE-2025-68815 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy