Skip to main content

Linux Kernel CVE-2026-63888

| EUVDEUVD-2026-45661 CRITICAL
2026-07-19 Linux GHSA-ww53-m8wh-v825
9.8
CVSS 3.1 · Vendor: Linux
Share

Severity by source

Vendor (Linux) PRIMARY
9.8 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
vuln.today AI
7.1 HIGH

Network-reachable but requires an iSCSI session to an exported target (PR:L); over-read does not leak to attacker (C:N), impact is a remote kernel crash/slab corruption (A:H, I:L).

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:H/SC:N/SI:N/SA:N
SUSE
7.1 HIGH
AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:H/A:H
Red Hat
7.0 HIGH
qualitative

Primary rating from Vendor (Linux).

CVSS VectorVendor: Linux

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

5
Analysis Generated
Jul 20, 2026 - 16:10 vuln.today
CVSS changed
Jul 20, 2026 - 15:22 NVD
9.8 (CRITICAL)
Patch available
Jul 19, 2026 - 17:19 EUVD
CVE Published
Jul 19, 2026 - 14:55 cve.org
CRITICAL 9.8
CVE Published
Jul 19, 2026 - 14:55 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

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

scsi: target: iscsi: Fix CRC overread and double-free in iscsit_handle_text_cmd()

Two latent bugs in the Text-phase handler, both present since the original LIO integration in commit e48354ce078c ("iscsi-target: Add iSCSI fabric support for target v4.1"):

  1. DataDigest CRC buffer overread (4 bytes past text_in).

text_in is kzalloc()'d at ALIGN(payload_length, 4). rx_size is then incremented by ISCSI_CRC_LEN to make room for the received DataDigest in the iovec, but the same (now-bumped) rx_size is passed as the buffer length to iscsit_crc_buf():

