Cloudanix VulnDB

CVE-2026-45845

Medium · 5.5

CVSS

5.5

EPSS

0.2%

Published

May 27, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A local user may be able to crash vulnerable Linux systems by using a specific network traffic-control feature.

Exploitation
Local Privilege
Attacker needs
Low Privilege
Complexity
Low
Impact
Denial Of Service
Component
OS kernel
Class
Denial of service
Remediation
Patch
Effort
Low
Patch risk
Low

What it actually does

This is a local denial-of-service flaw in the Linux kernel TAPRIO traffic-control scheduler. When a TAPRIO child queuing discipline is deleted, the kernel can store a NULL pointer in the TAPRIO class array. A later class-dump request walks the TAPRIO classes and dereferences that NULL pointer in taprio_dump_class(), causing a kernel oops or panic. The issue is reachable by a user with CAP_NET_ADMIN in a network namespace on kernels built with CONFIG_NET_SCH_TAPRIO. On systems that allow unprivileged user namespaces, a local unprivileged user may be able to create the needed namespace context and trigger the crash without ordinary host-level administrative privileges. The impact is availability only; there is no known confidentiality or integrity impact from the described bug.

Why it matters to the business

Successful exploitation can crash affected Linux systems, interrupting workloads, network services, containers, virtualized environments, and any business process dependent on the host. The risk is highest on multi-user systems, container hosts, development platforms, CI runners, and environments where untrusted users can create user or network namespaces. EPSS is currently very low and the issue is not listed in CISA KEV, but the bug is low-complexity and locally reachable in common namespace-enabled configurations, so exposed multi-tenant Linux systems should prioritize remediation.

How an attack unfolds

An attacker first obtains local code execution on an affected Linux host. If they already have CAP_NET_ADMIN in a network namespace, or if unprivileged user namespaces are enabled and allow them to create a new user and network namespace with namespace-scoped CAP_NET_ADMIN, they configure a TAPRIO qdisc using Linux traffic-control netlink operations. They then graft an explicit child qdisc under TAPRIO, delete that child qdisc so the TAPRIO internal child pointer becomes NULL, and issue a class-dump request using RTM_GETTCLASS. During the dump, the kernel walks TAPRIO classes, calls taprio_dump_class(), receives a NULL child qdisc from taprio_leaf(), and dereferences it while reading the child handle. This causes a NULL pointer dereference and can panic or otherwise destabilize the kernel, resulting in denial of service.

How to fix it

Upgrade to a Linux kernel version that includes the TAPRIO fix which substitutes noop_qdisc when a child qdisc is removed and prevents NULL entries in TAPRIO qdisc slots. Because exact fixed package versions were not provided, use the security advisory and kernel package versions from the relevant Linux distribution or kernel vendor and confirm the fix is present in net/sched/sch_taprio.c. Where immediate patching is not possible, reduce exploitability by disabling unprivileged user namespaces where operationally feasible, restricting local shell access, limiting container capabilities, avoiding CAP_NET_ADMIN for untrusted containers or workloads, and blocking use of TAPRIO where it is not required. If the kernel is custom-built and TAPRIO is unnecessary, consider disabling CONFIG_NET_SCH_TAPRIO. Mitigations reduce exposure but do not replace applying the kernel fix.

How to confirm the fix worked

Confirm the running kernel package is updated to a vendor-fixed build or contains the upstream TAPRIO change that stores &noop_qdisc rather than NULL when taprio_graft() is called with a NULL replacement. Verify whether CONFIG_NET_SCH_TAPRIO is enabled by checking the running kernel configuration, for example through /boot/config-$(uname -r), /proc/config.gz, or vendor kernel metadata. Validate namespace exposure by checking whether unprivileged user namespaces are enabled and whether untrusted workloads can receive CAP_NET_ADMIN. After patching, a controlled regression test in a non-production environment should confirm that creating a TAPRIO qdisc, deleting a child qdisc, and dumping classes no longer produces a kernel oops. Review system logs after reboot to ensure no new taprio_dump_class, NULL pointer dereference, or sch_taprio-related kernel crash messages appear.

Typical attack path

  1. Gain local code execution on an affected Linux system.
  2. Create or enter a network namespace where CAP_NET_ADMIN is available; on permissive systems this may be possible through unprivileged user namespaces.
  3. Use traffic-control netlink operations to create a TAPRIO qdisc on an interface inside the namespace.
  4. Attach or graft an explicit child qdisc to a TAPRIO class.
  5. Delete the child qdisc using RTM_DELQDISC, leaving an internal TAPRIO child qdisc slot NULL on vulnerable kernels.
  6. Request a traffic-control class dump using RTM_GETTCLASS.
  7. Trigger a NULL pointer dereference in the kernel TAPRIO class-dump path, causing a kernel oops or panic.

How to detect it

