{
  "schema_version": "1.6.1",
  "id": "RPI-CVE-2026-90228",
  "modified": "2026-10-09T11:39:44Z",
  "upstream": [
    "CVE-2026-90228"
  ],
  "published": "2026-09-17T16:10:40Z",
  "summary": "nvmet: fix NULL pointer dereference in nvmet_execute_identify_ns_zns()",
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\nnvmet: fix NULL pointer dereference in nvmet_execute_identify_ns_zns()\n\nWhen a host issues an Identify command with CNS 05h (I/O Command Set\nspecific Identify Namespace) and CSI 02h (ZNS) targeting a file-backed\nnamespace, nvmet_execute_identify_ns_zns() calls bdev_is_zoned() on\nreq->ns->bdev. A file-backed namespace has no block device, so\nreq->ns->bdev is NULL and bdev_is_zoned() dereferences it, oopsing.\n\nThe I/O command set is selected by the host-supplied CSI field and the\ncommand is routed here whenever CONFIG_BLK_DEV_ZONED is enabled,\nindependent of the namespace backing type, so any file-backed namespace\nis exposed.\n\nReject the command with Invalid Field when the namespace is not backed\nby a block device.",
  "severity": [
    {
      "type": "CVSS_V3",
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
    }
  ],
  "affected": [
    {
      "package": {
        "ecosystem": "Raspberry Pi OS:12",
        "name": "linux"
      },
      "versions": [
        "1:6.1.47-1+rpt4"
      ],
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-2712",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v6",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v7",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v7l",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v8",
            "binary_version": "1:6.1.47-1+rpt4"
          }
        ]
      },
      "database_specific": {
        "per_version": {
          "1:6.1.47-1+rpt4": {
            "linux_commit": "655fc658a15ae7a6f37103754adb39ba52a9a14e",
            "upstream_version": "6.1.47",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.1.188",
            "compiled_filter": false
          }
        }
      }
    }
  ],
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://www.cve.org/CVERecord?id=CVE-2026-90228"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/1ce8faf90eb0bf5599b90db38500aefea9426485"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/b873099944dae5702b4b6db6814d1f1e8d4cfb00"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/ff28a93a895912010a7827a0e1445ebe8be53b4d"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/cc29f7082b7ab5e0337f27d1fef16359f05fcffa"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/1fb1236312ee1a600de6b3ca560f0b3fd5a50471"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/0b4cf43f9ca7118590a338de900edbd6047cd89f"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/f594863967d87b7fcbff6e724d51135fd701a13d"
    }
  ],
  "database_specific": {
    "source": "https://git.kernel.org/pub/scm/linux/security/vulns.git",
    "upstream_modified": "2026-09-18T17:55:42Z",
    "severity": {
      "source": "kernel CNA",
      "cvss_v3_score": 7.5,
      "cvss_v3_severity": "High",
      "scenario": "AV:N - The host-controlled Identify capsule (opcode nvme_admin_identify) carries CNS 05h (NVME_ID_CNS_CS_NS) and CSI 02h (NVME_CSI_ZNS); nvmet-tcp receives that CapsuleCmd in nvmet_tcp_done_recv_pdu() after kernel_accept() and dispatches via nvmet_parse_admin_cmd()/nvmet_execute_identify() into nvmet_execute_identify_ns_zns().\nAC:L - The attacker sets identify.cns and identify.csi on Identify for any enabled file-backed NSID; nvmet_execute_identify() routes CSI=ZNS to nvmet_execute_identify_ns_zns() whenever CONFIG_BLK_DEV_ZONED is built in, then bdev_is_zoned(req->ns->bdev) hits NULL with no race or layout dependency.\nPR:N - nvmet_check_ctrl_status() after Connect/CC.EN only enforces DH-HMAC-CHAP when a host_key exists; nvmet_check_auth_status() otherwise returns true, nvmet_host_allowed() treats host NQN as an asserted identifier, and allow_any_host subsystems accept any initiator with no Linux credentials.\nUI:N - The remote initiator itself sends Connect, Property Set of CC.EN, then the crafted Identify; no local user must mount a device, open a file, or otherwise interact.\nS:U - The oops occurs in the target kernel's nvmet-tcp worker while executing nvmet_execute_identify_ns_zns() and stays in that host's kernel authority; it is not a VM escape or IOMMU/sandbox boundary bypass.\nC:N - bdev_is_zoned() only loads bdev->bd_queue through the NULL ns->bdev of a file-backed namespace; nvmet_execute_identify_ns_zns() crashes before nvmet_copy_to_sgl() of the identify buffer, so no kernel data is returned.\nI:N - The fault is a NULL read in bdev_get_queue() via bdev_is_zoned(); no kernel object is overwritten and a pure NULL dereference does not yield a write or control-flow primitive.\nA:H - Calling bdev_is_zoned(req->ns->bdev) with a NULL file-backed bdev in nvmet_execute_identify_ns_zns() oopses the kernel, crashing the NVMe target."
    }
  }
}
