summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorMatthias Goergens <matthias.goergens@gmail.com>2026-09-24 01:52:03 +0800
committerNiklas Cassel <cassel@kernel.org>2026-09-23 21:05:55 +0200
commit80320b278fea07ffcda3f57b67b61658e0a4e1ca (patch)
tree3f200b99d36bd2611178e89a6b727f6f79adcebe /kernel
parent88a0474d92ba102fff860db3cae9da87a0964fbf (diff)
downloadlinux-next-80320b278fea07ffcda3f57b67b61658e0a4e1ca.tar.gz
linux-next-80320b278fea07ffcda3f57b67b61658e0a4e1ca.zip
ata: libata-scsi: bound the ATA passthru sense descriptor writes
When an ATA PASS-THROUGH command to an ATAPI device fails, the sense buffer holds the device's REQUEST SENSE reply, and ata_scsi_set_passthru_sense_fields() trusts its additional length byte, sb[7], when adding the ATA Status Return descriptor. A faulty or malicious device can use that to make the kernel read and write past the 96-byte buffer in three ways: - scsi_sense_desc_find() is passed sb[7] + 8 as the buffer length, so its clamp against sb[7] does nothing and the walk runs off the end. - A type-9 descriptor found near the end is filled in unchecked. - A new descriptor at sb[8 + len] needs len + 22 bytes, not len + 14, so len 75..82 writes up to 8 bytes past the end. Reproduced with KASAN under qemu, with the emulated ATAPI REQUEST SENSE reply patched: BUG: KASAN: slab-out-of-bounds in scsi_sense_desc_find+0x1a5/0x210 BUG: KASAN: slab-out-of-bounds in ata_scsi_qc_complete+0x1a15/0x1a50 Both are gone with this patch, and a valid descriptor is still filled in. Fixes: 97981926224a ("ata: libata-scsi: Do not overwrite valid sense data when CK_COND=1") Cc: stable@vger.kernel.org Reviewed-by: Damien Le Moal <dlemoal@kernel.org> Signed-off-by: Matthias Goergens <matthias.goergens@gmail.com> Link: https://lore.kernel.org/r/20260923175203.1576825-1-matthias.goergens@gmail.com Signed-off-by: Niklas Cassel <cassel@kernel.org>
Diffstat (limited to 'kernel')
0 files changed, 0 insertions, 0 deletions