Messages in this thread Patch in this message |  | | From | Arnd Bergmann <> | Date | Thu, 19 Dec 2019 13:15:02 +0100 | Subject | Re: [PATCH v2 21/27] compat_ioctl: move cdrom commands into cdrom.c |
| |
On Wed, Dec 18, 2019 at 9:11 PM Ben Hutchings <ben.hutchings@codethink.co.uk> wrote: > > On Tue, 2019-12-17 at 23:17 +0100, Arnd Bergmann wrote: > [...] > > @@ -1710,6 +1711,38 @@ static int idecd_ioctl(struct block_device *bdev, fmode_t mode, > > return ret; > > } > > > > +#ifdef CONFIG_COMPAT > > +static int idecd_locked_compat_ioctl(struct block_device *bdev, fmode_t mode, > > + unsigned int cmd, unsigned long arg) > > +{ > > + struct cdrom_info *info = ide_drv_g(bdev->bd_disk, cdrom_info); > > + int err; > > + > > + switch (cmd) { > > + case CDROMSETSPINDOWN: > > + return idecd_set_spindown(&info->devinfo, arg); > > + case CDROMGETSPINDOWN: > > + return idecd_get_spindown(&info->devinfo, arg); > > compat_ptr() should also be applied to the argument for these two > commands, though I'm fairly sure IDE drivers have never been useful on > s390 so it doesn't matter in practice.
Agreed on both, fixed by folding in this change:
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index 2de6e8ace957..e09b949a7c46 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c @@ -1716,19 +1716,20 @@ static int idecd_locked_compat_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg) { struct cdrom_info *info = ide_drv_g(bdev->bd_disk, cdrom_info); + void __user *argp = compat_ptr(arg); int err;
switch (cmd) { case CDROMSETSPINDOWN: - return idecd_set_spindown(&info->devinfo, arg); + return idecd_set_spindown(&info->devinfo, (unsigned long)argp); case CDROMGETSPINDOWN: - return idecd_get_spindown(&info->devinfo, arg); + return idecd_get_spindown(&info->devinfo, (unsigned long)argp); default: break; }
return cdrom_ioctl(&info->devinfo, bdev, mode, cmd, - (unsigned long)compat_ptr(arg)); + (unsigned long)argp); }
static int idecd_compat_ioctl(struct block_device *bdev, fmode_t mode,
Unfortunately the generic_ide_ioctl() call still needs an unconverted arg, so I can't just use compat_ptr() to call the native idecd_locked_ioctl() for all commands. Thanks,
Arnd
|  |