[<prev] [next>] [day] [month] [year] [list]
Message-ID: <2025121613-CVE-2025-68259-16e3@gregkh>
Date: Tue, 16 Dec 2025 15:45:16 +0100
From: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
To: linux-cve-announce@...r.kernel.org
Cc: Greg Kroah-Hartman <gregkh@...nel.org>
Subject: CVE-2025-68259: KVM: SVM: Don't skip unrelated instruction if INT3/INTO is replaced
From: Greg Kroah-Hartman <gregkh@...nel.org>
Description
===========
In the Linux kernel, the following vulnerability has been resolved:
KVM: SVM: Don't skip unrelated instruction if INT3/INTO is replaced
When re-injecting a soft interrupt from an INT3, INT0, or (select) INTn
instruction, discard the exception and retry the instruction if the code
stream is changed (e.g. by a different vCPU) between when the CPU
executes the instruction and when KVM decodes the instruction to get the
next RIP.
As effectively predicted by commit 6ef88d6e36c2 ("KVM: SVM: Re-inject
INT3/INTO instead of retrying the instruction"), failure to verify that
the correct INTn instruction was decoded can effectively clobber guest
state due to decoding the wrong instruction and thus specifying the
wrong next RIP.
The bug most often manifests as "Oops: int3" panics on static branch
checks in Linux guests. Enabling or disabling a static branch in Linux
uses the kernel's "text poke" code patching mechanism. To modify code
while other CPUs may be executing that code, Linux (temporarily)
replaces the first byte of the original instruction with an int3 (opcode
0xcc), then patches in the new code stream except for the first byte,
and finally replaces the int3 with the first byte of the new code
stream. If a CPU hits the int3, i.e. executes the code while it's being
modified, then the guest kernel must look up the RIP to determine how to
handle the #BP, e.g. by emulating the new instruction. If the RIP is
incorrect, then this lookup fails and the guest kernel panics.
The bug reproduces almost instantly by hacking the guest kernel to
repeatedly check a static branch[1] while running a drgn script[2] on
the host to constantly swap out the memory containing the guest's TSS.
[1]: https://gist.github.com/osandov/44d17c51c28c0ac998ea0334edf90b5a
[2]: https://gist.github.com/osandov/10e45e45afa29b11e0c7209247afc00b
The Linux kernel CVE team has assigned CVE-2025-68259 to this issue.
Affected and fixed versions
===========================
Issue introduced in 6.0 with commit 6ef88d6e36c2b4b3886ec9967cafabe4424d27d5 and fixed in 6.12.62 with commit 87cc1622c88a4888959d64fa1fc9ba1e264aa3d4
Issue introduced in 6.0 with commit 6ef88d6e36c2b4b3886ec9967cafabe4424d27d5 and fixed in 6.17.12 with commit 54bcccc2c7805a00af1d7d2faffd6f424c0133aa
Issue introduced in 6.0 with commit 6ef88d6e36c2b4b3886ec9967cafabe4424d27d5 and fixed in 6.18.1 with commit 53903ac9ca1abffa27327e85075ec496fa55ccf3
Issue introduced in 6.0 with commit 6ef88d6e36c2b4b3886ec9967cafabe4424d27d5 and fixed in 6.19-rc1 with commit 4da3768e1820cf15cced390242d8789aed34f54d
Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.
Unaffected versions might change over time as fixes are backported to
older supported kernel versions. The official CVE entry at
https://cve.org/CVERecord/?id=CVE-2025-68259
will be updated if fixes are backported, please check that for the most
up to date information about this issue.
Affected files
==============
The file(s) affected by this issue are:
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/svm/svm.c
arch/x86/kvm/x86.c
Mitigation
==========
The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes. Individual
changes are never tested alone, but rather are part of a larger kernel
release. Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all. If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
https://git.kernel.org/stable/c/87cc1622c88a4888959d64fa1fc9ba1e264aa3d4
https://git.kernel.org/stable/c/54bcccc2c7805a00af1d7d2faffd6f424c0133aa
https://git.kernel.org/stable/c/53903ac9ca1abffa27327e85075ec496fa55ccf3
https://git.kernel.org/stable/c/4da3768e1820cf15cced390242d8789aed34f54d
Powered by blists - more mailing lists