On 10/5/23 06:00, Mike Christie wrote: > 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@xxxxxxxxxx> > Reviewed-by: Christoph Hellwig <hch@xxxxxx> > Reviewed-by: Martin Wilck <mwilck@xxxxxxxx> > --- > drivers/scsi/sd.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c > index 6d4787ff6e96..538ebdf42c69 100644 > --- a/drivers/scsi/sd.c > +++ b/drivers/scsi/sd.c > @@ -2942,7 +2942,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) && if (ret < 0 && ... would be safer and avoid any issue if we ever change scsi_execute_cmd() to return other error codes than -EIO, no ? > sshdr.sense_key == ILLEGAL_REQUEST && > sshdr.asc == 0x24 && sshdr.ascq == 0x0) > /* Invalid field in CDB */ > @@ -2990,7 +2990,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; -- Damien Le Moal Western Digital Research