CVE-2026-72129 PUBLISHED

nvmet-rdma: handle inline data with a nonzero offset

Assigner: Linux
Reserved: 09.08.2026 Published: 15.08.2026 Updated: 17.08.2026

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

nvmet-rdma: handle inline data with a nonzero offset

nvmet_rdma_use_inline_sg() maps the host-controlled inline data offset into the per-command inline scatterlist. The bounds check admits any offset with off + len <= inline_data_size, but the mapping still assumes the data begins in the first inline page:

<pre>sg->offset = off; sg->length = min_t(int, len, PAGE_SIZE - off); </pre>

When a port is configured with inline_data_size > PAGE_SIZE (settable up to max(SZ_16K, PAGE_SIZE)), an offset in (PAGE_SIZE, inline_data_size] makes "PAGE_SIZE - off" underflow, so sg->length is set to ~4 GiB and the block backend reads far past the first inline page. num_pages(len) also ignores the offset, so an in-bounds offset whose [off, off+len) span crosses a page boundary under-counts the scatterlist.

Map the offset properly: split it into a page index and an in-page offset, start the scatterlist at that page, and size the page count from page_off + len. Because the request scatterlist may now start at inline_sg[page_idx] rather than inline_sg[0], generalize the inline-SGL identity test in nvmet_rdma_release_rsp() to a range test; otherwise the persistent inline scatterlist is mistaken for an allocated one and nvmet_req_free_sgls() frees an inline page (and warns in free_large_kmalloc()).

Metrics

CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS Score: 9.8

AV:N - nvmet-rdma is an in-kernel NVMe-oF target that processes NVMe commands and inline data from remote initiators over RDMA (RoCE/IB) via RDMA RECV completions, placing it in the same network-reachable class as nvmet-tcp and other remote fabric targets. AC:L - In deployments using inline_data_size above PAGE_SIZE (up to 16KB), a remote initiator fully controls the inline SGL offset and length in write commands and can deterministically trigger the integer underflow and multi-gigabyte scatterlist length without races or victim-specific timing. PR:N - Exploitation requires only remote NVMe-oF RDMA connectivity to a configured target subsystem; no local UNIX privileges or Linux capabilities on the victim host are needed, and the vulnerable recv/command path is reachable before or without mandatory DH-HMAC-CHAP on I/O queues. UI:N - Triggering the bug requires only sending crafted NVMe write commands with malicious inline SGL offsets over an established RDMA connection; no end-user actions such as mounting filesystems or opening files are required. S:U - The vulnerability corrupts kernel heap memory and backing storage on the NVMe target host itself; it does not cross a VM, container, or IOMMU security boundary to impact a separate security authority. C:H - The integer underflow sets scatterlist entries to ~4 GiB, causing the block backend to read far beyond the inline DMA buffer pages into adjacent kernel memory, and the erroneous sgl_free of inline pages creates use-after-free conditions enabling further information disclosure. I:H - Out-of-bounds kernel memory is incorporated into block write bios corrupting exported backing storage, and the erroneous freeing of inline scatterlist pages enables heap corruption primitives that can be leveraged for arbitrary memory writes or control-flow hijacking. A:H - Out-of-bounds access from multi-gigabyte scatterlist lengths, warnings from free_large_kmalloc() on freed inline pages, and nvmet fatal error handling can cause kernel oops, hung I/O, or panic on the storage target.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from 0d5ee2b2ab4f6776c361bc975c2323bc8b5cf349 to c2106ba1b14d644a5203bea1a50dbe25dcad713c (excl.)
  • affected from 0d5ee2b2ab4f6776c361bc975c2323bc8b5cf349 to bf8bcc1c137d54a62a428b00051fdbb13660673b (excl.)
  • affected from 0d5ee2b2ab4f6776c361bc975c2323bc8b5cf349 to 11401371152b228448a41d79c6de1c938f93049a (excl.)
  • affected from 0d5ee2b2ab4f6776c361bc975c2323bc8b5cf349 to 7c96581169c9d9a7d0726e554313acfbead6141c (excl.)
  • affected from 0d5ee2b2ab4f6776c361bc975c2323bc8b5cf349 to 42a8ea3acd883f4f210d9e54e0975b1e2292b529 (excl.)
  • affected from 0d5ee2b2ab4f6776c361bc975c2323bc8b5cf349 to 2944113ad5fbcdf5d349d857c03d2a44b6de75b8 (excl.)
  • affected from 0d5ee2b2ab4f6776c361bc975c2323bc8b5cf349 to 98bcdfa619150b2f41fa15bac140dbaf2584ad05 (excl.)
  • affected from 0d5ee2b2ab4f6776c361bc975c2323bc8b5cf349 to 48c0162f647bb47e6084ffbc71b8f213f5e2f4f8 (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 4.19 is affected
  • unaffected from 0 to 4.19 (excl.)
  • unaffected from 5.10.261 to 5.10.* (incl.)
  • unaffected from 5.15.212 to 5.15.* (incl.)
  • unaffected from 6.1.178 to 6.1.* (incl.)
  • unaffected from 6.6.145 to 6.6.* (incl.)
  • unaffected from 6.12.97 to 6.12.* (incl.)
  • unaffected from 6.18.40 to 6.18.* (incl.)
  • unaffected from 7.1.5 to 7.1.* (incl.)
  • unaffected from 7.2 to * (incl.)

References