Description
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.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
4949314c7283ea4f9ade182ca599583b89f7edd6 to < 7d56f5c868d92c9d504a34a3ea450bce481c7f63affected4949314c7283ea4f9ade182ca599583b89f7edd6 to < 59a2a5a37dc49a641ad6bc64aee34e5a61025ffdaffected4949314c7283ea4f9ade182ca599583b89f7edd6 to < 9f8076cc73dfa6b10155978c160587e986b22169affected4949314c7283ea4f9ade182ca599583b89f7edd6 to < a040004846f1fbe687f6ec76d9ccc27b4ead42e4affected4949314c7283ea4f9ade182ca599583b89f7edd6 to < 05b3e37433cf2eaf8867f1c16528aa347bb212abaffected4949314c7283ea4f9ade182ca599583b89f7edd6 to < cb7bdae7fba404852ade34b0c1445fbaf3e54fbbaffected4949314c7283ea4f9ade182ca599583b89f7edd6 to < ef2ee18fec92088c7d8877baf7674e89389ccd66affected4949314c7283ea4f9ade182ca599583b89f7edd6 to < fda6a1f3c3d7047b5ce5654487649c2daa738bfcaffectedd2227f84ba0e97906153ac83db13213fb2e3938daffected3.2.9 to < 3.3affected
Linux Linux
Default version status: affected
3.3affected0 to < 3.3unaffected5.10.261 to ≤ 5.10.*unaffected5.15.212 to ≤ 5.15.*unaffected6.1.178 to ≤ 6.1.*unaffected6.6.145 to ≤ 6.6.*unaffected6.12.97 to ≤ 6.12.*unaffected6.18.40 to ≤ 6.18.*unaffected7.1.5 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/7d56f5c868d92c9d504a34a3ea450bce481c7f63 ↗
- https://git.kernel.org/stable/c/59a2a5a37dc49a641ad6bc64aee34e5a61025ffd ↗
- https://git.kernel.org/stable/c/9f8076cc73dfa6b10155978c160587e986b22169 ↗
- https://git.kernel.org/stable/c/a040004846f1fbe687f6ec76d9ccc27b4ead42e4 ↗
- https://git.kernel.org/stable/c/05b3e37433cf2eaf8867f1c16528aa347bb212ab ↗
- https://git.kernel.org/stable/c/cb7bdae7fba404852ade34b0c1445fbaf3e54fbb ↗
- https://git.kernel.org/stable/c/ef2ee18fec92088c7d8877baf7674e89389ccd66 ↗
- https://git.kernel.org/stable/c/fda6a1f3c3d7047b5ce5654487649c2daa738bfc ↗