mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-04 22:21:23 +00:00
[SCSI] compat_ioct: fix bsg SG_IO
bsg's SG_IO doesn't work on 32-bit userspace and 64-bit kernelspace. The problem is that both sg and bsg drivers use SG_IO ioctl. sg_ioctl_trans() does 32/64-bit conversion even against bsg header. It messes up bsg header. bsg driver gets garbage. This patch fixes sg_ioctl_trans to handle only sg header (struct sg_io_hdr). Reported-by: Giridhar Malavali <giridhar.malavali@qlogic.com> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
0f19bc681e
commit
84eb8fb42c
@ -301,6 +301,12 @@ static int sg_ioctl_trans(unsigned int fd, unsigned int cmd,
|
|||||||
u32 data;
|
u32 data;
|
||||||
void __user *dxferp;
|
void __user *dxferp;
|
||||||
int err;
|
int err;
|
||||||
|
int interface_id;
|
||||||
|
|
||||||
|
if (get_user(interface_id, &sgio32->interface_id))
|
||||||
|
return -EFAULT;
|
||||||
|
if (interface_id != 'S')
|
||||||
|
return sys_ioctl(fd, cmd, (unsigned long)sgio32);
|
||||||
|
|
||||||
if (get_user(iovec_count, &sgio32->iovec_count))
|
if (get_user(iovec_count, &sgio32->iovec_count))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
Loading…
Reference in New Issue
Block a user