diff options
author | Pete Zaitcev <zaitcev@redhat.com> | 2005-10-17 21:15:54 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2005-10-28 19:47:46 -0400 |
commit | c36fc889b5a4fd66cfd9ba80d9e038745d349567 (patch) | |
tree | c49f295dfdf53a4c6f495be8414497f2cdf4a4d3 /fs | |
parent | 72adaa962741e8e910300b66bb123b1a9c31a8a8 (diff) |
[PATCH] usb: Patch for USBDEVFS_IOCTL from 32-bit programs
Dell supplied me with the following test:
#include<stdio.h>
#include<errno.h>
#include<sys/ioctl.h>
#include<fcntl.h>
#include<linux/usbdevice_fs.h>
main(int argc,char*argv[])
{
struct usbdevfs_hub_portinfo hubPortInfo = {0};
struct usbdevfs_ioctl command = {0};
command.ifno = 0;
command.ioctl_code = USBDEVFS_HUB_PORTINFO;
command.data = (void*)&hubPortInfo;
int fd, ret;
if(argc != 2) {
fprintf(stderr,"Usage: %s /proc/bus/usb/<BusNo>/<HubID>\n",argv[0]);
fprintf(stderr,"Example: %s /proc/bus/usb/001/001\n",argv[0]);
exit(1);
}
errno = 0;
fd = open(argv[1],O_RDWR);
if(fd < 0) {
perror("open failed:");
exit(errno);
}
errno = 0;
ret = ioctl(fd,USBDEVFS_IOCTL,&command);
printf("IOCTL return status:%d\n",ret);
if(ret<0) {
perror("IOCTL failed:");
close(fd);
exit(3);
} else {
printf("IOCTL passed:Num of ports %d\n",hubPortInfo.nports);
close(fd);
exit(0);
}
return 0;
}
I have verified that it breaks if built in 32 bit mode on x86_64 and that
the patch below fixes it.
Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/compat_ioctl.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c index e28a74203f3b..a327e03753ac 100644 --- a/fs/compat_ioctl.c +++ b/fs/compat_ioctl.c | |||
@@ -3050,6 +3050,7 @@ HANDLE_IOCTL(TIOCSSERIAL, serial_struct_ioctl) | |||
3050 | HANDLE_IOCTL(USBDEVFS_CONTROL32, do_usbdevfs_control) | 3050 | HANDLE_IOCTL(USBDEVFS_CONTROL32, do_usbdevfs_control) |
3051 | HANDLE_IOCTL(USBDEVFS_BULK32, do_usbdevfs_bulk) | 3051 | HANDLE_IOCTL(USBDEVFS_BULK32, do_usbdevfs_bulk) |
3052 | HANDLE_IOCTL(USBDEVFS_DISCSIGNAL32, do_usbdevfs_discsignal) | 3052 | HANDLE_IOCTL(USBDEVFS_DISCSIGNAL32, do_usbdevfs_discsignal) |
3053 | COMPATIBLE_IOCTL(USBDEVFS_IOCTL32) | ||
3053 | /* i2c */ | 3054 | /* i2c */ |
3054 | HANDLE_IOCTL(I2C_FUNCS, w_long) | 3055 | HANDLE_IOCTL(I2C_FUNCS, w_long) |
3055 | HANDLE_IOCTL(I2C_RDWR, do_i2c_rdwr_ioctl) | 3056 | HANDLE_IOCTL(I2C_RDWR, do_i2c_rdwr_ioctl) |