CVE-2026-74702: vhost-scsi: reject feature changes after endpoint

Published Aug 22, 2026
·
Updated

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

vhost-scsi: reject feature changes after endpoint

vhostscsisetupvqcmds() runs from VHOSTSCSISETENDPOINT and allocates each command's protection scatterlist array (protsgl) according to the acknowledged VIRTIOSCSIFT10PI bit. The command pools are not rebuilt when VHOSTSETFEATURES changes that bit later.

Although virtio feature bits must not change after feature negotiation, vhostscsisetfeatures() currently accepts such a request after the endpoint is active and updates ackedfeatures. Enabling T10-PI after endpoint setup therefore leaves protsgl NULL while the I/O path follows the new feature bit.

For a 129-page protection payload, vhostscsimapal() passes the missing first chunk to sgalloctablechained():

sgalloctablechained(table, 129, firstchunk=NULL, nentsfirstchunk=inlinesgcnt)

sgpoolindex() then hits:

BUGON(nents > SGCHUNKSIZE); / 129 > 128 /

The kernel reported the following call trace and register state:

Call Trace: <TASK> ? sgalloctable+0x1d8/0x250 ? pfxvhostrunworklist+0x10/0x10 [vhost] sgalloctablechained+0x59/0xf0 ? pfxsgpoolalloc+0x10/0x10 ? vhostscsicalcsgls.constprop.0+0x43/0x60 [vhostscsi] vhostscsihandlevq+0xf02/0x1700 [vhostscsi] ? pfxvhostscsihandlevq+0x10/0x10 [vhostscsi] vhostscsihandlekick+0x37/0x50 [vhostscsi] vhostrunworklist+0x8e/0xd0 [vhost] vhosttaskfn+0xe1/0x210 retfromfork+0x348/0x540 </TASK>

RIP: 0010:0x4 CR2 = 0x4 RSP: 0018:ffffc90000dbf940 EFLAGS: 00010202 RAX: ffffffff82396810 RBX: ffff88811dc28b80 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000820 RDI: 0000000000000081

VHOSTFLOGALL is a vhost-specific runtime feature and remains the only exception.

Reject changes to any feature other than VHOSTFLOGALL while the endpoint is active. This preserves the existing runtime log toggle while preventing feature-dependent command resources and data-path state from becoming inconsistent. Userspace must clear the endpoint before changing any other negotiated feature and set the endpoint up again afterward.

Affected Software

