sched/fair: Fix potential memory corruption in child_cfs_rq_on_list
- 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.15.179, 6.1.131, 6.6.83, 6.12.19, 6.13.7
- 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: no
- Technical impact: total
Summary
In the Linux kernel, the following vulnerability has been resolved: sched/fair: Fix potential memory corruption in child_cfs_rq_on_list child_cfs_rq_on_list attempts to convert a 'prev' pointer to a cfs_rq. This 'prev' pointer can originate from struct rq's leaf_cfs_rq_list, making the conversion invalid and potentially leading to memory corruption. Depending on the relative positions of leaf_cfs_rq_list and the task group (tg) pointer within the struct, this can cause a memory fault or access garbage data. The issue arises in list_add_leaf_cfs_rq, where both cfs_rq->leaf_cfs_rq_list and rq->leaf_cfs_rq_list are added to the same leaf list. Also, rq->tmp_alone_branch can be set to rq->leaf_cfs_rq_list. This adds a check `if (prev == &rq->leaf_cfs_rq_list)` after the main conditional in child_cfs_rq_on_list. This ensures that the container_of operation will convert a correct cfs_rq struct. This check is sufficient because only cfs_rqs on the same CPU are added to the list, so verifying the 'prev' pointer against the current rq's list head is enough. Fixes a potential memory corruption issue that due to current struct layout might not be manifesting as a crash but could lead to unpredictable behavior when the layout changes.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: no · Technical impact: total
- Record last updated
Affected versions
- Linux Linux
From fdaba61ef8a268d4136d0a113d153f7a89eb9984 · fixed in 5cb300dcdd27e6a351ac02541e0231261c775852; From fdaba61ef8a268d4136d0a113d153f7a89eb9984 · fixed in 000c9ee43928f2ce68a156dd40bab7616256f4dd; From fdaba61ef8a268d4136d0a113d153f7a89eb9984 · fixed in 9cc7f0018609f75a349e42e3aebc3b0e905ba775; From fdaba61ef8a268d4136d0a113d153f7a89eb9984 · fixed in b5741e4b9ef3567613b2351384f91d3f16e59986; From fdaba61ef8a268d4136d0a113d153f7a89eb9984 · fixed in e1dd09df30ba86716cb2ffab97dc35195c01eb8f; From fdaba61ef8a268d4136d0a113d153f7a89eb9984 · fixed in 3b4035ddbfc8e4521f85569998a7569668cccf51
- Linux Linux
5.13
- KernelLinux
From 5.13.0 · fixed in 5.15.179; From 5.16.0 · fixed in 6.1.131; From 6.2.0 · fixed in 6.6.83; From 6.7.0 · fixed in 6.12.19; From 6.13.0 · fixed in 6.13.7