<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://vulnerability.circl.lu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-09-29T15:17:13.619596+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@circl.lu</email>
  </author>
  <link href="https://vulnerability.circl.lu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/cve-2026-80789</id>
    <title>CVE-2026-80789 — nvmet-tcp: bound SGL data length before allocating command buffers</title>
    <updated>2026-09-29T15:17:15.165446+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> Linux</p>
<p>In the Linux kernel, the following vulnerability has been resolved:</p>
<p>nvmet-tcp: bound SGL data length before allocating command buffers</p>
<p>nvmet_tcp_map_data() reads the host-controlled 32-bit sgl-&gt;length
and, for the in-capsule offset descriptor (type 0x01), checks it
against port-&gt;inline_data_size before use. Any other SGL descriptor
type -- including the non-inline transport SGL data-block descriptor
(type (NVME_TRANSPORT_SGL_DATA_DESC &lt;&lt; 4) | NVME_SGL_FMT_TRANSPORT_A,
the type a real host uses for out-of-capsule writes) skips that check
entirely and falls straight through to:</p>
<p>cmd-&gt;req.sg = sgl_alloc(len, GFP_KERNEL, &amp;cmd-&gt;req.sg_cnt);</p>
<p>with len taken directly from the wire, unbounded up to 4 GiB.</p>
<p>nvmet_req_init() only parses the command and never inspects
sgl-&gt;length, and nvmet_check_transfer_len() -- the only other place
transfer_len is validated -- runs later, from req-&gt;execute(), after
the allocation has already happened. For a write command the target
responds with an R2T and parks the command waiting for the host to
send the data; if the host (or an unauthenticated peer that simply
never follows up) never does, the sgl_alloc() buffer stays resident
for the life of the command. NVMe/TCP has no mandatory authentication
in the default configuration, so any peer able to reach the target
portal and complete a Fabrics connect can drive this with a single
crafted command, repeatable across queues and connections for
amplification. This is unbounded kernel memory allocatio…</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/cve-2026-80789"/>
  </entry>
</feed>
