CVE-2024-35804CWE-401

CVE-2024-35804

High · published May 17, 2024

CVSS v3.1
8.8
EPSS
0%
Percentile
13.8
In the wild
Unconfirmed
What it is

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

KVM: x86: Mark target gfn of emulated atomic instruction as dirty

When emulating an atomic access on behalf of the guest, mark the target

gfn dirty if the CMPXCHG by KVM is attempted and doesn't fault. This

fixes a bug where KVM effectively corrupts guest memory during live

migration by writing to guest memory without informing userspace that the

page is dirty.

Marking the page dirty got unintentionally dropped when KVM's emulated

CMPXCHG was converted to do a user access. Before that, KVM explicitly

mapped the guest page into kernel memory, and marked the page dirty during

the unmap phase.

Mark the page dirty even if the CMPXCHG fails, as the old data is written

back on failure, i.e. the page is still written. The value written is

guaranteed to be the same because the operation is atomic, but KVM's ABI

is that all writes are dirty logged regardless of the value written. And

more importantly, that's what KVM did before the buggy commit.

Huge kudos to the folks on the Cc list (and many others), who did all the

actual work of triaging and debugging.

base-commit: 6769ea8da8a93ed4630f1ce64df6aafcaabfce64

The record
Technical detail
CVSS v3.1
8.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00236 · 13.8th percentile
Weakness
CWE-401 · Missing Release of Memory after Effective Lifetime
Published
2024-05-17T18:15Z
Affected products (12)
ProductVersionsFixed in
linux/linux_kernel≥ 5.15.58, < 5.15.1545.15.154
linux/linux_kernel≥ 5.17.13, < 5.185.18
linux/linux_kernel≥ 5.18.2, < 6.1.846.1.84
linux/linux_kernel≥ 6.2, < 6.6.246.6.24
linux/linux_kernel≥ 6.7, < 6.7.126.7.12
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (10)
EPSS history
Timeline
  • 17 MAY 13:23Z
    KVM: x86: Mark target gfn of emulated atomic instruction as dirty
    cvelistv5