net/sched: sch_taprio: Replace direct dequeue call with peek and qdisc_dequeue_peeked
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 5.10.266, 5.15.217, 6.1.184, 6.6.145, 6.12.97, and 2 more
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
- Exploitation: none
- Automatable: yes
- Technical impact: partial
Summary
In the Linux kernel, the following vulnerability has been resolved: net/sched: sch_taprio: Replace direct dequeue call with peek and qdisc_dequeue_peeked When taprio's software path peeks a non-work-conserving child qdisc, the child stashes the peeked skb in its gso_skb; taprio_dequeue_from_txq() then takes the packet with a direct child ->dequeue() call, which ignores that stash, orphans the peeked skb and desyncs the child's qlen/backlog. With a qfq child this re-enters the child on an emptied list and dereferences NULL, panicking the kernel from softirq on ordinary egress. Take the packet through qdisc_dequeue_peeked(), as sch_red and sch_sfb now do. The helper returns the child's stashed skb first and is a no-op when there is none, so a work-conserving child is unaffected and the gated path now consumes the skb whose length was charged to the budget.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: yes · Technical impact: partial
- Record last updated
Affected versions
- Linux Linux
From 5a781ccbd19e4664babcbe4b4ead7aa2b9283d22 · fixed in 51f8af240aed903e988755af33d7491030b50ae9; From 5a781ccbd19e4664babcbe4b4ead7aa2b9283d22 · fixed in 17ab5f76f3899f67e5569722f334591f4b88b17b; From 5a781ccbd19e4664babcbe4b4ead7aa2b9283d22 · fixed in f60d5c12e0551012cee5c272b0bcbcc78f7bb506; From 5a781ccbd19e4664babcbe4b4ead7aa2b9283d22 · fixed in 6ee5a7665a9080bcb05d703bf981a579436fd05e; From 5a781ccbd19e4664babcbe4b4ead7aa2b9283d22 · fixed in 18d580cb00c55805633bae45e90cf22ed6b8e424; From 5a781ccbd19e4664babcbe4b4ead7aa2b9283d22 · fixed in e2b7ee61989f2d39df6c2cc06f9db1aea69bdb09; From 5a781ccbd19e4664babcbe4b4ead7aa2b9283d22 · fixed in 2dcebbd1ad2e180fe7b98bf346ced69a872e11e6; From 5a781ccbd19e4664babcbe4b4ead7aa2b9283d22 · fixed in e056e1dfcddca877dd46d704e8ec9860cfc9ec44
- Linux Linux
4.20
- KernelLinux
From 4.20.0 · fixed in 5.10.266; From 5.11.0 · fixed in 5.15.217; From 5.16.0 · fixed in 6.1.184; From 6.2.0 · fixed in 6.6.145; From 6.7.0 · fixed in 6.12.97; From 6.13.0 · fixed in 6.18.40; From 6.19.0 · fixed in 7.1.5
References 8
git.kernel.org
- stable/c/51f8af240aed903e988755af33d7491030b50ae9
- stable/c/17ab5f76f3899f67e5569722f334591f4b88b17b
- stable/c/f60d5c12e0551012cee5c272b0bcbcc78f7bb506
- stable/c/6ee5a7665a9080bcb05d703bf981a579436fd05e
- stable/c/18d580cb00c55805633bae45e90cf22ed6b8e424
- stable/c/e2b7ee61989f2d39df6c2cc06f9db1aea69bdb09
- stable/c/2dcebbd1ad2e180fe7b98bf346ced69a872e11e6
- stable/c/e056e1dfcddca877dd46d704e8ec9860cfc9ec44