CVE-2024-26906

Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
17/04/2024
Last modified:
16/09/2025

Description

In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> x86/mm: Disallow vsyscall page read for copy_from_kernel_nofault()<br /> <br /> When trying to use copy_from_kernel_nofault() to read vsyscall page<br /> through a bpf program, the following oops was reported:<br /> <br /> BUG: unable to handle page fault for address: ffffffffff600000<br /> #PF: supervisor read access in kernel mode<br /> #PF: error_code(0x0000) - not-present page<br /> PGD 3231067 P4D 3231067 PUD 3233067 PMD 3235067 PTE 0<br /> Oops: 0000 [#1] PREEMPT SMP PTI<br /> CPU: 1 PID: 20390 Comm: test_progs ...... 6.7.0+ #58<br /> Hardware name: QEMU Standard PC (i440FX + PIIX, 1996) ......<br /> RIP: 0010:copy_from_kernel_nofault+0x6f/0x110<br /> ......<br /> Call Trace:<br /> <br /> ? copy_from_kernel_nofault+0x6f/0x110<br /> bpf_probe_read_kernel+0x1d/0x50<br /> bpf_prog_2061065e56845f08_do_probe_read+0x51/0x8d<br /> trace_call_bpf+0xc5/0x1c0<br /> perf_call_bpf_enter.isra.0+0x69/0xb0<br /> perf_syscall_enter+0x13e/0x200<br /> syscall_trace_enter+0x188/0x1c0<br /> do_syscall_64+0xb5/0xe0<br /> entry_SYSCALL_64_after_hwframe+0x6e/0x76<br /> <br /> ......<br /> ---[ end trace 0000000000000000 ]---<br /> <br /> The oops is triggered when:<br /> <br /> 1) A bpf program uses bpf_probe_read_kernel() to read from the vsyscall<br /> page and invokes copy_from_kernel_nofault() which in turn calls<br /> __get_user_asm().<br /> <br /> 2) Because the vsyscall page address is not readable from kernel space,<br /> a page fault exception is triggered accordingly.<br /> <br /> 3) handle_page_fault() considers the vsyscall page address as a user<br /> space address instead of a kernel space address. This results in the<br /> fix-up setup by bpf not being applied and a page_fault_oops() is invoked<br /> due to SMAP.<br /> <br /> Considering handle_page_fault() has already considered the vsyscall page<br /> address as a userspace address, fix the problem by disallowing vsyscall<br /> page read for copy_from_kernel_nofault().

Vulnerable products and versions

CPE From Up to
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.10.214 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.11 (including) 5.15.153 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.16 (including) 6.1.83 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.2 (including) 6.6.23 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.7 (including) 6.7.11 (excluding)
cpe:2.3:o:linux:linux_kernel:6.8:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.8:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.8:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.8:rc4:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.8:rc5:*:*:*:*:*:*
cpe:2.3:o:debian:debian_linux:10.0:*:*:*:*:*:*:*