CVE Catalog

CVE-2026-74284

Low risk· EPSS 12%
Published: Updated: Translated: NVD NIST

Exploitation Probability (EPSS)

Low risk
0.21%

12th percentile - higher than 12% of all known CVEs

Summary

A vulnerability was found in the Linux kernel's HFSC network scheduler (sch_hfsc). During a single dequeue, a class can be marked passive twice, leading to incorrect decrementing of the parent's active class counter. As a result, a parent with active child classes is removed from the vttree, and queues stop being processed (stall).

Risk Assessment

The vulnerability can cause a complete network traffic stall on interfaces using the HFSC discipline, resulting in unavailability of network services. An attacker can intentionally trigger this scenario by sending crafted traffic, causing a denial of service.

Recommendation

Immediately update the Linux kernel to a version containing the fix (commit resolving the issue). If updating is not possible, consider temporarily disabling the HFSC discipline or limiting its use until the patch is applied.

Other vulnerabilities in Linux kernel

See all
Original NVD description (English source)

In the Linux kernel, the following vulnerability has been resolved: net/sched: sch_hfsc: Don't make class passive twice update_vf() is called from two places for the same class during a single dequeue when the class's child qdisc (e.g. codel/fq_codel) drops its last packets while dequeuing: 1. The child calls qdisc_tree_reduce_backlog(), which, now that the child is empty, invokes hfsc_qlen_notify() -> update_vf(cl, 0, 0) and turns the class passive (cl_nactive is decremented up the hierarchy). 2. hfsc_dequeue() then calls update_vf(cl, qdisc_pkt_len(skb), cur_time) to charge the dequeued bytes. On the second call the class is already passive, but its child qdisc is still empty, so update_vf() arms go_passive again: if (cl->qdisc->q.qlen == 0 && cl->cl_flags & HFSC_FSC) go_passive = 1; The leaf is then skipped by the cl_nactive == 0 check inside the loop, which does not clear go_passive, so the stale go_passive propagates to the parent and decrements its cl_nactive a second time. A parent that still has other active children is driven to cl_nactive == 0 and removed from the vttree, even though those siblings are still backlogged. They are never dequeued again and the qdisc stalls. Fix this by only arming go_passive when the class is actually active, so an already-passive class no longer triggers a second passive transition. The byte accounting (cl->cl_total += len) still runs for every ancestor, so dequeued bytes continue to be counted exactly once.

Vulnerability data from NVD (NIST) · CISA KEV · EPSS