| From 1b54ff6c0e6a034499e42f1dd5d8e6eccfb6c9c4 Mon Sep 17 00:00:00 2001 |
| From: Arnd Bergmann <arnd@arndb.de> |
| Date: Fri, 15 Mar 2019 13:46:11 +0100 |
| Subject: [PATCH] scsi: sd: enable compat ioctls for sed-opal |
| |
| commit 142b2ac82e31c174936c5719fa12ae28f51a55b7 upstream. |
| |
| The sed_ioctl() function is written to be compatible between |
| 32-bit and 64-bit processes, however compat mode is only |
| wired up for nvme, not for sd. |
| |
| Add the missing call to sed_ioctl() in sd_compat_ioctl(). |
| |
| Fixes: d80210f25ff0 ("sd: add support for TCG OPAL self encrypting disks") |
| Cc: linux-scsi@vger.kernel.org |
| Cc: "James E.J. Bottomley" <jejb@linux.ibm.com> |
| Cc: "Martin K. Petersen" <martin.petersen@oracle.com> |
| Signed-off-by: Arnd Bergmann <arnd@arndb.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c |
| index b7a4154ef9b6..407d3ff73be4 100644 |
| --- a/drivers/scsi/sd.c |
| +++ b/drivers/scsi/sd.c |
| @@ -1694,20 +1694,30 @@ static void sd_rescan(struct device *dev) |
| static int sd_compat_ioctl(struct block_device *bdev, fmode_t mode, |
| unsigned int cmd, unsigned long arg) |
| { |
| - struct scsi_device *sdev = scsi_disk(bdev->bd_disk)->device; |
| + struct gendisk *disk = bdev->bd_disk; |
| + struct scsi_disk *sdkp = scsi_disk(disk); |
| + struct scsi_device *sdev = sdkp->device; |
| + void __user *p = compat_ptr(arg); |
| int error; |
| |
| + error = scsi_verify_blk_ioctl(bdev, cmd); |
| + if (error < 0) |
| + return error; |
| + |
| error = scsi_ioctl_block_when_processing_errors(sdev, cmd, |
| (mode & FMODE_NDELAY) != 0); |
| if (error) |
| return error; |
| + |
| + if (is_sed_ioctl(cmd)) |
| + return sed_ioctl(sdkp->opal_dev, cmd, p); |
| |
| /* |
| * Let the static ioctl translation table take care of it. |
| */ |
| if (!sdev->host->hostt->compat_ioctl) |
| return -ENOIOCTLCMD; |
| - return sdev->host->hostt->compat_ioctl(sdev, cmd, (void __user *)arg); |
| + return sdev->host->hostt->compat_ioctl(sdev, cmd, p); |
| } |
| #endif |
| |
| -- |
| 2.7.4 |
| |