Loading block/compat_ioctl.c +0 −36 Original line number Diff line number Diff line Loading @@ -96,40 +96,6 @@ static int compat_hdio_ioctl(struct block_device *bdev, fmode_t mode, 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 { compat_int_t op; compat_int_t flags; Loading Loading @@ -179,8 +145,6 @@ static int compat_blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode, case HDIO_GET_ADDRESS: case HDIO_GET_BUSSTATE: 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 Loading drivers/cdrom/cdrom.c +25 −3 Original line number Diff line number Diff line Loading @@ -3017,9 +3017,31 @@ static noinline int mmc_ioctl_cdrom_read_audio(struct cdrom_device_info *cdi, struct cdrom_read_audio ra; int lba; #ifdef CONFIG_COMPAT if (in_compat_syscall()) { 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) lba = msf_to_lba(ra.addr.msf.minute, Loading Loading
block/compat_ioctl.c +0 −36 Original line number Diff line number Diff line Loading @@ -96,40 +96,6 @@ static int compat_hdio_ioctl(struct block_device *bdev, fmode_t mode, 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 { compat_int_t op; compat_int_t flags; Loading Loading @@ -179,8 +145,6 @@ static int compat_blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode, case HDIO_GET_ADDRESS: case HDIO_GET_BUSSTATE: 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 Loading
drivers/cdrom/cdrom.c +25 −3 Original line number Diff line number Diff line Loading @@ -3017,9 +3017,31 @@ static noinline int mmc_ioctl_cdrom_read_audio(struct cdrom_device_info *cdi, struct cdrom_read_audio ra; int lba; #ifdef CONFIG_COMPAT if (in_compat_syscall()) { 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) lba = msf_to_lba(ra.addr.msf.minute, Loading