129 affected componentsFixes available
Linux Linux kernel
ubuntu/linux-hwe-edge*
ubuntu/linux-aws-5.0*
ubuntu/linux-aws-5.3*
ubuntu/linux-azure*
ubuntu/linux-azure-5.3*
ubuntu/linux-azure-edge*
ubuntu/linux-gcp*
ubuntu/linux-gcp-5.3*
ubuntu/linux-gke-4.15*
ubuntu/linux-gke-5.4*
ubuntu/linux-gkeop-5.4*
ubuntu/linux-hwe*
ubuntu/linux-hwe-edge*
ubuntu/linux-oem*
ubuntu/linux-oracle-5.0*
ubuntu/linux-oracle-5.3*
ubuntu/linux-aws-5.11*
ubuntu/linux-aws-5.13*
ubuntu/linux-aws-5.8*
ubuntu/linux-azure-5.11*
ubuntu/linux-azure-5.13*
ubuntu/linux-azure-5.8*
ubuntu/linux-azure-fde*
ubuntu/linux-gcp-5.11*
ubuntu/linux-gcp-5.13*
ubuntu/linux-gcp-5.8*
ubuntu/linux-gke*
ubuntu/linux-gke-5.15*
ubuntu/linux-gkeop*
ubuntu/linux-gkeop-5.15*
ubuntu/linux-hwe-5.11*
ubuntu/linux-hwe-5.13*
ubuntu/linux-hwe-5.8*
ubuntu/linux-intel-5.13*
ubuntu/linux-oem-5.10*
ubuntu/linux-oem-5.13*
ubuntu/linux-oem-5.6*
ubuntu/linux-oracle-5.11*
ubuntu/linux-oracle-5.13*
ubuntu/linux-oracle-5.8*
ubuntu/linux-raspi2*
ubuntu/linux-riscv*
ubuntu/linux-riscv-5.11*
ubuntu/linux-riscv-5.8*
ubuntu/linux-allwinner-5.19*
ubuntu/linux-aws-5.19*
ubuntu/linux-aws-6.2*
ubuntu/linux-aws-6.5*
ubuntu/linux-azure-5.19*
ubuntu/linux-azure-6.2*
ubuntu/linux-azure-6.5*
ubuntu/linux-azure-fde-5.19*
ubuntu/linux-azure-fde-6.2*
ubuntu/linux-gcp-5.19*
ubuntu/linux-gcp-6.2*
ubuntu/linux-gcp-6.5*
ubuntu/linux-hwe-5.19*
ubuntu/linux-hwe-6.2*
ubuntu/linux-hwe-6.5*
ubuntu/linux-intel-iot-realtime*
ubuntu/linux-lowlatency-hwe-5.19*
ubuntu/linux-lowlatency-hwe-6.2*
ubuntu/linux-lowlatency-hwe-6.5*
ubuntu/linux-nvidia-6.2*
ubuntu/linux-nvidia-6.5*
ubuntu/linux-oem-5.17*
ubuntu/linux-oem-6.0*
ubuntu/linux-oem-6.1*
ubuntu/linux-oem-6.5*
ubuntu/linux-oracle-6.5*
ubuntu/linux-realtime*
ubuntu/linux-riscv*
ubuntu/linux-riscv-5.19*
ubuntu/linux-riscv-6.5*
ubuntu/linux-starfive-5.19*
ubuntu/linux-starfive-6.2*
ubuntu/linux-starfive-6.5*
ubuntu/linux-aws-6.14*
ubuntu/linux-aws-6.17*
ubuntu/linux-aws-7.0*
ubuntu/linux-azure-6.11*
ubuntu/linux-azure-6.14*
ubuntu/linux-azure-6.17*
ubuntu/linux-azure-7.0*
ubuntu/linux-azure-fde-6.14*
ubuntu/linux-azure-fde-6.17*
ubuntu/linux-azure-fde-7.0*
ubuntu/linux-azure-nvidia-6.14*
ubuntu/linux-gcp-6.11*
ubuntu/linux-gcp-6.14*
ubuntu/linux-gcp-7.0*
ubuntu/linux-hwe-6.11*
ubuntu/linux-hwe-6.14*
ubuntu/linux-hwe-6.17*
ubuntu/linux-hwe-7.0<7.0.0-42.42~24.04.1
7.0.0-42.42~24.04.1
ubuntu/linux-lowlatency-hwe-6.11*
ubuntu/linux-nvidia-6.11*
ubuntu/linux-nvidia-6.17*
ubuntu/linux-nvidia-7.0*
ubuntu/linux-oem-6.11*
ubuntu/linux-oem-6.14*
ubuntu/linux-oem-6.17*
ubuntu/linux-oem-6.8*
ubuntu/linux-oracle-6.14*
ubuntu/linux-oracle-6.17*
ubuntu/linux-oracle-7.0*
ubuntu/linux-raspi-realtime*
ubuntu/linux-realtime*
ubuntu/linux-riscv*
ubuntu/linux-riscv-6.14*
ubuntu/linux-riscv-6.17*
ubuntu/linux-riscv-7.0<7.0.0-42.42.1~24.04.1
7.0.0-42.42.1~24.04.1
ubuntu/linux-realtime-6.14*
ubuntu/linux-realtime-6.17*
ubuntu/linux<7.0.0-42.42
7.0.0-42.42
ubuntu/linux-aws<7.0.0-1016.17
7.0.0-1016.17
ubuntu/linux-azure*
ubuntu/linux-azure-fde*
ubuntu/linux-gcp<7.0.0-1016.18
7.0.0-1016.18
ubuntu/linux-gke*
ubuntu/linux-ibm<7.0.0-1017.17
7.0.0-1017.17
ubuntu/linux-nvidia*
ubuntu/linux-nvidia-bos*
ubuntu/linux-oem-7.0<7.0.0-1017.17
7.0.0-1017.17
ubuntu/linux-oracle<7.0.0-1015.16
7.0.0-1015.16
ubuntu/linux-raspi*
ubuntu/linux-realtime*
ubuntu/linux-riscv<7.0.0-42.42.1
7.0.0-42.42.1

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade ubuntu/linux-hwe-7.0 to a version that resolves this vulnerability.

    Fixed in 7.0.0-42.42~24.04.1
  2. Upgrade

    Upgrade ubuntu/linux-riscv-7.0 to a version that resolves this vulnerability.

    Fixed in 7.0.0-42.42.1~24.04.1
  3. Upgrade

    Upgrade ubuntu/linux to a version that resolves this vulnerability.

    Fixed in 7.0.0-42.42
  4. Upgrade

    Upgrade ubuntu/linux-aws to a version that resolves this vulnerability.

    Fixed in 7.0.0-1016.17
  5. Upgrade

    Upgrade ubuntu/linux-gcp to a version that resolves this vulnerability.

    Fixed in 7.0.0-1016.18
  6. Upgrade

    Upgrade ubuntu/linux-ibm to a version that resolves this vulnerability.

    Fixed in 7.0.0-1017.17
  7. Upgrade

    Upgrade ubuntu/linux-oem-7.0 to a version that resolves this vulnerability.

    Fixed in 7.0.0-1017.17
  8. Upgrade

    Upgrade ubuntu/linux-oracle to a version that resolves this vulnerability.

    Fixed in 7.0.0-1015.16
  9. Upgrade

    Upgrade ubuntu/linux-riscv to a version that resolves this vulnerability.

    Fixed in 7.0.0-42.42.1
  10. Operational

    Clear the vhost-scsi endpoint before changing any negotiated feature other than VHOST_F_LOG_ALL, then set the endpoint up again afterward; VHOST_F_LOG_ALL remains the only feature that may change while the endpoint is active.

Event History

Aug 22, 2026
CVE Published
via MITRE·03:33 PM
Data Sourced
via MITRE·03:33 PM
DescriptionSeverity
Data Sourced
via OSV·04:16 PM
DescriptionSeverityAffected Software
Data Sourced
via NVD·04:16 PM
DescriptionSeverity

Frequently Asked Questions

1

What sequence is required to trigger the failure?

A vhost-scsi endpoint must already be active, then VHOST_SET_FEATURES must enable the acknowledged VIRTIO_SCSI_F_T10_PI feature bit. Subsequent I/O with a 129-page protection payload can reach the invalid scatterlist allocation path.

2

Who can cause the problematic state?

The condition requires an entity able to issue VHOST_SET_FEATURES after endpoint setup and enable VIRTIO_SCSI_F_T10_PI. The affected I/O path is reached only after that post-setup feature change.

3

What can be done before applying the fix?

Do not change the T10-PI feature bit after configuring a vhost-scsi endpoint. Complete feature negotiation before endpoint setup and avoid enabling T10-PI on an already active endpoint.

4

How can operators recognize that this issue has occurred?

The kernel can hit BUG_ON(nents > SG_CHUNK_SIZE) when allocating a chained scatterlist, with 129 entries exceeding the 128-entry chunk size. The reported call trace includes sg_alloc_table_chained(), sg_pool_index(), and the vhost-scsi I/O mapping path.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203