In the Linux kernel, the following vulnerability has been resolved:
net/sched: Fix backlog accounting in qdisc_dequeue_internal
This issue applies for the following qdiscs: hhf, fq, fq_codel, and fq_pie, and occurs in their change handlers when adjusting to the new limit. The problem is the following in the values passed to the subsequent qdisc_tree_reduce_backlog call given a tbf parent:
When the tbf parent runs out of tokens, skbs of these qdiscs will be placed in gso_skb. Their peek handlers are qdisc_peek_dequeued, which accounts for both qlen and backlog. However, in the case of qdisc_dequeue_internal, ONLY qlen is accounted for when pulling from gso_skb. This means that these qdiscs are missing a qdisc_qstats_backlog_dec when dropping packets to satisfy the new limit in their change handlers.
One can observe this issue with the following (with tc patched to support a limit of 0):
export TARGET=fq tc qdisc del dev lo root tc qdisc add dev lo root handle 1: tbf rate 8bit burst 100b latency 1ms tc qdisc replace dev lo handle 3: parent 1:1 $TARGET limit 1000 echo ''; echo 'add child'; tc -s -d qdisc show dev lo ping -I lo -f -c2 -s32 -W0.001 127.0.0.1 2>&1 >/dev/null echo ''; echo 'after ping'; tc -s -d qdisc show dev lo tc qdisc change dev lo handle 3: parent 1:1 $TARGET limit 0 echo ''; echo 'after limit drop'; tc -s -d qdisc show dev lo tc qdisc replace dev lo handle 2: parent 1:1 sfq echo ''; echo 'post graft'; tc -s -d qdisc show dev lo
The second to last show command shows 0 packets but a positive number (74) of backlog bytes. The problem becomes clearer in the last show command, where qdisc_purge_queue triggers qdisc_tree_reduce_backlog with the positive backlog and causes an underflow in the tbf parent's backlog (4096 Mb instead of 0).
To fix this issue, the codepath for all clients of qdisc_dequeue_internal has been simplified: codel, pie, hhf, fq, fq_pie, and fq_codel. qdisc_dequeue_internal handles the backlog adjustments for all cases that do not directly use the dequeue handler.
The old fq_codel_change limit adjustment loop accumulated the arguments to the subsequent qdisc_tree_reduce_backlog call through the cstats field. However, this is confusing and error prone as fq_codel_dequeue could also potentially mutate this field (which qdisc_dequeue_internal calls in the non gso_skb case), so we have unified the code here with other qdiscs.
CVSS Details
- CVSS 3.1 Base Score: 7.8
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Amazon Linux Ami 2 | — | Upgrade kernel-livepatch-5.10.239-236.958Upgrade perfUpgrade kernel-livepatch-5.10.238-231.953Upgrade bpftoolUpgrade kernel-livepatch-5.10.240-238.955Upgrade kernel-livepatch-5.10.242-239.961Upgrade kernel-tools-debuginfoUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-tools-develUpgrade kernel-livepatch-5.10.238-234.956Upgrade kernel-develUpgrade kernel-debuginfoUpgrade kernel-livepatch-5.10.240-238.959Upgrade kernel-debuginfo-common-x86_64Upgrade kernel-toolsUpgrade kernel-livepatch-5.10.240-238.966Upgrade perf-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-headersUpgrade python-perfUpgrade python-perf-debuginfoUpgrade kernel-livepatch-5.10.244-240.965Upgrade kernel-livepatch-5.15.193-133.214Upgrade kernel | May 20, 2026 | May 20, 2026 |
| Amazon_linux_2023 | — | Upgrade kernel-headersUpgrade kernel6.12-libbpfUpgrade kernel-livepatch-6.1.153-175.280Upgrade kernel-livepatch-6.12.46-66.121Upgrade kernel6.12-libbpf-develUpgrade perfUpgrade bpftool6.12Upgrade kernel-libbpf-debuginfoUpgrade kernel-tools-develUpgrade perf6.12-debuginfoUpgrade python3-perfUpgrade kernel6.12-modules-extraUpgrade kernel6.12-libbpf-staticUpgrade bpftool6.12-debuginfoUpgrade python3-perf6.12-debuginfoUpgrade kernel-modules-extra-commonUpgrade kernel-livepatch-6.12.48-67.114Upgrade kernel6.12-libbpf-debuginfoUpgrade kernel6.12-debuginfo-common-aarch64Upgrade kernel6.12-modules-extra-commonUpgrade kernel6.12Upgrade kernel6.12-tools-debuginfoUpgrade perf-debuginfoUpgrade python3-perf-debuginfoUpgrade kernel-modules-extraUpgrade kernel6.12-tools-develUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-tools-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-libbpf-develUpgrade kernelUpgrade kernel6.12-headersUpgrade kernel6.12-develUpgrade python3-perf6.12Upgrade perf6.12Upgrade kernel-debuginfoUpgrade kernel-libbpf-staticUpgrade kernel6.12-debuginfo-common-x86_64Upgrade kernel-libbpfUpgrade kernel-toolsUpgrade bpftoolUpgrade kernel-develUpgrade kernel-debuginfo-common-x86_64Upgrade kernel6.12-debuginfoUpgrade kernel6.12-tools | Sep 30, 2025 | Sep 5, 2025 |
| Redhat_linux | — | No solution exists | Jul 17, 2026 | Sep 5, 2025 |
| Suse | — | Upgrade dtb-rockchipUpgrade kernel-64kb-extraUpgrade kernel-azure-vdsoUpgrade kernel-debug-vdsoUpgrade kernel-rt-livepatch-develUpgrade dtb-amlogicUpgrade kernel-default-base-rebuildUpgrade kernel-devel-azureUpgrade kernel-obs-buildUpgrade kernel-rt-extraUpgrade dlm-kmp-azureUpgrade kernel-default-vdsoUpgrade dlm-kmp-rtUpgrade dtb-qcomUpgrade gfs2-kmp-azureUpgrade cluster-md-kmp-64kbUpgrade kernel-sourceUpgrade kernel-azureUpgrade kernel-rtUpgrade kernel-rt_debug-vdsoUpgrade kernel-source-rtUpgrade kselftests-kmp-defaultUpgrade dtb-armUpgrade reiserfs-kmp-azureUpgrade kernel-syms-rtUpgrade kernel-docsUpgrade kernel-macrosUpgrade kernel-rt_debug-develUpgrade dtb-sprdUpgrade kernel-syms-azureUpgrade dtb-nvidiaUpgrade reiserfs-kmp-64kbUpgrade kernel-default-manUpgrade kernel-rt-livepatchUpgrade kernel-rt-optionalUpgrade gfs2-kmp-defaultUpgrade kernel-source-vanillaUpgrade kernel-kvmsmallUpgrade dtb-exynosUpgrade kernel-rt-vdsoUpgrade kernel-kvmsmall-vdsoUpgrade kernel-azure-develUpgrade kernel-defaultUpgrade kselftests-kmp-azureUpgrade dtb-freescaleUpgrade cluster-md-kmp-azureUpgrade kernel-obs-qaUpgrade kselftests-kmp-64kbUpgrade dtb-amdUpgrade cluster-md-kmp-rtUpgrade gfs2-kmp-64kbUpgrade dtb-lgUpgrade kernel-default-develUpgrade dtb-apmUpgrade kernel-default-optionalUpgrade dtb-marvellUpgrade kernel-64kbUpgrade kernel-default-livepatchUpgrade kernel-zfcpdumpUpgrade dtb-broadcomUpgrade dtb-xilinxUpgrade ocfs2-kmp-rtUpgrade kernel-debugUpgrade kernel-devel-rtUpgrade kernel-default-livepatch-develUpgrade kernel-symsUpgrade kernel-64kb-develUpgrade dtb-socionextUpgrade dtb-hisiliconUpgrade dtb-appleUpgrade dtb-alteraUpgrade kselftests-kmp-rtUpgrade kernel-rt-develUpgrade kernel-kvmsmall-develUpgrade kernel-debug-develUpgrade kernel-azure-optionalUpgrade dtb-mediatekUpgrade kernel-default-extraUpgrade kernel-azure-extraUpgrade dtb-amazonUpgrade reiserfs-kmp-rtUpgrade kernel-rt_debugUpgrade cluster-md-kmp-defaultUpgrade dlm-kmp-defaultUpgrade kernel-default-baseUpgrade ocfs2-kmp-defaultUpgrade ocfs2-kmp-azureUpgrade dtb-caviumUpgrade kernel-docs-htmlUpgrade gfs2-kmp-rtUpgrade dtb-renesasUpgrade dtb-allwinnerUpgrade dlm-kmp-64kbUpgrade reiserfs-kmp-defaultUpgrade ocfs2-kmp-64kbUpgrade kernel-source-azureUpgrade kernel-develUpgrade kernel-64kb-optional | Dec 5, 2025 | Oct 15, 2025 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub