rseq: Fix segfault on registration when rseq_cs is non-zero
- 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.240, 5.15.189, 6.1.146, 6.6.99, 6.12.39, and 1 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
Summary
In the Linux kernel, the following vulnerability has been resolved: rseq: Fix segfault on registration when rseq_cs is non-zero The rseq_cs field is documented as being set to 0 by user-space prior to registration, however this is not currently enforced by the kernel. This can result in a segfault on return to user-space if the value stored in the rseq_cs field doesn't point to a valid struct rseq_cs. The correct solution to this would be to fail the rseq registration when the rseq_cs field is non-zero. However, some older versions of glibc will reuse the rseq area of previous threads without clearing the rseq_cs field and will also terminate the process if the rseq registration fails in a secondary thread. This wasn't caught in testing because in this case the leftover rseq_cs does point to a valid struct rseq_cs. What we can do is clear the rseq_cs field on registration when it's non-zero which will prevent segfaults on registration and won't break the glibc versions that reuse rseq areas on thread creation.
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From d7822b1e24f2df5df98c76f0e94a5416349ff759 · fixed in 48900d839a3454050fd5822e34be8d54c4ec9b86; From d7822b1e24f2df5df98c76f0e94a5416349ff759 · fixed in 3e4028ef31b69286c9d4878cee0330235f53f218; From d7822b1e24f2df5df98c76f0e94a5416349ff759 · fixed in b2b05d0dc2f4f0646922068af435aed5763d16ba; From d7822b1e24f2df5df98c76f0e94a5416349ff759 · fixed in eaf112069a904b6207b4106ff083e0208232a2eb; From d7822b1e24f2df5df98c76f0e94a5416349ff759 · fixed in f004f58d18a2d3dc761cf973ad27b4a5997bd876; From d7822b1e24f2df5df98c76f0e94a5416349ff759 · fixed in 2df285dab00fa03a3ef939b6cb0d0d0aeb0791db; From d7822b1e24f2df5df98c76f0e94a5416349ff759 · fixed in fd881d0a085fc54354414aed990ccf05f282ba53
- Linux Linux
4.18
- KernelLinux
From 4.18.0 · fixed in 5.10.240; From 5.11.0 · fixed in 5.15.189; From 5.16.0 · fixed in 6.1.146; From 6.2.0 · fixed in 6.6.99; From 6.7.0 · fixed in 6.12.39; From 6.13.0 · fixed in 6.14.9
References 7
git.kernel.org
- stable/c/48900d839a3454050fd5822e34be8d54c4ec9b86
- stable/c/3e4028ef31b69286c9d4878cee0330235f53f218
- stable/c/b2b05d0dc2f4f0646922068af435aed5763d16ba
- stable/c/eaf112069a904b6207b4106ff083e0208232a2eb
- stable/c/f004f58d18a2d3dc761cf973ad27b4a5997bd876
- stable/c/2df285dab00fa03a3ef939b6cb0d0d0aeb0791db
- stable/c/fd881d0a085fc54354414aed990ccf05f282ba53