From: Al Viro Date: Tue, 27 Jun 2017 19:51:38 +0000 (-0400) Subject: compat_hdio_ioctl: get rid of set_fs() X-Git-Tag: v4.13-rc1~6^2~5 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=30138384dae74cdd5694615c098a19af984a3dda;p=linux-2.6-block.git compat_hdio_ioctl: get rid of set_fs() Signed-off-by: Al Viro --- diff --git a/block/compat_ioctl.c b/block/compat_ioctl.c index 696e0cdd2df1..38554c2ea38a 100644 --- a/block/compat_ioctl.c +++ b/block/compat_ioctl.c @@ -79,19 +79,16 @@ static int compat_hdio_getgeo(struct gendisk *disk, struct block_device *bdev, static int compat_hdio_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg) { - mm_segment_t old_fs = get_fs(); - unsigned long kval; - unsigned int __user *uvp; + unsigned long *__user p; int error; - set_fs(KERNEL_DS); + p = compat_alloc_user_space(sizeof(unsigned long)); error = __blkdev_driver_ioctl(bdev, mode, - cmd, (unsigned long)(&kval)); - set_fs(old_fs); - + cmd, (unsigned long)p); if (error == 0) { - uvp = compat_ptr(arg); - if (put_user(kval, uvp)) + unsigned int __user *uvp = compat_ptr(arg); + unsigned long v; + if (get_user(v, p) || put_user(v, uvp)) error = -EFAULT; } return error;