compat_ioctl: move CDROMREADADIO to cdrom.c
Again, there is only one file that needs this, so move the conversion handler into the native implementation. Reviewed-by: Ben Hutchings <ben.hutchings@codethink.co.uk> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
parent
f3ee6e63a9
commit
8f8f562038
|
@ -96,40 +96,6 @@ static int compat_hdio_ioctl(struct block_device *bdev, fmode_t mode,
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct compat_cdrom_read_audio {
|
|
||||||
union cdrom_addr addr;
|
|
||||||
u8 addr_format;
|
|
||||||
compat_int_t nframes;
|
|
||||||
compat_caddr_t buf;
|
|
||||||
};
|
|
||||||
|
|
||||||
static int compat_cdrom_read_audio(struct block_device *bdev, fmode_t mode,
|
|
||||||
unsigned int cmd, unsigned long arg)
|
|
||||||
{
|
|
||||||
struct cdrom_read_audio __user *cdread_audio;
|
|
||||||
struct compat_cdrom_read_audio __user *cdread_audio32;
|
|
||||||
__u32 data;
|
|
||||||
void __user *datap;
|
|
||||||
|
|
||||||
cdread_audio = compat_alloc_user_space(sizeof(*cdread_audio));
|
|
||||||
cdread_audio32 = compat_ptr(arg);
|
|
||||||
|
|
||||||
if (copy_in_user(&cdread_audio->addr,
|
|
||||||
&cdread_audio32->addr,
|
|
||||||
(sizeof(*cdread_audio32) -
|
|
||||||
sizeof(compat_caddr_t))))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
if (get_user(data, &cdread_audio32->buf))
|
|
||||||
return -EFAULT;
|
|
||||||
datap = compat_ptr(data);
|
|
||||||
if (put_user(datap, &cdread_audio->buf))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
return __blkdev_driver_ioctl(bdev, mode, cmd,
|
|
||||||
(unsigned long)cdread_audio);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct compat_blkpg_ioctl_arg {
|
struct compat_blkpg_ioctl_arg {
|
||||||
compat_int_t op;
|
compat_int_t op;
|
||||||
compat_int_t flags;
|
compat_int_t flags;
|
||||||
|
@ -179,8 +145,6 @@ static int compat_blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode,
|
||||||
case HDIO_GET_ADDRESS:
|
case HDIO_GET_ADDRESS:
|
||||||
case HDIO_GET_BUSSTATE:
|
case HDIO_GET_BUSSTATE:
|
||||||
return compat_hdio_ioctl(bdev, mode, cmd, arg);
|
return compat_hdio_ioctl(bdev, mode, cmd, arg);
|
||||||
case CDROMREADAUDIO:
|
|
||||||
return compat_cdrom_read_audio(bdev, mode, cmd, arg);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* No handler required for the ones below, we just need to
|
* No handler required for the ones below, we just need to
|
||||||
|
|
|
@ -3017,9 +3017,31 @@ static noinline int mmc_ioctl_cdrom_read_audio(struct cdrom_device_info *cdi,
|
||||||
struct cdrom_read_audio ra;
|
struct cdrom_read_audio ra;
|
||||||
int lba;
|
int lba;
|
||||||
|
|
||||||
if (copy_from_user(&ra, (struct cdrom_read_audio __user *)arg,
|
#ifdef CONFIG_COMPAT
|
||||||
sizeof(ra)))
|
if (in_compat_syscall()) {
|
||||||
return -EFAULT;
|
struct compat_cdrom_read_audio {
|
||||||
|
union cdrom_addr addr;
|
||||||
|
u8 addr_format;
|
||||||
|
compat_int_t nframes;
|
||||||
|
compat_caddr_t buf;
|
||||||
|
} ra32;
|
||||||
|
|
||||||
|
if (copy_from_user(&ra32, arg, sizeof(ra32)))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
ra = (struct cdrom_read_audio) {
|
||||||
|
.addr = ra32.addr,
|
||||||
|
.addr_format = ra32.addr_format,
|
||||||
|
.nframes = ra32.nframes,
|
||||||
|
.buf = compat_ptr(ra32.buf),
|
||||||
|
};
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if (copy_from_user(&ra, (struct cdrom_read_audio __user *)arg,
|
||||||
|
sizeof(ra)))
|
||||||
|
return -EFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
if (ra.addr_format == CDROM_MSF)
|
if (ra.addr_format == CDROM_MSF)
|
||||||
lba = msf_to_lba(ra.addr.msf.minute,
|
lba = msf_to_lba(ra.addr.msf.minute,
|
||||||
|
|
Loading…
Reference in New Issue