cdrom: Use struct scsi_sense_hdr internally
authorKees Cook <keescook@chromium.org>
Tue, 31 Jul 2018 19:51:52 +0000 (12:51 -0700)
committerJens Axboe <axboe@kernel.dk>
Thu, 2 Aug 2018 21:22:39 +0000 (15:22 -0600)
This removes more casts of struct request_sense and uses the standard
struct scsi_sense_hdr instead. This also fixes any possible stale values
since the prior code did not check the sense length.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/Kconfig
drivers/cdrom/cdrom.c

index ad9b687a236a96db3e24c37ea8ddd161dd97d581..d4913516823f141663fac804f54d0f3c7cfec974 100644 (file)
@@ -74,12 +74,12 @@ config AMIGA_Z2RAM
 
 config CDROM
        tristate
+       select BLK_SCSI_REQUEST
 
 config GDROM
        tristate "SEGA Dreamcast GD-ROM drive"
        depends on SH_DREAMCAST
        select CDROM
-       select BLK_SCSI_REQUEST # only for the generic cdrom code
        help
          A standard SEGA Dreamcast comes with a modified CD ROM drive called a
          "GD-ROM" by SEGA to signify it is capable of reading special disks
index 86619472d91647f8393daf7b8664c420029a86ed..113fc6edb2b03718166b2e42854d777a2f18f798 100644 (file)
 #include <linux/blkdev.h>
 #include <linux/times.h>
 #include <linux/uaccess.h>
+#include <scsi/scsi_common.h>
 #include <scsi/scsi_request.h>
 
 /* used to tell the module to turn on full debugging messages */
@@ -2222,9 +2223,12 @@ static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
 
                blk_execute_rq(q, cdi->disk, rq, 0);
                if (scsi_req(rq)->result) {
-                       struct request_sense *s = req->sense;
+                       struct scsi_sense_hdr sshdr;
+
                        ret = -EIO;
-                       cdi->last_sense = s->sense_key;
+                       scsi_normalize_sense(req->sense, req->sense_len,
+                                            &sshdr);
+                       cdi->last_sense = sshdr.sense_key;
                }
 
                if (blk_rq_unmap_user(bio))