CVE-2026-98719
En el kernel de Linux se ha resuelto la siguiente vulnerabilidad:
KVM: SEV: Anular el puntero de la máscara de «CPU que han ejecutado» al liberarla
Anular have_run_cpus al liberar la máscara, en particular en la ruta de error de __sev_guest_init(), de modo que KVM no tenga que usar de forma sutil sev->active para determinar si la máscara ya se ha liberado. Como señaló Sashiko, liberar la máscara a ciegas en sev_vm_destroy() provoca una doble liberación si __sev_guest_init() falla después de haberla liberado.
La lógica se ha trasladado a una función auxiliar, ya que anular el puntero es sorprendentemente difícil y extraño debido a que have_run_cpus es un array de una sola entrada cuando CPUMASK_OFFSTACK=n.
Leer descripción completaMostrar menos
Deliberadamente no se usa CPUMASK_VAR_NULL, ya que no es asignable directamente cuando la máscara de CPU está en la pila; por ejemplo, requiere usar una variable local y un memcpy(), lo cual es absolutamente absurdo. Además, aunque borrar la máscara de bits de la pila es un efecto secundario innecesario y posiblemente no deseado, KVM depende absolutamente de que '0' sea el valor «nulo», dado que la estructura se asigna con ceros.
De forma oportunista, se añade una función alloc() que complementa a free(); hay suficientes puntos de llamada como para que merezca la pena hacerlo.
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
- 5
- 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
JSON original (NVD)
Mostrar
{
"id": "CVE-2026-98719",
"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": "6aef7cf800098749ff5d660222efaf6e01e98c09",
"lessThan": "b1de3ebf59507e0edacaa5cfa2225bc1869e1b63",
"versionType": "git"
},
{
"status": "affected",
"version": "9784e5ca91b37b387f3f414af4340c54f7a63566",
"lessThan": "0fbc7fec2242de6c3dcea6de55573c428e820173",
"versionType": "git"
},
{
"status": "affected",
"version": "12c1f6e03f944e399bd2c88441dca5dc702b95a5",
"lessThan": "8abbc76120a74bfba1851bd97528099d715e45c6",
"versionType": "git"
}
],
"programFiles": [
"arch/x86/kvm/svm/sev.c"
],
"defaultStatus": "unaffected"
},
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "6.18.55",
"lessThan": "6.18.56",
"versionType": "semver"
},
{
"status": "affected",
"version": "7.2.9",
"lessThan": "7.2.10",
"versionType": "semver"
}
],
"programFiles": [
"arch/x86/kvm/svm/sev.c"
],
"defaultStatus": "unaffected"
}
]
}
],
"published": "2026-10-18T16:17:25.463",
"references": [
{
"url": "https://git.kernel.org/stable/c/0fbc7fec2242de6c3dcea6de55573c428e820173",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/8abbc76120a74bfba1851bd97528099d715e45c6",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/b1de3ebf59507e0edacaa5cfa2225bc1869e1b63",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
],
"vulnStatus": "Received",
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nKVM: SEV: Nullify \"have run CPUs\" mask pointer when freeing it\n\nNullify have_run_cpus when freeing the mask, particularly in the error path\nof __sev_guest_init(), so that KVM doesn't have to subtly use sev->active\nto track whether or not the mask has been freed. As pointed out by Sashiko,\nblindly freeing the mask in sev_vm_destroy() results in a double-free if\nthe mask is freed if __sev_guest_init() fails.\n\nThrow the logic in a helper as nullifying the pointer is frustratingly\ndifficult and weird due to have_run_cpus being a single-entry array when\nCPUMASK_OFFSTACK=n. Deliberately don't use CPUMASK_VAR_NULL, as it's not\ndirectly assignable when the cpumask is on-stack, e.g. requires using a\nlocal variable and a memcpy(), which is beyond ridiculous. Furthermore,\nwhile clearing the on-stack bitmask is an unnecessary and arguably unwanted\nside effect, KVM absolutely relies on '0' being the \"null\" value given that\nthe struct is zero-allocated.\n\nOpportunistically add an alloc() helper to pair with free(); there are just\nenough call sites to make doing so worthwhile."
}
],
"lastModified": "2026-10-19T10:19:36.137",
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}