]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
scsi: libiscsi: Fix stale-data leak into the SCSI sense buffer
authorHyeongJun An <sammiee5311@gmail.com>
Tue, 14 Jul 2026 10:49:34 +0000 (19:49 +0900)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sun, 26 Jul 2026 19:21:39 +0000 (15:21 -0400)
iscsi_scsi_cmd_rsp() copies the sense data of a SCSI Response from the
target-supplied data segment.  The segment carries a 2-byte sense length
followed by the sense bytes, so it must hold 2 + senselen bytes, but the
bounds check only requires datalen >= senselen:

senselen = get_unaligned_be16(data);
if (datalen < senselen)
goto invalid_datalen;
memcpy(sc->sense_buffer, data + 2,
       min_t(uint16_t, senselen, SCSI_SENSE_BUFFERSIZE));

A target that returns a SCSI Response whose datalen equals senselen
(with senselen <= SCSI_SENSE_BUFFERSIZE) makes the memcpy() from data +
2 read up to two bytes past the received data.  Those bytes are stale
conn->data contents and end up in the command's sense buffer, which is
returned to userspace.

Account for the 2-byte sense length prefix in the check.

Fixes: 7996a778ff8c ("[SCSI] iscsi: add libiscsi")
Suggested-by: Sashiko AI <sashiko-bot@kernel.org>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: HyeongJun An <sammiee5311@gmail.com>
Acked-by: Chris Leech <cleech@redhat.com>
Link: https://patch.msgid.link/20260714104934.1404423-1-sammiee5311@gmail.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/libiscsi.c

index 160f02f2f51d1c195d6fe5e2bcaf213b5f98a129..5cbc51899de00c54d67ab34e54af3315117ab1fe 100644 (file)
@@ -918,7 +918,7 @@ invalid_datalen:
                }
 
                senselen = get_unaligned_be16(data);
-               if (datalen < senselen)
+               if (datalen < senselen + 2)
                        goto invalid_datalen;
 
                memcpy(sc->sense_buffer, data + 2,