CVE-2024-35871

Source
https://cve.org/CVERecord?id=CVE-2024-35871
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2024-35871.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2024-35871
Downstream
Published
2024-05-19T08:34:29.292Z
Modified
2026-03-14T12:34:03.787616Z
Summary
riscv: process: Fix kernel gp leakage
Details

In the Linux kernel, the following vulnerability has been resolved:

riscv: process: Fix kernel gp leakage

childregs represents the registers which are active for the new thread in user context. For a kernel thread, childregs->gp is never used since the kernel gp is not touched by switch_to. For a user mode helper, the gp value can be observed in user space after execve or possibly by other means.

[From the email thread]

The /* Kernel thread */ comment is somewhat inaccurate in that it is also used for usermodehelper threads, which exec a user process, e.g. /sbin/init or when /proc/sys/kernel/corepattern is a pipe. Such threads do not have PFKTHREAD set and are valid targets for ptrace etc. even before they exec.

childregs is the user context during syscall execution and it is observable from userspace in at least five ways:

  1. kernel_execve does not currently clear integer registers, so the starting register state for PID 1 and other user processes started by the kernel has sp = user stack, gp = kernel _globalpointer$, all other integer registers zeroed by the memset in the patch comment.

    This is a bug in its own right, but I'm unwilling to bet that it is the only way to exploit the issue addressed by this patch.

  2. ptrace(PTRACEGETREGSET): you can PTRACEATTACH to a usermodehelper thread before it execs, but ptrace requires SIGSTOP to be delivered which can only happen at user/kernel boundaries.

  3. /proc//task//syscall: this is perfectly happy to read ptregs for usermode_helpers before the exec completes, but gp is not one of the registers it returns.

  4. PERFSAMPLEREGSUSER: LOCKDOWNPERF normally prevents access to kernel addresses via PERFSAMPLEREGSINTR, but due to this bug kernel addresses are also exposed via PERFSAMPLEREGSUSER which is permitted under LOCKDOWN_PERF. I have not attempted to write exploit code.

  5. Much of the tracing infrastructure allows access to user registers. I have not attempted to determine which forms of tracing allow access to user registers without already allowing access to kernel registers.

Database specific
{
    "cna_assigner": "Linux",
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2024/35xxx/CVE-2024-35871.json"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
7db91e57a0acde126a162ababfb1e0ab190130cb
Fixed
9abc3e6f1116adb7a2d4fbb8ce20c37916976bf5
Fixed
dff6072124f6df77bfd36951fbd88565746980ef
Fixed
f6583444d7e78dae750798552b65a2519ff3ca84
Fixed
00effef72c98294edb1efa87ffa0f6cfb61b36a4
Fixed
d8dcba0691b8e42bddb61aab201e4d918a08e5d9
Fixed
d14fa1fcf69db9d070e75f1c4425211fa619dfc8

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2024-35871.json"