In the Linux kernel, the following vulnerability has been resolved:
KVM: x86: Play nice with protected guests in completehypercallexit()
Use is64bithypercall() instead of is64bitmode() to detect a 64-bit hypercall when completing said hypercall. For guests with protected state, e.g. SEV-ES and SEV-SNP, KVM must assume the hypercall was made in 64-bit mode as the vCPU state needed to detect 64-bit mode is unavailable.
Hacking the sevsmoketest selftest to generate a KVMHCMAPGPARANGE hypercall via VMGEXIT trips the WARN:
------------[ cut here ]------------ WARNING: CPU: 273 PID: 326626 at arch/x86/kvm/x86.h:180 completehypercallexit+0x44/0xe0 [kvm] Modules linked in: kvmamd kvm ... [last unloaded: kvm] CPU: 273 UID: 0 PID: 326626 Comm: sevsmoketest Not tainted 6.12.0-smp--392e932fa0f3-feat #470 Hardware name: Google Astoria/astoria, BIOS 0.20240617.0-0 06/17/2024 RIP: 0010:completehypercallexit+0x44/0xe0 [kvm] Call Trace: <TASK> kvmarchvcpuioctlrun+0x2400/0x2720 [kvm] kvmvcpuioctl+0x54f/0x630 [kvm] _sesysioctl+0x6b/0xc0 dosyscall64+0x83/0x160 entrySYSCALL64afterhwframe+0x76/0x7e </TASK> ---[ end trace 0000000000000000 ]---
[
{
"id": "CVE-2024-55881-05400919",
"signature_version": "v1",
"digest": {
"threshold": 0.9,
"line_hashes": [
"173568347525671184234560447083370567490",
"178050938305746651321964950524757601781",
"271945562875874294305143195411699938683",
"77359826956140062806606650297648088327"
]
},
"deprecated": false,
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@22b5c2acd65dbe949032f619d4758a35a82fffc3",
"target": {
"file": "arch/x86/kvm/x86.c"
}
},
{
"id": "CVE-2024-55881-27e192b3",
"signature_version": "v1",
"digest": {
"threshold": 0.9,
"line_hashes": [
"173568347525671184234560447083370567490",
"178050938305746651321964950524757601781",
"271945562875874294305143195411699938683",
"77359826956140062806606650297648088327"
]
},
"deprecated": false,
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@9b42d1e8e4fe9dc631162c04caa69b0d1860b0f0",
"target": {
"file": "arch/x86/kvm/x86.c"
}
},
{
"id": "CVE-2024-55881-5d7e3502",
"signature_version": "v1",
"digest": {
"threshold": 0.9,
"line_hashes": [
"173568347525671184234560447083370567490",
"178050938305746651321964950524757601781",
"271945562875874294305143195411699938683",
"77359826956140062806606650297648088327"
]
},
"deprecated": false,
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@7ed4db315094963de0678a8adfd43c46471b9349",
"target": {
"file": "arch/x86/kvm/x86.c"
}
},
{
"id": "CVE-2024-55881-5f112b9b",
"signature_version": "v1",
"digest": {
"threshold": 0.9,
"line_hashes": [
"173568347525671184234560447083370567490",
"178050938305746651321964950524757601781",
"271945562875874294305143195411699938683",
"77359826956140062806606650297648088327"
]
},
"deprecated": false,
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@0840d360a8909c722fb62459f42836afe32ededb",
"target": {
"file": "arch/x86/kvm/x86.c"
}
},
{
"id": "CVE-2024-55881-84f56f71",
"signature_version": "v1",
"digest": {
"threshold": 0.9,
"line_hashes": [
"173568347525671184234560447083370567490",
"178050938305746651321964950524757601781",
"271945562875874294305143195411699938683",
"77359826956140062806606650297648088327"
]
},
"deprecated": false,
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3d2634ec0d1dbe8f4b511cf5261f327c6a76f4b6",
"target": {
"file": "arch/x86/kvm/x86.c"
}
}
]