---
id: CVE-2026-98719
title: 'KVM: SEV: Nullify "have run CPUs" mask pointer when freeing it'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  KVM: SEV: Nullify "have run CPUs" mask pointer when freeing it

  Nullify have_run_cpus when freeing the mask, particularly in the error path
  of __sev_guest_init(), so th…
severity: none
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 6aef7cf800098749ff5d660222efaf6e01e98c09 <
    b1de3ebf59507e0edacaa5cfa2225bc1869e1b63
  - >-
    Linux >= 9784e5ca91b37b387f3f414af4340c54f7a63566 <
    0fbc7fec2242de6c3dcea6de55573c428e820173
  - >-
    Linux >= 12c1f6e03f944e399bd2c88441dca5dc702b95a5 <
    8abbc76120a74bfba1851bd97528099d715e45c6
  - Linux >= 6.18.55 < 6.18.56
  - Linux >= 7.2.9 < 7.2.10
  - Linux 7.3-rc5
published: '2026-10-18'
updated: '2026-10-18'
sourceUpdated: '2026-10-18T15:46:54.631Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-98719'
references:
  - url: 'https://git.kernel.org/stable/c/b1de3ebf59507e0edacaa5cfa2225bc1869e1b63'
  - url: 'https://git.kernel.org/stable/c/0fbc7fec2242de6c3dcea6de55573c428e820173'
  - url: 'https://git.kernel.org/stable/c/8abbc76120a74bfba1851bd97528099d715e45c6'
tags:
  - cve.org
ingestedAt: '2026-10-18T16:47:32.510Z'
---

## Overview

In the Linux kernel, the following vulnerability has been resolved:

KVM: SEV: Nullify "have run CPUs" mask pointer when freeing it

Nullify have_run_cpus when freeing the mask, particularly in the error path
of __sev_guest_init(), so that KVM doesn't have to subtly use sev->active
to track whether or not the mask has been freed.  As pointed out by Sashiko,
blindly freeing the mask in sev_vm_destroy() results in a double-free if
the mask is freed if __sev_guest_init() fails.

Throw the logic in a helper as nullifying the pointer is frustratingly
difficult and weird due to have_run_cpus being a single-entry array when
CPUMASK_OFFSTACK=n.  Deliberately don't use CPUMASK_VAR_NULL, as it's not
directly assignable when the cpumask is on-stack, e.g. requires using a
local variable and a memcpy(), which is beyond ridiculous.  Furthermore,
while clearing the on-stack bitmask is an unnecessary and arguably unwanted
side effect, KVM absolutely relies on '0' being the "null" value given that
the struct is zero-allocated.

Opportunistically add an alloc() helper to pair with free(); there are just
enough call sites to make doing so worthwhile.

## Affected

- `Linux >= 6aef7cf800098749ff5d660222efaf6e01e98c09 < b1de3ebf59507e0edacaa5cfa2225bc1869e1b63`
- `Linux >= 9784e5ca91b37b387f3f414af4340c54f7a63566 < 0fbc7fec2242de6c3dcea6de55573c428e820173`
- `Linux >= 12c1f6e03f944e399bd2c88441dca5dc702b95a5 < 8abbc76120a74bfba1851bd97528099d715e45c6`
- `Linux >= 6.18.55 < 6.18.56`
- `Linux >= 7.2.9 < 7.2.10`
- `Linux 7.3-rc5`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
