]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: sr: Fix sshdr use in sr_get_events
authorMike Christie <michael.christie@oracle.com>
Wed, 4 Oct 2023 21:00:13 +0000 (16:00 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 13 Oct 2023 20:36:20 +0000 (16:36 -0400)
If scsi_execute_cmd returns < 0, it doesn't initialize the sshdr, so we
shouldn't access the sshdr. If it returns 0, then the cmd executed
successfully, so there is no need to check the sshdr. This has us access
the sshdr when we get a return value > 0.

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

index 07ef3db3d1a144f0225d9c8637a258b9800666e6..d093dd187b2f9f6dc798925505736f973ebbd2c9 100644 (file)
@@ -177,7 +177,8 @@ static unsigned int sr_get_events(struct scsi_device *sdev)
 
        result = scsi_execute_cmd(sdev, cmd, REQ_OP_DRV_IN, buf, sizeof(buf),
                                  SR_TIMEOUT, MAX_RETRIES, &exec_args);
-       if (scsi_sense_valid(&sshdr) && sshdr.sense_key == UNIT_ATTENTION)
+       if (result > 0 && scsi_sense_valid(&sshdr) &&
+           sshdr.sense_key == UNIT_ATTENTION)
                return DISK_EVENT_MEDIA_CHANGE;
 
        if (result || be16_to_cpu(eh->data_len) < sizeof(*med))