if (conn->conn_ops->DataDigest) { ... rx_size += ISCSI_CRC_LEN; } ... if (conn->conn_ops->DataDigest) { data_crc = iscsit_crc_buf(text_in, rx_size, 0, NULL);

iscsit_crc_buf() walks rx_size bytes of text_in with crc32c(), so when DataDigest is negotiated it reads 4 bytes past the end of the text_in allocation. KASAN reproduces this directly on the unpatched mainline tree as slab-out-of-bounds in crc32c() called from the Text PDU path. The OOB bytes feed crc32c() and are then compared against the initiator-supplied checksum, so the value does not flow back to the attacker, but the kernel does read past the buffer on every Text PDU with DataDigest=CRC32C.

Fix by passing the actual padded payload length (ALIGN(payload_length, 4)) that was used for the kzalloc().

  1. Stale cmd->text_in_ptr re-free (double-free) on ERL>0 bad DataDigest

drop.

On DataDigest mismatch with ErrorRecoveryLevel > 0 the handler silently drops the PDU and lets the initiator plug the CmdSN gap:

kfree(text_in); return 0;

cmd->text_in_ptr still points at the freed buffer. The next Text Request on the same ITT re-enters iscsit_setup_text_cmd(), which unconditionally does

kfree(cmd->text_in_ptr); cmd->text_in_ptr = NULL;

freeing the same pointer a second time. Session teardown via iscsit_release_cmd() has the same shape and hits the same double-free if the connection is dropped before a second Text Request arrives.

On an unmodified mainline tree the bug-1 CRC overread fires first on the initial valid Text Request and perturbs the subsequent state, so #4 was isolated by building a kernel with only the bug-1 hunk of this patch applied plus temporary printk() observability around the three relevant kfree() sites. The observability prints are not part of this patch. On that build, a three-PDU Text Request sequence after login produces two back-to-back splats:

BUG: KASAN: double-free in iscsit_setup_text_cmd+0x?? BUG: KASAN: double-free in iscsit_release_cmd+0x??

showing the same pointer freed in the ERL>0 drop path and again in iscsit_setup_text_cmd() (next Text Request on the same ITT) and once more in iscsit_release_cmd() (session teardown). On distro kernels with CONFIG_SLAB_FREELIST_HARDENED=y (default) the double-free becomes a remote kernel BUG(); on non-hardened kernels it corrupts the slab freelist.

Fix by clearing cmd->text_in_ptr after the kfree() in the ERL>0 drop path. With both hunks applied #4 is directly observable on the stock tree without observability printks; fixing bug-1 alone would mask #4 less, not more, so the hunks are submitted together.

Both fixes are one-liners. The Text PDU state machine is unchanged and the wire protocol is unaffected.

AnalysisAI

Remote denial-of-service and slab corruption in the Linux kernel iSCSI target (LIO) subsystem affects the Text-phase command handler iscsit_handle_text_cmd(), where two latent bugs have existed since the original LIO integration (commit e48354ce078c). A CRC32C overread reads four bytes past a kzalloc'd buffer on every Text PDU when DataDigest=CRC32C is negotiated, and a stale cmd->text_in_ptr causes a double-free on ErrorRecoveryLevel>0 bad-DataDigest drops and at session teardown. On distro kernels built with CONFIG_SLAB_FREELIST_HARDENED=y (the default) the double-free becomes a remote kernel BUG(); on non-hardened builds it corrupts the slab freelist. No public exploit identified at time of analysis, though the flaw is directly reproducible under KASAN; not listed in CISA KEV and EPSS is low (0.22%).

Technical ContextAI

The affected component is the Linux LIO in-kernel SCSI target framework, specifically its iSCSI fabric module (drivers/target/iscsi) which serves storage over the iSCSI protocol (RFC 7143) on TCP. During the iSCSI Text negotiation phase, iscsit_handle_text_cmd() allocates text_in via kzalloc() sized to ALIGN(payload_length, 4). Bug 1 is a classic buffer over-read (CWE-125): rx_size is bumped by ISCSI_CRC_LEN to make iovec room for the received DataDigest, but the same inflated rx_size is then passed as the buffer length to iscsit_crc_buf(), so crc32c() walks four bytes past the allocation. Bug 2 is a double-free / use-of-freed-pointer (CWE-415): after kfree(text_in) on the ERL>0 mismatch drop path, cmd->text_in_ptr is left dangling, so the next Text Request on the same ITT (via iscsit_setup_text_cmd()) and/or session teardown (iscsit_release_cmd()) free the same pointer again. The input lists CWE as N/A; the root-cause classes (out-of-bounds read and double-free) are inferred from the description.

RemediationAI

Vendor-released patch: update to a fixed stable kernel - 5.10.259, 5.15.210, 6.1.176, 6.6.143, 6.12.93, 6.18.35, 7.0.12, or 7.1 (or later on your series) - via your distribution's kernel update, then reboot; both fixes are one-line changes (pass ALIGN(payload_length,4) as the CRC length, and clear cmd->text_in_ptr after the ERL>0 kfree). Reference the upstream fix commits at https://git.kernel.org/stable/c/f7948af0dd03de84079dcd4dc215a69fd6fbb95d and the advisory at https://nvd.nist.gov/vuln/detail/CVE-2026-63888. Where immediate patching is not possible, reduce exposure by restricting network reachability of the iSCSI target port (TCP 3260) to trusted initiator subnets via firewall, and by enforcing CHAP authentication and per-initiator ACLs on the target (avoid demo-mode/generate_node_acls that permit unauthenticated logins) - trade-off: this blocks unknown initiators but does not stop an already-authorized malicious or compromised initiator. Disabling DataDigest negotiation prevents bug 1 but not the ERL>0 double-free and is initiator-controllable, so it is not a reliable control; on hosts that do not need to serve iSCSI storage, unload/blacklist the iscsi_target_mod module to remove the attack surface entirely (side effect: no iSCSI target service).

Vendor StatusVendor

SUSE

Severity: Important
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 16.0 Affected

Share

CVE-2026-63888 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy