CVE-2026-74702 (GCVE-0-2026-74702)

Vulnerability from cvelistv5 – Published: 2026-08-22 15:33 – Updated: 2026-08-25 05:41
VLAI
Title
vhost-scsi: reject feature changes after endpoint
Summary
In the Linux kernel, the following vulnerability has been resolved: vhost-scsi: reject feature changes after endpoint vhost_scsi_setup_vq_cmds() runs from VHOST_SCSI_SET_ENDPOINT and allocates each command's protection scatterlist array (prot_sgl) according to the acknowledged VIRTIO_SCSI_F_T10_PI bit. The command pools are not rebuilt when VHOST_SET_FEATURES changes that bit later. Although virtio feature bits must not change after feature negotiation, vhost_scsi_set_features() currently accepts such a request after the endpoint is active and updates acked_features. Enabling T10-PI after endpoint setup therefore leaves prot_sgl NULL while the I/O path follows the new feature bit. For a 129-page protection payload, vhost_scsi_mapal() passes the missing first chunk to sg_alloc_table_chained(): sg_alloc_table_chained(table, 129, first_chunk=NULL, nents_first_chunk=inline_sg_cnt) sg_pool_index() then hits: BUG_ON(nents > SG_CHUNK_SIZE); /* 129 > 128 */ The kernel reported the following call trace and register state: Call Trace: <TASK> ? __sg_alloc_table+0x1d8/0x250 ? __pfx_vhost_run_work_list+0x10/0x10 [vhost] sg_alloc_table_chained+0x59/0xf0 ? __pfx_sg_pool_alloc+0x10/0x10 ? vhost_scsi_calc_sgls.constprop.0+0x43/0x60 [vhost_scsi] vhost_scsi_handle_vq+0xf02/0x1700 [vhost_scsi] ? __pfx_vhost_scsi_handle_vq+0x10/0x10 [vhost_scsi] vhost_scsi_handle_kick+0x37/0x50 [vhost_scsi] vhost_run_work_list+0x8e/0xd0 [vhost] vhost_task_fn+0xe1/0x210 ret_from_fork+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 VHOST_F_LOG_ALL is a vhost-specific runtime feature and remains the only exception. Reject changes to any feature other than VHOST_F_LOG_ALL 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.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: bf2d650391be508dd8b5e188b65ed32300cf3489 , < a06e4611d45518896fbff4f45d9581578b107e91 (git)
Affected: bf2d650391be508dd8b5e188b65ed32300cf3489 , < 9a3eb77a612f9d158e4d27df43677a014e9cfa55 (git)
Affected: bf2d650391be508dd8b5e188b65ed32300cf3489 , < 42bc45df5905e2b7dccb72adaf7730f66cfbe03f (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.15
Unaffected: 0 , < 6.15 (semver)
Unaffected: 6.18.45 , ≤ 6.18.* (semver)
Unaffected: 7.1.9 , ≤ 7.1.* (semver)
Unaffected: 7.2 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/vhost/scsi.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "a06e4611d45518896fbff4f45d9581578b107e91",
              "status": "affected",
              "version": "bf2d650391be508dd8b5e188b65ed32300cf3489",
              "versionType": "git"
            },
            {
              "lessThan": "9a3eb77a612f9d158e4d27df43677a014e9cfa55",
              "status": "affected",
              "version": "bf2d650391be508dd8b5e188b65ed32300cf3489",
              "versionType": "git"
            },
            {
              "lessThan": "42bc45df5905e2b7dccb72adaf7730f66cfbe03f",
              "status": "affected",
              "version": "bf2d650391be508dd8b5e188b65ed32300cf3489",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/vhost/scsi.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.15"
            },
            {
              "lessThan": "6.15",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.45",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.1.*",
              "status": "unaffected",
              "version": "7.1.9",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.2",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.45",
                  "versionStartIncluding": "6.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.1.9",
                  "versionStartIncluding": "6.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2",
                  "versionStartIncluding": "6.15",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nvhost-scsi: reject feature changes after endpoint\n\nvhost_scsi_setup_vq_cmds() runs from VHOST_SCSI_SET_ENDPOINT and allocates\neach command\u0027s protection scatterlist array (prot_sgl) according to the\nacknowledged VIRTIO_SCSI_F_T10_PI bit.  The command pools are not rebuilt\nwhen VHOST_SET_FEATURES changes that bit later.\n\nAlthough virtio feature bits must not change after feature negotiation,\nvhost_scsi_set_features() currently accepts such a request after the\nendpoint is active and updates acked_features.  Enabling T10-PI after\nendpoint setup therefore leaves prot_sgl NULL while the I/O path follows\nthe new feature bit.\n\nFor a 129-page protection payload, vhost_scsi_mapal() passes the missing\nfirst chunk to sg_alloc_table_chained():\n\n  sg_alloc_table_chained(table, 129, first_chunk=NULL,\n                         nents_first_chunk=inline_sg_cnt)\n\nsg_pool_index() then hits:\n\n  BUG_ON(nents \u003e SG_CHUNK_SIZE);   /* 129 \u003e 128 */\n\nThe kernel reported the following call trace and register state:\n\n  Call Trace:\n   \u003cTASK\u003e\n   ? __sg_alloc_table+0x1d8/0x250\n   ? __pfx_vhost_run_work_list+0x10/0x10 [vhost]\n   sg_alloc_table_chained+0x59/0xf0\n   ? __pfx_sg_pool_alloc+0x10/0x10\n   ? vhost_scsi_calc_sgls.constprop.0+0x43/0x60 [vhost_scsi]\n   vhost_scsi_handle_vq+0xf02/0x1700 [vhost_scsi]\n   ? __pfx_vhost_scsi_handle_vq+0x10/0x10 [vhost_scsi]\n   vhost_scsi_handle_kick+0x37/0x50 [vhost_scsi]\n   vhost_run_work_list+0x8e/0xd0 [vhost]\n   vhost_task_fn+0xe1/0x210\n   ret_from_fork+0x348/0x540\n   \u003c/TASK\u003e\n\n  RIP: 0010:0x4\n  CR2 = 0x4\n  RSP: 0018:ffffc90000dbf940 EFLAGS: 00010202\n  RAX: ffffffff82396810 RBX: ffff88811dc28b80 RCX: 0000000000000000\n  RDX: 0000000000000000 RSI: 0000000000000820 RDI: 0000000000000081\n\nVHOST_F_LOG_ALL is a vhost-specific runtime feature and remains the only\nexception.\n\nReject changes to any feature other than VHOST_F_LOG_ALL while the\nendpoint is active.  This preserves the existing runtime log toggle while\npreventing feature-dependent command resources and data-path state from\nbecoming inconsistent.  Userspace must clear the endpoint before changing\nany other negotiated feature and set the endpoint up again afterward."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 8.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - vhost-scsi is only reachable through virtio-scsi virtqueue kicks and VHOST_* ioctls on /dev/vhost-scsi by the VMM or a VM guest; it is not exposed via any network protocol or remote packet path.\nAC:L - Once VIRTIO_SCSI_F_T10_PI is toggled after VHOST_SCSI_SET_ENDPOINT, a virtio-scsi request with protection data spanning 129+ pages deterministically drives vhost_scsi_mapal() into sg_alloc_table_chained() with NULL prot_sgl and triggers BUG_ON(nents \u003e SG_CHUNK_SIZE); no races or victim-specific memory layout are required.\nPR:L - No host root or CAP_SYS_ADMIN is needed: an unprivileged cloud VM tenant can negotiate virtio-scsi T10-PI (QEMU propagates VHOST_SET_FEATURES) and submit the oversized PI I/O, and vhost ioctls have no capability gate for any process holding the vhost-scsi fd.\nUI:N - Exploitation requires only attacker-controlled virtio-scsi I/O and/or VMM feature updates during normal VM operation; no administrator or end-user action beyond routine VM use is needed.\nS:C - On KVM hosts using virtio-scsi with the vhost backend, a malicious guest reaches host-kernel vhost-scsi worker code and can panic the hypervisor, crossing the guest-to-host virtual machine security boundary.\nC:H - Enabling T10-PI after endpoint setup leaves prot_sgl NULL while the data path allocates and maps protection scatterlists from the shared sg pool; the reporter hit a fault at address 0x4, and smaller requests can complete with mismatched inline/pool metadata that corrupts kernel heap bookkeeping on free.\nI:H - Attacker-controlled protection iterators are mapped into kernel scatterlists passed to the LIO/TCM target stack under inconsistent feature state, yielding heap writes and unreliable sg_free_table_chained() teardown that can be leveraged for control-flow hijack beyond the immediate BUG_ON.\nA:H - The demonstrated path hits BUG_ON(nents \u003e SG_CHUNK_SIZE) in sg_pool_index() from the vhost worker during vhost_scsi_handle_vq(), producing a host kernel oops/panic that terminates the hypervisor and all co-resident VMs."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-25T05:41:45.057Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/a06e4611d45518896fbff4f45d9581578b107e91"
        },
        {
          "url": "https://git.kernel.org/stable/c/9a3eb77a612f9d158e4d27df43677a014e9cfa55"
        },
        {
          "url": "https://git.kernel.org/stable/c/42bc45df5905e2b7dccb72adaf7730f66cfbe03f"
        }
      ],
      "title": "vhost-scsi: reject feature changes after endpoint",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-74702",
    "datePublished": "2026-08-22T15:33:02.223Z",
    "dateReserved": "2026-08-15T05:44:03.927Z",
    "dateUpdated": "2026-08-25T05:41:45.057Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-74702",
      "date": "2026-09-01",
      "epss": "0.00127",
      "percentile": "0.02656"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-74702\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-08-22T16:16:44.873\",\"lastModified\":\"2026-08-25T06:18:54.117\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nvhost-scsi: reject feature changes after endpoint\\n\\nvhost_scsi_setup_vq_cmds() runs from VHOST_SCSI_SET_ENDPOINT and allocates\\neach command\u0027s protection scatterlist array (prot_sgl) according to the\\nacknowledged VIRTIO_SCSI_F_T10_PI bit.  The command pools are not rebuilt\\nwhen VHOST_SET_FEATURES changes that bit later.\\n\\nAlthough virtio feature bits must not change after feature negotiation,\\nvhost_scsi_set_features() currently accepts such a request after the\\nendpoint is active and updates acked_features.  Enabling T10-PI after\\nendpoint setup therefore leaves prot_sgl NULL while the I/O path follows\\nthe new feature bit.\\n\\nFor a 129-page protection payload, vhost_scsi_mapal() passes the missing\\nfirst chunk to sg_alloc_table_chained():\\n\\n  sg_alloc_table_chained(table, 129, first_chunk=NULL,\\n                         nents_first_chunk=inline_sg_cnt)\\n\\nsg_pool_index() then hits:\\n\\n  BUG_ON(nents \u003e SG_CHUNK_SIZE);   /* 129 \u003e 128 */\\n\\nThe kernel reported the following call trace and register state:\\n\\n  Call Trace:\\n   \u003cTASK\u003e\\n   ? __sg_alloc_table+0x1d8/0x250\\n   ? __pfx_vhost_run_work_list+0x10/0x10 [vhost]\\n   sg_alloc_table_chained+0x59/0xf0\\n   ? __pfx_sg_pool_alloc+0x10/0x10\\n   ? vhost_scsi_calc_sgls.constprop.0+0x43/0x60 [vhost_scsi]\\n   vhost_scsi_handle_vq+0xf02/0x1700 [vhost_scsi]\\n   ? __pfx_vhost_scsi_handle_vq+0x10/0x10 [vhost_scsi]\\n   vhost_scsi_handle_kick+0x37/0x50 [vhost_scsi]\\n   vhost_run_work_list+0x8e/0xd0 [vhost]\\n   vhost_task_fn+0xe1/0x210\\n   ret_from_fork+0x348/0x540\\n   \u003c/TASK\u003e\\n\\n  RIP: 0010:0x4\\n  CR2 = 0x4\\n  RSP: 0018:ffffc90000dbf940 EFLAGS: 00010202\\n  RAX: ffffffff82396810 RBX: ffff88811dc28b80 RCX: 0000000000000000\\n  RDX: 0000000000000000 RSI: 0000000000000820 RDI: 0000000000000081\\n\\nVHOST_F_LOG_ALL is a vhost-specific runtime feature and remains the only\\nexception.\\n\\nReject changes to any feature other than VHOST_F_LOG_ALL while the\\nendpoint is active.  This preserves the existing runtime log toggle while\\npreventing feature-dependent command resources and data-path state from\\nbecoming inconsistent.  Userspace must clear the endpoint before changing\\nany other negotiated feature and set the endpoint up again afterward.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"drivers/vhost/scsi.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"bf2d650391be508dd8b5e188b65ed32300cf3489\",\"lessThan\":\"a06e4611d45518896fbff4f45d9581578b107e91\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"bf2d650391be508dd8b5e188b65ed32300cf3489\",\"lessThan\":\"9a3eb77a612f9d158e4d27df43677a014e9cfa55\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"bf2d650391be508dd8b5e188b65ed32300cf3489\",\"lessThan\":\"42bc45df5905e2b7dccb72adaf7730f66cfbe03f\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"drivers/vhost/scsi.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"6.15\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.15\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.18.45\",\"lessThanOrEqual\":\"6.18.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.1.9\",\"lessThanOrEqual\":\"7.1.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.2\",\"lessThanOrEqual\":\"*\",\"versionType\":\"original_commit_for_fix\",\"status\":\"unaffected\"}]}]}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"type\":\"Secondary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H\",\"baseScore\":8.8,\"baseSeverity\":\"HIGH\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"CHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":2.0,\"impactScore\":6.0}]},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/42bc45df5905e2b7dccb72adaf7730f66cfbe03f\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/9a3eb77a612f9d158e4d27df43677a014e9cfa55\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/a06e4611d45518896fbff4f45d9581578b107e91\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}",
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-08-25T08:54:51+00:00",
      "cve": "CVE-2026-74702",
      "id": "CVE-2026-74702",
      "initial_release_date": "2026-08-22T00:00:00+00:00",
      "product_status:known_not_affected": "274",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: vhost-scsi: reject feature changes after endpoint",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-74702.json",
      "version": "3"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…

Loading…