CVE-2025-38455 Information
Description
In the Linux kernel the following vulnerability has been resolved:
KVM: SVM: Reject SEV-ES intra host migration if vCPU creation is in-flight
Reject migration of SEV-ES state if either the source or destination VM is actively creating a vCPU i.e. if kvm_vm_ioctl_create_vcpu() is in the section between incrementing created_vcpus and online_vcpus. The bulk of vCPU creation runs outside of kvm->lock to allow creating multiple vCPUs in parallel and so sev_info.es_active can get toggled from false=>true in the destination VM after (or during) svm_vcpu_create() resulting in an SEV-ES VM effectively having a non-SEV-ES vCPU.
The issue manifests most visibly as a crash when trying to free a vCPU’s NULL VMSA page in an SEV-ES VM but any number of things can go wrong.
BUG: unable to handle page fault for address: ffffebde00000000
PF: supervisor read access in kernel mode
PF: error_code(0x0000) - not-present page
PGD 0 P4D 0
Oops: Oops: 0000 [1] SMP KASAN NOPTI
CPU: 227 UID: 0 PID: 64063 Comm: syz.5.60023 Tainted: G U O 6.15.0-smp-DEV 2 NONE
Tainted: [U]=USER [O]=OOT_MODULE
Hardware name: Google Inc. Arcadia_IT_80/Arcadia_IT_80 BIOS 12.52.0-0 10/28/2024
RIP: 0010:constant_test_bit arch/x86/include/asm/bitops.h:206 [inline]
RIP: 0010:arch_test_bit arch/x86/include/asm/bitops.h:238 [inline]
RIP: 0010:_test_bit include/asm-generic/bitops/instrumented-non-atomic.h:142 [inline]
RIP: 0010:PageHead include/linux/page-flags.h:866 [inline]
RIP: 0010:___free_pages+0x3e/0x120 mm/page_alloc.c:5067
Code: <49> f7 06 40 00 00 00 75 05 45 31 ff eb 0c 66 90 4c 89 f0 4c 39 f0
RSP: 0018:ffff8984551978d0 EFLAGS: 00010246
RAX: 0000777f80000001 RBX: 0000000000000000 RCX: ffffffff918aeb98
RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffffebde00000000
RBP: 0000000000000000 R08: ffffebde00000007 R09: 1ffffd7bc0000000
R10: dffffc0000000000 R11: fffff97bc0000001 R12: dffffc0000000000
R13: ffff8983e19751a8 R14: ffffebde00000000 R15: 1ffffd7bc0000000
FS: 0000000000000000(0000) GS:ffff89ee661d3000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: ffffebde00000000 CR3: 000000793ceaa000 CR4: 0000000000350ef0
DR0: 0000000000000000 DR1: 0000000000000b5f DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Call Trace:
Deliberately don’t check for a NULL VMSA when freeing the vCPU as crashing the host is likely desirable due to the VMSA being consumed by hardware. E.g. if KVM manages to allow VMRUN on the vCPU hardware may read/write a bogus VMSA page. Accessing P
truncated—
Reference
https://git.kernel.org/stable/c/8c8e8d4d7544bb783e15078eda8ba2580e192246 https://git.kernel.org/stable/c/b5725213149597cd9c2b075b87bc4e0f87e906c1 https://git.kernel.org/stable/c/e0d9a7cf37ca09c513420dc88e0d0e805a4f0820 https://git.kernel.org/stable/c/ecf371f8b02d5e31b9aa1da7f159f1b2107bdb01 https://git.kernel.org/stable/c/fd044c99d831e9f837518816c7c366b04014d405
Related CNNVD
CNNVD-202507-3306 (Published: 2025-07-25)
Share on: