KernelScan.io

HIGH Introduced in 5.0

nvmet-tcp SglAlloc Panic

CVE-2026-80788

CVSS 7.5 / 10.0 KernelScan AI

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

01

In the Linux kernel, the following vulnerability has been resolved: nvmet-tcp: Do not WARN on remotely-controlled oversized SGL allocations When fuzzing the nvme target code, I tripped a kernel warning in nvmet_tcp_map_data() because the length passed into the allocator is controlled by the remote initiator. A remote initiator that sends a command with an SGL claiming a huge number, can create a scatterlist and iovec allocation of over 1 million entries, which causes the backing kmalloc call to exceed MAX_PAGE_ORDER and then the page allocator will trip on a WARN_ON_ONCE_GFP() message: WARNING: mm/page_alloc.c:5280 __alloc_frozen_pages_noprof Workqueue: nvmet_tcp_wq nvmet_tcp_io_work ... sgl_alloc_order nvmet_tcp_map_data nvmet_tcp_try_recv_pdu As it's never good to trip a kernel warning remotely due to many systems having panic-on-warn enabled, let's silence it by just add GFP_NOWARN to the allocation flags.

02

Engine v0.6.0

Risk summary

A remote, unauthenticated attacker who can reach an NVMe-oF TCP target can send a command with an oversized scatter-gather list that triggers a kernel warning in the page allocator. On systems with panic_on_warn enabled, this causes a kernel panic, resulting in a complete denial of service. Any host running the NVMe-oF TCP target with network exposure is at risk.

Affecteddrivers/nvme/target/tcp.c (nvmet-tcp)

Vulnerability analysis

When the NVMe storage target receives a command over TCP, it allocates memory based on the size claimed by the remote sender. A malicious sender can claim an enormous size, causing the kernel to attempt an allocation so large that it triggers an internal warning. On systems configured to treat warnings as fatal, this causes an immediate crash. The fix changes the allocation behavior so that oversized requests fail silently instead of triggering a warning, allowing the existing error handling to reject the command cleanly. Any network client that can reach the target port can trigger this; no authentication or special privileges are required.

03

BranchIntroducedFixed inPatch commit
5.155.05.15.2187b6a54d4e7b0
6.185.06.18.479c95f7e66c62
7.25.07.2.19b770e40bc00
mainline5.07.3-rc1737a3b535247
7.15.07.1.117fd6da0f2893
6.65.06.6.15486cc45002247
5.105.05.10.2678d01f0d0e964
6.125.06.12.106c509f20be1ca
6.15.06.1.185e7077e6c4542
cip/5.105.05.10.268-cip778d01f0d0e964
cip/5.10-rt5.05.10.268-cip77-rt348d01f0d0e964
cip/6.15.06.1.187-cip60e7077e6c4542
cip/6.125.06.12.108-cip31c509f20be1ca