CVE-2024-58083
Severity CVSS v4.0:
Pending analysis
Type:
CWE-416
Use After Free
Publication date:
06/03/2025
Last modified:
03/11/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
KVM: Explicitly verify target vCPU is online in kvm_get_vcpu()<br />
<br />
Explicitly verify the target vCPU is fully online _prior_ to clamping the<br />
index in kvm_get_vcpu(). If the index is "bad", the nospec clamping will<br />
generate &#39;0&#39;, i.e. KVM will return vCPU0 instead of NULL.<br />
<br />
In practice, the bug is unlikely to cause problems, as it will only come<br />
into play if userspace or the guest is buggy or misbehaving, e.g. KVM may<br />
send interrupts to vCPU0 instead of dropping them on the floor.<br />
<br />
However, returning vCPU0 when it shouldn&#39;t exist per online_vcpus is<br />
problematic now that KVM uses an xarray for the vCPUs array, as KVM needs<br />
to insert into the xarray before publishing the vCPU to userspace (see<br />
commit c5b077549136 ("KVM: Convert the kvm->vcpus array to a xarray")),<br />
i.e. before vCPU creation is guaranteed to succeed.<br />
<br />
As a result, incorrectly providing access to vCPU0 will trigger a<br />
use-after-free if vCPU0 is dereferenced and kvm_vm_ioctl_create_vcpu()<br />
bails out of vCPU creation due to an error and frees vCPU0. Commit<br />
afb2acb2e3a3 ("KVM: Fix vcpu_array[0] races") papered over that issue, but<br />
in doing so introduced an unsolvable teardown conundrum. Preventing<br />
accesses to vCPU0 before it&#39;s fully online will allow reverting commit<br />
afb2acb2e3a3, without re-introducing the vcpu_array[0] UAF race.
Impact
Base Score 3.x
7.80
Severity 3.x
HIGH
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.14.120 (including) | 4.15 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.19.44 (including) | 4.20 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.0.17 (including) | 5.4.291 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.5 (including) | 5.10.235 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (including) | 5.15.179 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (including) | 6.1.129 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (including) | 6.6.78 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (including) | 6.12.14 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.13 (including) | 6.13.3 (excluding) |
To consult the complete list of CPE names with products and versions, see this page
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/09d50ccf0b2d739db4a485b08afe7520a4402a63
- https://git.kernel.org/stable/c/125da53b3c0c9d7f58353aea0076e9efd6498ba7
- https://git.kernel.org/stable/c/1e7381f3617d14b3c11da80ff5f8a93ab14cfc46
- https://git.kernel.org/stable/c/5cce2ed69b00e022b5cdf0c49c82986abd2941a8
- https://git.kernel.org/stable/c/7c4899239d0f70f88ac42665b3da51678d122480
- https://git.kernel.org/stable/c/ca8da90ed1432ff3d000de4f1e2275d4e7d21b96
- https://git.kernel.org/stable/c/d817e510662fd1c9797952408d94806f97a5fffd
- https://git.kernel.org/stable/c/f2f805ada63b536bc192458a7098388286568ad4
- https://lists.debian.org/debian-lts-announce/2025/03/msg00028.html
- https://lists.debian.org/debian-lts-announce/2025/05/msg00030.html



