CVE Database›Document archive›CVE-2026-22998

CVE-2026-22998

kernel: nvme-tcp: fix NULL pointer dereferences in nvmet_tcp_build_pdu_iovec

Loading…

Severity

Moderate

Red Hat Product Security

6.4

CVSS 3.1

Review impact separately from score.

Published · January 25, 2026

Updated · July 12, 2026

Description

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

nvme-tcp: fix NULL pointer dereferences in nvmet_tcp_build_pdu_iovec

Commit efa56305908b ("nvmet-tcp: Fix a kernel panic when host sends an invalid H2C PDU length") added ttag bounds checking and data_offset validation in nvmet_tcp_handle_h2c_data_pdu(), but it did not validate whether the command's data structures (cmd->req.sg and cmd->iov) have been properly initialized before processing H2C_DATA PDUs.

The nvmet_tcp_build_pdu_iovec() function dereferences these pointers without NULL checks. This can be triggered by sending H2C_DATA PDU immediately after the ICREQ/ICRESP handshake, before sending a CONNECT command or NVMe write command.

Attack vectors that trigger NULL pointer dereferences:

  1. H2C_DATA PDU sent before CONNECT → both pointers NULL
  2. H2C_DATA PDU for READ command → cmd->req.sg allocated, cmd->iov NULL
  3. H2C_DATA PDU for uninitialized command slot → both pointers NULL

The fix validates both cmd->req.sg and cmd->iov before calling nvmet_tcp_build_pdu_iovec(). Both checks are required because:

  • Uninitialized commands: both NULL
  • READ commands: cmd->req.sg allocated, cmd->iov NULL
  • WRITE commands: both allocated

Statement

A NULL-pointer dereference in the NVMe/TCP target path occurs because nvmet_tcp_build_pdu_iovec() can be called when cmd.req.sg and/or cmd.iov are not initialized. A remote host can trigger this by sending an out-of-order H2C_DATA PDU immediately after the ICREQ/ICRESP handshake (e.g., before CONNECT), causing a kernel crash (DoS). Privileges are typically not required beyond network reachability to the NVMe/TCP target. NVMe/TCP targets are typically deployed inside isolated storage or data-center networks and are not exposed to the public Internet. In practice, exploitation usually requires access to a local or trusted internal network where NVMe/TCP is used for remote memory or storage access over TCP.

CVSS score applicability

The CVSS score(s) listed for this vulnerability do not reflect the associated product's status, and are included for informational purposes to better understand the severity of this vulnerability.

Mitigation

To mitigate this issue, prevent module nvmet-tcp from being loaded. Please see https://access.redhat.com/solutions/41278 for how to blacklist a kernel module to prevent it from loading automatically. By default it is disabled in Red Hat Enterprise Linux and only root user can enable it.

CVSS / CWE

CVSS 3.1 · 6.4
CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:H

CWE-476 · NULL Pointer Dereference