]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
scsi: sd: Fix scsi_mode_sense caller's sshdr use
authorMike Christie <michael.christie@oracle.com>
Wed, 4 Oct 2023 21:00:09 +0000 (16:00 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 13 Oct 2023 20:36:20 +0000 (16:36 -0400)
The sshdr passed into scsi_execute_cmd is only initialized if
scsi_execute_cmd returns >= 0, and scsi_mode_sense will convert all non
good statuses like check conditions to -EIO. This has scsi_mode_sense
callers that were possibly accessing an uninitialized sshdrs to only
access it if we got -EIO.

Signed-off-by: Mike Christie <michael.christie@oracle.com>
Link: https://lore.kernel.org/r/20231004210013.5601-9-michael.christie@oracle.com
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Martin Wilck <mwilck@suse.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/sd.c

index dde9b670798012c78c48af30692e678719f1bd80..674e844aa72cbb9b0929cbae293ab0a35d8696cf 100644 (file)
@@ -2890,7 +2890,7 @@ sd_read_cache_type(struct scsi_disk *sdkp, unsigned char *buffer)
        }
 
 bad_sense:
-       if (scsi_sense_valid(&sshdr) &&
+       if (res == -EIO && scsi_sense_valid(&sshdr) &&
            sshdr.sense_key == ILLEGAL_REQUEST &&
            sshdr.asc == 0x24 && sshdr.ascq == 0x0)
                /* Invalid field in CDB */
@@ -2938,7 +2938,7 @@ static void sd_read_app_tag_own(struct scsi_disk *sdkp, unsigned char *buffer)
                sd_first_printk(KERN_WARNING, sdkp,
                          "getting Control mode page failed, assume no ATO\n");
 
-               if (scsi_sense_valid(&sshdr))
+               if (res == -EIO && scsi_sense_valid(&sshdr))
                        sd_print_sense_hdr(sdkp, &sshdr);
 
                return;