mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
[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>
This commit is contained in:
parent
72adaa9627
commit
c36fc889b5
3 changed files with 50 additions and 14 deletions
|
@ -140,6 +140,12 @@ struct usbdevfs_urb32 {
|
|||
compat_caddr_t usercontext; /* unused */
|
||||
struct usbdevfs_iso_packet_desc iso_frame_desc[0];
|
||||
};
|
||||
|
||||
struct usbdevfs_ioctl32 {
|
||||
s32 ifno;
|
||||
s32 ioctl_code;
|
||||
compat_caddr_t data;
|
||||
};
|
||||
#endif
|
||||
|
||||
#define USBDEVFS_CONTROL _IOWR('U', 0, struct usbdevfs_ctrltransfer)
|
||||
|
@ -160,6 +166,7 @@ struct usbdevfs_urb32 {
|
|||
#define USBDEVFS_RELEASEINTERFACE _IOR('U', 16, unsigned int)
|
||||
#define USBDEVFS_CONNECTINFO _IOW('U', 17, struct usbdevfs_connectinfo)
|
||||
#define USBDEVFS_IOCTL _IOWR('U', 18, struct usbdevfs_ioctl)
|
||||
#define USBDEVFS_IOCTL32 _IOWR('U', 18, struct usbdevfs_ioctl32)
|
||||
#define USBDEVFS_HUB_PORTINFO _IOR('U', 19, struct usbdevfs_hub_portinfo)
|
||||
#define USBDEVFS_RESET _IO('U', 20)
|
||||
#define USBDEVFS_CLEAR_HALT _IOR('U', 21, unsigned int)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue