---
id: "CVE-2026-98930"
kind: "vulnerability"
aliases: ["CVE-2026-98930"]
title: "Linux KVM on s390: SIGP Stop and Store Status can write to userspace under a spinlock"
severity: "unknown"
cvss: null
epss: 0.00225
exploited: false
status: "open"
category: "infrastructure"
products: []
ecosystems: []
tags: ["infrastructure", "kvm", "linux-kernel", "s390"]
not_affected_if: []
published_at: "2026-10-23T13:17:13+00:00"
first_seen_at: "2026-10-23T21:57:33+00:00"
updated_at: "2026-10-25T12:38:50+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-98930", "first_seen_at": "2026-10-23T21:57:33+00:00"}, {"source": "epss", "url": "https://api.first.org/data/v1/epss?cve=CVE-2026-98930", "first_seen_at": "2026-10-25T12:38:50+00:00"}]
---

# Linux KVM on s390: SIGP Stop and Store Status can write to userspace under a spinlock

In the Linux kernel's KVM support for IBM s390 mainframes, a Stop and Store Status request could try to write into userspace memory while holding a spinlock, which is unsafe if the write faults. The fix moves the store-status step out of the locked section.

_Summary, check and fix written by a model from the sources; labelled as such._

## Timeline

- 2026-10-23T21:57:33+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-98930
- 2026-10-25T12:38:50+00:00 epss https://api.first.org/data/v1/epss?cve=CVE-2026-98930

## From the sources

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

KVM: s390: Fix IRQ injection with SIGP Stop and Store Status

When __inject_sigp_stop() is called for a Stop and Store Status
operation, if the vCPU is running, the interrupt is marked as pending
and the status is stored by the thread performing the KVM_RUN IOCTL.

If the vCPU is already stopped, the status is stored immediately.

Storing the status means writing into userspace, which might fault, and
__inject_sigp_stop() is called from do_inject_vcpu() which in turn is
always called holding a spinlock, which is obviously an issue.

Fix this by returning -EWOULDBLOCK from __inject_sigp_stop(), and
adding a bool flag to indicate whether a store status is needed. The
callers of do_inject_vcpu() are modified to pass the pointer to the
bool flag; whenever a Store Status operation is needed, the callers can
now perform it outside the spinlock.

Opportunistically refactor kvm_s390_set_irq_state() to use
scoped_guard() and __free().

[ Added Fixes tag while picking -- Claudio ]

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
