CVE-2024-53044: net/sched: sch_api: fix xa_insert() error path in tcf_block_get_ext()
In the Linux kernel, the following vulnerability has been resolved:
net/sched: sch_api: fix xa_insert() error path in tcf_block_get_ext()
This command:
$ tc qdisc replace dev eth0 ingress_block 1 egress_block 1 clsact
Error: block dev insert failed: -EBUSY.
fails because user space requests the same block index to be set for
both ingress and egress.
[ side note, I don't think it even failed prior to commit 913b47d3424e
("net/sched: Introduce tc block netdev tracking infra"), because this
is a command from an old set of notes of mine which used to work, but
alas, I did not scientifically bisect this ]
The problem is not that it fails, but rather, that the second time
around, it fails differently (and irrecoverably):
$ tc qdisc replace dev eth0 ingress_block 1 egress_block 1 clsact
Error: dsa_core: Flow block cb is busy.
[ another note: the extack is added by me for illustration purposes.
the context of the problem is that clsact_init() obtains the same
&q->ingress_block pointer as &q->egress_block, and since we call
tcf_block_get_ext() on both of them, "dev" will be added to the
block->ports xarray twice, thus failing the operation: once through
the ingress block pointer, and once again through the egress block
pointer. the problem itself is that when xa_insert() fails, we have
emitted a FLOW_BLOCK_BIND command through ndo_setup_tc(), but the
offload never sees a corresponding FLOW_BLOCK_UNBIND. ]
Even correcting the bad user input, we still cannot recover:
$ tc qdisc replace dev swp3 ingress_block 1 egress_block 2 clsact
Error: dsa_core: Flow block cb is busy.
Basically the only way to recover is to reboot the system, or unbind and
rebind the net device driver.
To fix the bug, we need to fill the correct error teardown path which
was missed during code movement, and call tcf_block_offload_unbind()
when xa_insert() fails.
[ last note, fundamentally I blame the label naming convention in
tcf_block_get_ext() for the bug. The labels should be named after what
they do, not after the error path that jumps to them. This way, it is
obviously wrong that two labels pointing to the same code mean
something is wrong, and checking the code correctness at the goto site
is also easier ]
Security readout for executives and security teams
Plain-English summary
A local user able to submit the affected Linux traffic-control configuration can leave network offload state stuck after a failed block binding. Later valid configuration attempts may fail until the system reboots or the network driver is rebound. This can disrupt network administration and availability, but the supplied sources do not demonstrate remote or active exploitation.
Executive priority
Prioritize affected networking hosts where delegated local users or automation can alter traffic control, especially systems requiring dependable offload changes. Treat remediation as urgent but below remotely exploitable critical flaws. Coordinate patching because recovery and kernel updates may require service interruption.
Technical view
In tcf_block_get_ext(), a failed xa_insert() did not reverse an earlier FLOW_BLOCK_BIND operation. The offload therefore retained a stale binding and rejected later requests as busy. The stable fix calls tcf_block_offload_unbind() on that error path. The supplied affected-version data includes Linux 6.8 and boundaries around 6.11.7 and 6.12; distribution backports require confirmation.
Likely exposure
Exposure is limited to Linux systems running an affected kernel where a local, low-privileged actor can issue the relevant traffic-control request. Systems using vendor kernels may already contain a backported fix even when their displayed version appears affected. Internet reachability alone does not create exposure.
Exploitation context
The CVSS vector describes local access, low complexity, low privileges, and no user interaction. The demonstrated outcome is persistent network-offload configuration failure requiring reboot or driver rebind. The record is not in KEV, and the supplied sources provide no evidence of active exploitation or a public weaponized exploit.
Researcher notes
The source narrative directly supports stale FLOW_BLOCK_BIND state and availability or operational impact. Although the supplied CVSS claims high confidentiality, integrity, and availability impact, it does not explain confidentiality or integrity consequences. Exact affected-version interpretation and distribution backport coverage remain incomplete, so researchers should verify against vendor kernel histories.
Mitigation direction
Install a vendor-supported kernel incorporating the applicable referenced stable fix.
Confirm distribution backport status rather than relying only on the displayed kernel version.
Restrict local access and permissions capable of changing Linux traffic-control configuration.
Avoid assigning the same block index to ingress and egress pending remediation.
Use reboot or driver rebind only as operational recovery after assessing service impact.
Validation and detection
Inventory kernel versions on systems permitting traffic-control configuration.
Check vendor advisories and changelogs for backports of the referenced stable commits.
Review audit records for failed block bindings followed by persistent busy errors.
Verify affected systems accept valid traffic-control changes after patching.
Do not reproduce the failure on production systems; use an isolated test environment.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cve · low confidence lookup
CVE-2024-53044 mapping review
Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.