CVE-2026-98464
En el kernel de Linux se ha resuelto la siguiente vulnerabilidad:
RISC-V: KVM: Sincronizar la callback de hrtimer durante el desmantelamiento
La callback de hrtimer que no usa Sstc borra next_set antes de sus últimos usos del vCPU que la contiene. Si el desmantelamiento observa next_set como falso mientras la callback todavía se está ejecutando, kvm_riscv_vcpu_timer_cancel() omite hrtimer_cancel() y kvm_destroy_vcpus() puede liberar el vCPU antes de que la callback entre en kvm_riscv_vcpu_set_interrupt().
Un huésped puede armar el temporizador con SBI TIME y solicitar el apagado con SBI legacy shutdown o SRST.
Leer descripción completaMostrar menos
Un VMM que respete KVM_EXIT_SYSTEM_EVENT y destruya la VM aporta el lado del desmantelamiento de la condición de carrera; no se necesita ninguna llamada ioctl del host posterior al lanzamiento para armar el temporizador ni solicitar el desmantelamiento.
En la rama master upstream 62cc90241548, KASAN genérico informó:
El objeto fue asignado por KVM_CREATE_VCPU y liberado de forma concurrente por:
Para una validación determinista, añadí mdelay(1000) justo después de la asignación existente next_set = false. Esto solo amplía la ventana existente de la callback posterior al borrado. Una compilación con trazas y sin retardo alcanzó de forma natural el orden callback-después-del-inicio-del-desmantelamiento/antes-de-la-desinicialización en 12 de 200 ejecuciones, pero 1.500 iteraciones de estrés del kernel estándar no produjeron ningún informe de KASAN, por lo que la reproducción natural depende del tiempo.
Invocar siempre hrtimer_cancel() para un temporizador inicializado. Conservar el resultado -EINVAL existente cuando el temporizador ya no está armado, pero solo después de sincronizarse con una callback en ejecución.
Con este parche, hrtimer_cancel() se bloqueó durante toda la ventana de callback ampliada antes de la destrucción del vCPU. KASAN no informó de ningún error en 100 ejecuciones con la corrección y la ventana ampliada, ni en 200 ejecuciones de barrido temporal solo con la corrección.
Detalles técnicos trazas, registros y código del informe original
BUG: KASAN: slab-use-after-free in do_raw_spin_lock Write of size 4 at addr ff60000005e58898 kvm_riscv_vcpu_set_interrupt kvm_riscv_vcpu_hrtimer_expired __hrtimer_run_queues hrtimer_interrupt kvm_destroy_vcpus kvm_arch_destroy_vm kvm_destroy_vm __fput
Traducción automática del texto original de NVD (en inglés).
CVSS
NVD no ha asignado puntuación CVSS a esta CVE (habitual desde el cambio de política de abril de 2026).
Probabilidad de explotación (EPSS)
- Probabilidad de explotación en los próximos 30 días
- 0.17 %
- Percentil entre todas las CVEs puntuadas
- 6
- Fecha de la puntuación
- 20/10/2026
EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).
Tecnologías afectadas (1)
⚠ Inferidas por IA a partir de la descripción — NVD aún no ha analizado esta CVE; no son CPE verificados.
Referencias
Mostrar las 6 referencias
- https://git.kernel.org/stable/c/2af03b606aadaaeb386658ef798c79bdcdef87c1
- https://git.kernel.org/stable/c/3cc6184bd5920c9685d87f4e260568feba08650d
- https://git.kernel.org/stable/c/9bdbae64ae0dab93041ebc57ec4e93def793fc2d
- https://git.kernel.org/stable/c/aaad136d56d91252517272b68cd533e5714698d5
- https://git.kernel.org/stable/c/e66aced74f0122380603c9910a71d77618b28f0e
- https://git.kernel.org/stable/c/ea91f05a55b807ead3166546a2c75f4185ca645f
JSON original (NVD)
Mostrar
{
"id": "CVE-2026-98464",
"cveTags": [],
"metrics": {},
"affected": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"affectedData": [
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "3a9f66cb25e18a3eeca36c08d9f823a35b3ddc22",
"lessThan": "9bdbae64ae0dab93041ebc57ec4e93def793fc2d",
"versionType": "git"
},
{
"status": "affected",
"version": "3a9f66cb25e18a3eeca36c08d9f823a35b3ddc22",
"lessThan": "2af03b606aadaaeb386658ef798c79bdcdef87c1",
"versionType": "git"
},
{
"status": "affected",
"version": "3a9f66cb25e18a3eeca36c08d9f823a35b3ddc22",
"lessThan": "e66aced74f0122380603c9910a71d77618b28f0e",
"versionType": "git"
},
{
"status": "affected",
"version": "3a9f66cb25e18a3eeca36c08d9f823a35b3ddc22",
"lessThan": "ea91f05a55b807ead3166546a2c75f4185ca645f",
"versionType": "git"
},
{
"status": "affected",
"version": "3a9f66cb25e18a3eeca36c08d9f823a35b3ddc22",
"lessThan": "3cc6184bd5920c9685d87f4e260568feba08650d",
"versionType": "git"
},
{
"status": "affected",
"version": "3a9f66cb25e18a3eeca36c08d9f823a35b3ddc22",
"lessThan": "aaad136d56d91252517272b68cd533e5714698d5",
"versionType": "git"
}
],
"programFiles": [
"arch/riscv/kvm/vcpu_timer.c"
],
"defaultStatus": "unaffected"
},
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "5.16"
},
{
"status": "unaffected",
"version": "0",
"lessThan": "5.16",
"versionType": "semver"
},
{
"status": "unaffected",
"version": "6.1.189",
"versionType": "semver",
"lessThanOrEqual": "6.1.*"
},
{
"status": "unaffected",
"version": "6.6.158",
"versionType": "semver",
"lessThanOrEqual": "6.6.*"
},
{
"status": "unaffected",
"version": "6.12.112",
"versionType": "semver",
"lessThanOrEqual": "6.12.*"
},
{
"status": "unaffected",
"version": "6.18.55",
"versionType": "semver",
"lessThanOrEqual": "6.18.*"
},
{
"status": "unaffected",
"version": "7.2.9",
"versionType": "semver",
"lessThanOrEqual": "7.2.*"
},
{
"status": "unaffected",
"version": "7.3",
"versionType": "original_commit_for_fix",
"lessThanOrEqual": "*"
}
],
"programFiles": [
"arch/riscv/kvm/vcpu_timer.c"
],
"defaultStatus": "affected"
}
]
}
],
"published": "2026-10-18T16:16:56.873",
"references": [
{
"url": "https://git.kernel.org/stable/c/2af03b606aadaaeb386658ef798c79bdcdef87c1",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/3cc6184bd5920c9685d87f4e260568feba08650d",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/9bdbae64ae0dab93041ebc57ec4e93def793fc2d",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/aaad136d56d91252517272b68cd533e5714698d5",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/e66aced74f0122380603c9910a71d77618b28f0e",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/ea91f05a55b807ead3166546a2c75f4185ca645f",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
],
"vulnStatus": "Received",
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nRISC-V: KVM: Synchronize hrtimer callback during teardown\n\nThe non-Sstc hrtimer callback clears next_set before its final uses of\nthe enclosing vCPU. If teardown observes next_set as false while the\ncallback is still running, kvm_riscv_vcpu_timer_cancel() skips\nhrtimer_cancel() and kvm_destroy_vcpus() can free the vCPU before the\ncallback enters kvm_riscv_vcpu_set_interrupt().\n\nA guest can arm the timer with SBI TIME and request shutdown with SBI\nlegacy shutdown or SRST. A VMM that honors KVM_EXIT_SYSTEM_EVENT and\ndestroys the VM supplies the teardown side of the race; no post-launch\nhost ioctl is needed to arm or request teardown.\n\nOn upstream master 62cc90241548, generic KASAN reported:\n\n BUG: KASAN: slab-use-after-free in do_raw_spin_lock\n Write of size 4 at addr ff60000005e58898\n\n kvm_riscv_vcpu_set_interrupt\n kvm_riscv_vcpu_hrtimer_expired\n __hrtimer_run_queues\n hrtimer_interrupt\n\nThe object was allocated by KVM_CREATE_VCPU and freed concurrently by:\n\n kvm_destroy_vcpus\n kvm_arch_destroy_vm\n kvm_destroy_vm\n __fput\n\nFor deterministic validation, I added mdelay(1000) immediately after\nthe existing next_set = false assignment. This only widens the\nexisting post-clear callback window. A no-delay trace build naturally\nreached the callback-after-teardown-start/before-deinit ordering in 12\nof 200 runs, but 1,500 stock-kernel stress iterations did not produce a\nKASAN report, so natural reproduction is timing-sensitive.\n\nAlways invoke hrtimer_cancel() for an initialized timer. Preserve the\nexisting -EINVAL result when the timer is no longer set, but only after\nsynchronizing with a running callback.\n\nWith this patch, hrtimer_cancel() blocked for the full widened callback\nwindow before vCPU destruction. KASAN reported no error in 100\nfixed-and-widened runs or 200 fix-only timing-sweep runs."
}
],
"lastModified": "2026-10-19T10:18:56.097",
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}