---
id: "CVE-2026-99155"
kind: "vulnerability"
aliases: ["CVE-2026-99155"]
title: "Linux Xen SCSI frontend crashes guest on unpopulated backend response"
severity: "low"
cvss: null
epss: null
exploited: false
status: "open"
category: "other"
products: []
ecosystems: []
tags: ["guest-vm", "linux-kernel", "other", "xen"]
not_affected_if: ["no-xen-scsi-frontend"]
published_at: "2026-10-28T11:17:35+00:00"
first_seen_at: "2026-10-28T11:32:36+00:00"
updated_at: "2026-10-28T11:35:50+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-99155", "first_seen_at": "2026-10-28T11:32:36+00:00"}]
---

# Linux Xen SCSI frontend crashes guest on unpopulated backend response

The Xen SCSI frontend in the Linux kernel dereferences a NULL shadow entry when the backend sends a response whose request ID has no outstanding request. A malicious or buggy Xen backend can crash the guest kernel with this response.

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

## Timeline

- 2026-10-28T11:32:36+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-99155

## From the sources

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

scsi: xen/scsifront: Check for a NULL shadow entry on a backend response

scsifront_do_response() validates the rqid in a backend response against
VSCSIIF_MAX_REQS before using it to index info->shadow[], but then
dereferences the entry to test ->inflight without checking that the slot
is populated.  Shadow slots are NULL before a command is submitted (the
host private area is zeroed at allocation) and are reset to NULL in
_scsifront_put_rqid() once a request completes, so an in-range rqid that
does not correspond to an outstanding request makes the frontend
dereference a NULL pointer.

A malicious or buggy backend can thus crash the guest by returning a
response whose rqid is in range but not in flight -- for example a
spurious response before any command has been issued, or a duplicate of
one already completed.  The ring has only VSCSIIF_MAX_REQS (16) slots,
so before the first command every in-range rqid selects a NULL slot.

Reject a response whose shadow slot is not populated.

---

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