CVE-2024-26984

Severity CVSS v4.0:
Pending analysis
Type:
CWE-362 Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')
Publication date:
01/05/2024
Last modified:
04/11/2025

Description

In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> nouveau: fix instmem race condition around ptr stores<br /> <br /> Running a lot of VK CTS in parallel against nouveau, once every<br /> few hours you might see something like this crash.<br /> <br /> BUG: kernel NULL pointer dereference, address: 0000000000000008<br /> PGD 8000000114e6e067 P4D 8000000114e6e067 PUD 109046067 PMD 0<br /> Oops: 0000 [#1] PREEMPT SMP PTI<br /> CPU: 7 PID: 53891 Comm: deqp-vk Not tainted 6.8.0-rc6+ #27<br /> Hardware name: Gigabyte Technology Co., Ltd. Z390 I AORUS PRO WIFI/Z390 I AORUS PRO WIFI-CF, BIOS F8 11/05/2021<br /> RIP: 0010:gp100_vmm_pgt_mem+0xe3/0x180 [nouveau]<br /> Code: c7 48 01 c8 49 89 45 58 85 d2 0f 84 95 00 00 00 41 0f b7 46 12 49 8b 7e 08 89 da 42 8d 2c f8 48 8b 47 08 41 83 c7 01 48 89 ee 8b 40 08 ff d0 0f 1f 00 49 8b 7e 08 48 89 d9 48 8d 75 04 48 c1<br /> RSP: 0000:ffffac20c5857838 EFLAGS: 00010202<br /> RAX: 0000000000000000 RBX: 00000000004d8001 RCX: 0000000000000001<br /> RDX: 00000000004d8001 RSI: 00000000000006d8 RDI: ffffa07afe332180<br /> RBP: 00000000000006d8 R08: ffffac20c5857ad0 R09: 0000000000ffff10<br /> R10: 0000000000000001 R11: ffffa07af27e2de0 R12: 000000000000001c<br /> R13: ffffac20c5857ad0 R14: ffffa07a96fe9040 R15: 000000000000001c<br /> FS: 00007fe395eed7c0(0000) GS:ffffa07e2c980000(0000) knlGS:0000000000000000<br /> CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033<br /> CR2: 0000000000000008 CR3: 000000011febe001 CR4: 00000000003706f0<br /> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000<br /> DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400<br /> Call Trace:<br /> <br /> ...<br /> <br /> ? gp100_vmm_pgt_mem+0xe3/0x180 [nouveau]<br /> ? gp100_vmm_pgt_mem+0x37/0x180 [nouveau]<br /> nvkm_vmm_iter+0x351/0xa20 [nouveau]<br /> ? __pfx_nvkm_vmm_ref_ptes+0x10/0x10 [nouveau]<br /> ? __pfx_gp100_vmm_pgt_mem+0x10/0x10 [nouveau]<br /> ? __pfx_gp100_vmm_pgt_mem+0x10/0x10 [nouveau]<br /> ? __lock_acquire+0x3ed/0x2170<br /> ? __pfx_gp100_vmm_pgt_mem+0x10/0x10 [nouveau]<br /> nvkm_vmm_ptes_get_map+0xc2/0x100 [nouveau]<br /> ? __pfx_nvkm_vmm_ref_ptes+0x10/0x10 [nouveau]<br /> ? __pfx_gp100_vmm_pgt_mem+0x10/0x10 [nouveau]<br /> nvkm_vmm_map_locked+0x224/0x3a0 [nouveau]<br /> <br /> Adding any sort of useful debug usually makes it go away, so I hand<br /> wrote the function in a line, and debugged the asm.<br /> <br /> Every so often pt-&gt;memory-&gt;ptrs is NULL. This ptrs ptr is set in<br /> the nv50_instobj_acquire called from nvkm_kmap.<br /> <br /> If Thread A and Thread B both get to nv50_instobj_acquire around<br /> the same time, and Thread A hits the refcount_set line, and in<br /> lockstep thread B succeeds at refcount_inc_not_zero, there is a<br /> chance the ptrs value won&amp;#39;t have been stored since refcount_set<br /> is unordered. Force a memory barrier here, I picked smp_mb, since<br /> we want it on all CPUs and it&amp;#39;s write followed by a read.<br /> <br /> v2: use paired smp_rmb/smp_wmb.

Vulnerable products and versions

CPE From Up to
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.15 (including) 4.19.313 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.20 (including) 5.4.275 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.5 (including) 5.10.216 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.11 (including) 5.15.157 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.16 (including) 6.1.88 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.2 (including) 6.6.29 (excluding)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.7 (including) 6.8.8 (excluding)
cpe:2.3:o:linux:linux_kernel:6.9:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.9:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.9:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.9:rc4:*:*:*:*:*:*
cpe:2.3:o:debian:debian_linux:10.0:*:*:*:*:*:*:*


References to Advisories, Solutions, and Tools