Look for evidence of kernel crashes or oops messages involving TAPRIO traffic control, especially taprio_dump_class(), sch_taprio.c, tc_dump_tclass, qdisc_class_dump, rtnetlink, or netlink dump paths. Primary log sources include the kernel ring buffer, system journal, syslog, crash dump infrastructure, kdump/vmcore records, hypervisor reset events, endpoint telemetry, and container runtime audit logs. Search for suspicious local execution of traffic-control tooling such as tc creating or deleting taprio qdiscs, particularly from untrusted users or containers. Audit logs may show namespace creation via unshare, clone, or setns followed by tc netlink activity. Exploitation may leave few artifacts beyond a kernel oops and reboot because the effect is a crash rather than persistent compromise. Correlate kernel crash timestamps with process accounting, auditd execve records, shell history where available, container logs, and sudo/session logs to identify the user or workload that invoked traffic-control operations before the crash.

  • taprio_dump_class
  • net/sched/sch_taprio.c
  • KASAN: null-ptr-deref
  • NULL pointer dereference
  • general protection fault
  • qdisc_class_dump
  • tc_dump_tclass_qdisc
  • tc_dump_tclass_root
  • tc_dump_tclass
  • taprio_walk
  • taprio_leaf
  • taprio_graft
  • rtnl_dumpit
  • netlink_dump
  • rtnetlink_rcv_msg
  • RTM_GETTCLASS
  • RTM_DELQDISC
  • kind taprio
  • tc qdisc add
  • tc qdisc del
  • tc class show
  • CONFIG_NET_SCH_TAPRIO

What your security team should do

  • Prioritize patching Linux systems that allow untrusted local users, run containers, provide CI/build services, or permit unprivileged user namespaces.
  • Inventory hosts running kernels with CONFIG_NET_SCH_TAPRIO enabled and identify where CAP_NET_ADMIN is granted to containers, users, or automation.
  • Remove CAP_NET_ADMIN from untrusted containers and workloads unless strictly required.
  • Disable unprivileged user namespaces where business requirements allow, especially on shared or multi-tenant systems.
  • Monitor kernel logs for TAPRIO, traffic-control, netlink, and NULL pointer dereference crash signatures.
  • Treat unexpected kernel panics or reboots following tc/qdisc activity as potentially suspicious and preserve logs for investigation.
  • If patching is delayed, restrict local access and namespace creation on high-value systems until fixed kernels are deployed.

The record

In the Linux kernel, the following vulnerability has been resolved: net/sched: taprio: fix NULL pointer dereference in class dump When a TAPRIO child qdisc is deleted via RTM_DELQDISC, taprio_graft() is called with new == NULL and stores NULL into q->qdiscs[cl - 1]. Subsequent RTM_GETTCLASS dump operations walk all classes via taprio_walk() and call taprio_dump_class(), which calls taprio_leaf() returning the NULL pointer, then dereferences it to read child->handle, causing a kernel NULL pointer dereference. The bug is reachable with namespace-scoped CAP_NET_ADMIN on any kernel with CONFIG_NET_SCH_TAPRIO enabled. On systems with unprivileged user namespaces enabled, an unprivileged local user can trigger a kernel panic by creating a taprio qdisc inside a new network namespace, grafting an explicit child qdisc, deleting it, and requesting a class dump. The RTM_GETTCLASS dump itself requires no capability. Oops: general protection fault, probably for non-canonical address 0xdffffc0000000007: 0000 [#1] SMP KASAN NOPTI KASAN: null-ptr-deref in range [0x0000000000000038-0x000000000000003f] RIP: 0010:taprio_dump_class (net/sched/sch_taprio.c:2478) Call Trace: <TASK> tc_fill_tclass (net/sched/sch_api.c:1966) qdisc_class_dump (net/sched/sch_api.c:2326) taprio_walk (net/sched/sch_taprio.c:2514) tc_dump_tclass_qdisc (net/sched/sch_api.c:2352) tc_dump_tclass_root (net/sched/sch_api.c:2370) tc_dump_tclass (net/sched/sch_api.c:2431) rtnl_dumpit (net/core/rtnetlink.c:6864) netlink_dump (net/netlink/af_netlink.c:2325) rtnetlink_rcv_msg (net/core/rtnetlink.c:6959) netlink_rcv_skb (net/netlink/af_netlink.c:2550) </TASK> Fix this by substituting &noop_qdisc when new is NULL in taprio_graft(), a common pattern used by other qdiscs (e.g., multiq_graft()) to ensure the q->qdiscs[] slots are never NULL. This makes control-plane dump paths safe without requiring individual NULL checks. Since the data-plane paths (taprio_enqueue and taprio_dequeue_from_txq) previously had explicit NULL guards that would drop/skip the packet cleanly, update those checks to test for &noop_qdisc instead. Without this, packets would reach taprio_enqueue_one() which increments the root qdisc's qlen and backlog before calling the child's enqueue; noop_qdisc drops the packet but those counters are never rolled back, permanently inflating the root qdisc's statistics. After this change *old can be a valid qdisc, NULL, or &noop_qdisc. Only call qdisc_put(*old) in the first case to avoid decreasing noop_qdisc's refcount, which was never increased.

Affected packages

Ecosystem Package Introduced Fixed
openSUSE:Tumbleweed kernel-source 0 7.0.11-1.1

Related vulnerabilities