CVE-2024-35804
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
17/05/2024
Last modified:
19/09/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
KVM: x86: Mark target gfn of emulated atomic instruction as dirty<br />
<br />
When emulating an atomic access on behalf of the guest, mark the target<br />
gfn dirty if the CMPXCHG by KVM is attempted and doesn&#39;t fault. This<br />
fixes a bug where KVM effectively corrupts guest memory during live<br />
migration by writing to guest memory without informing userspace that the<br />
page is dirty.<br />
<br />
Marking the page dirty got unintentionally dropped when KVM&#39;s emulated<br />
CMPXCHG was converted to do a user access. Before that, KVM explicitly<br />
mapped the guest page into kernel memory, and marked the page dirty during<br />
the unmap phase.<br />
<br />
Mark the page dirty even if the CMPXCHG fails, as the old data is written<br />
back on failure, i.e. the page is still written. The value written is<br />
guaranteed to be the same because the operation is atomic, but KVM&#39;s ABI<br />
is that all writes are dirty logged regardless of the value written. And<br />
more importantly, that&#39;s what KVM did before the buggy commit.<br />
<br />
Huge kudos to the folks on the Cc list (and many others), who did all the<br />
actual work of triaging and debugging.<br />
<br />
base-commit: 6769ea8da8a93ed4630f1ce64df6aafcaabfce64
Impact
Base Score 3.x
5.50
Severity 3.x
MEDIUM
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.15.58 (including) | 5.15.154 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.17.13 (including) | 5.18 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.18.2 (including) | 6.1.84 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (including) | 6.6.24 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (including) | 6.7.12 (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:linux:linux_kernel:6.8:rc6:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:6.8:rc7:*:*:*:*:*:* |
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/225d587a073584946c05c9b7651d637bd45c0c71
- https://git.kernel.org/stable/c/726374dde5d608b15b9756bd52b6fc283fda7a06
- https://git.kernel.org/stable/c/910c57dfa4d113aae6571c2a8b9ae8c430975902
- https://git.kernel.org/stable/c/9d1b22e573a3789ed1f32033ee709106993ba551
- https://git.kernel.org/stable/c/a9bd6bb6f02bf7132c1ab192ba62bbfa52df7d66
- https://git.kernel.org/stable/c/225d587a073584946c05c9b7651d637bd45c0c71
- https://git.kernel.org/stable/c/726374dde5d608b15b9756bd52b6fc283fda7a06
- https://git.kernel.org/stable/c/910c57dfa4d113aae6571c2a8b9ae8c430975902
- https://git.kernel.org/stable/c/9d1b22e573a3789ed1f32033ee709106993ba551
- https://git.kernel.org/stable/c/a9bd6bb6f02bf7132c1ab192ba62bbfa52df7d66



