CVE-2026-72083 PUBLISHED

scsi: target: core: Fix iSCSI ISID use-after-free in REGISTER AND MOVE

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

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

scsi: target: core: Fix iSCSI ISID use-after-free in REGISTER AND MOVE

core_scsi3_emulate_pro_register_and_move() maps the PERSISTENT RESERVE OUT parameter list with transport_kmap_data_sg() and parses the destination TransportID with target_parse_pr_out_transport_id(). For an iSCSI TransportID (FORMAT CODE 01b), iscsi_parse_pr_out_transport_id() returns the ISID in iport_ptr as a raw pointer into that mapped buffer.

The function then unmaps the buffer with transport_kunmap_data_sg() before dereferencing iport_ptr in strcmp(), __core_scsi3_locate_pr_reg() and core_scsi3_alloc_registration(). When the parameter list spans more than one page (PARAMETER LIST LENGTH > 4096), transport_kmap_data_sg() uses vmap() and transport_kunmap_data_sg() does vunmap(), so the kernel virtual address backing iport_ptr is torn down and every subsequent dereference is a use-after-free read of the unmapped region.

Keep the parameter list mapped until iport_ptr is no longer needed: drop the early transport_kunmap_data_sg() and unmap once on the success path, right before returning. The error paths already unmap through the existing "if (buf) transport_kunmap_data_sg(cmd)" at the out: label, which now runs on every post-map error exit because buf is no longer cleared early. Only reads of the mapping happen while spinlocks are held; the map and unmap calls remain outside any lock. The sibling caller core_scsi3_decode_spec_i_port() already uses the buffer before unmapping it and is left unchanged.

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 - On LIO/iSCSI storage servers and appliances, a remote initiator sends PERSISTENT_RESERVE_OUT with REGISTER AND MOVE over TCP (port 3260); iscsit_process_scsi_cmd()→target_execute_cmd()→target_scsi3_emulate_pr_out()→core_scsi3_emulate_pro_register_and_move() with no local access required. AC:L - The attacker fully controls the PR-OUT parameter list length (>4096 to force vmap/vunmap), iSCSI TransportID format 01b with ISID, and can establish prerequisite PR registration and reservation via prior SCSI commands on the same session; no uncontrollable race or layout dependency exists. PR:N - Exploitation requires only the ability to act as a network SCSI/iSCSI client with LUN access to an exported target; no Linux UID, capability, or init-namespace root on the storage server is needed—only standard iSCSI initiator connectivity (CHAP/ACL when configured). UI:N - Triggering is fully automated once an iSCSI session exists: the attacker issues scripted REGISTER, RESERVE, then REGISTER AND MOVE commands with a crafted >4 KiB parameter list; no victim mount, click, or other interactive action is required. S:U - The UAF corrupts kernel heap state inside the target-core PR handler on the storage host; impact stays within that kernel security domain and does not inherently cross VM, container, or IOMMU boundaries (standard host compromise, not escape). C:H - After vunmap(), iport_ptr aliases freed kernel virtual address space and is dereferenced in strcmp(), __core_scsi3_locate_pr_reg(), and snprintf() into pr_reg_isid; per kernel CVSS guidance, UAF reads enable arbitrary kernel memory disclosure when uncertain. I:H - UAF reads of attacker-influenced unmapped PR-OUT data drive strcmp-based registration matching and snprintf copies into persistent kernel pr_reg structures; memory corruption/UAF is scored High for integrity because it can be leveraged for control-flow or state manipulation. A:H - Dereferencing iport_ptr after transport_kunmap_data_sg() vunmap() on multi-page buffers causes immediate invalid kernel virtual address accesses (oops/panic) on every qualifying REGISTER AND MOVE; UAF availability impact is High per kernel guidance even before full exploit development.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from 4949314c7283ea4f9ade182ca599583b89f7edd6 to 7d56f5c868d92c9d504a34a3ea450bce481c7f63 (excl.)
  • affected from 4949314c7283ea4f9ade182ca599583b89f7edd6 to 59a2a5a37dc49a641ad6bc64aee34e5a61025ffd (excl.)
  • affected from 4949314c7283ea4f9ade182ca599583b89f7edd6 to 9f8076cc73dfa6b10155978c160587e986b22169 (excl.)
  • affected from 4949314c7283ea4f9ade182ca599583b89f7edd6 to a040004846f1fbe687f6ec76d9ccc27b4ead42e4 (excl.)
  • affected from 4949314c7283ea4f9ade182ca599583b89f7edd6 to 05b3e37433cf2eaf8867f1c16528aa347bb212ab (excl.)
  • affected from 4949314c7283ea4f9ade182ca599583b89f7edd6 to cb7bdae7fba404852ade34b0c1445fbaf3e54fbb (excl.)
  • affected from 4949314c7283ea4f9ade182ca599583b89f7edd6 to ef2ee18fec92088c7d8877baf7674e89389ccd66 (excl.)
  • affected from 4949314c7283ea4f9ade182ca599583b89f7edd6 to fda6a1f3c3d7047b5ce5654487649c2daa738bfc (excl.)
  • Version d2227f84ba0e97906153ac83db13213fb2e3938d is affected
  • affected from 3.2.9 to 3.3 (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 3.3 is affected
  • unaffected from 0 to 3.3 (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