aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/core/devio.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/core/devio.c')
-rw-r--r--drivers/usb/core/devio.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index a678186f218f..431d17287a86 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -1104,13 +1104,25 @@ static int proc_do_submiturb(struct dev_state *ps, struct usbdevfs_urb *uurb,
1104 case USB_ENDPOINT_XFER_CONTROL: 1104 case USB_ENDPOINT_XFER_CONTROL:
1105 case USB_ENDPOINT_XFER_ISOC: 1105 case USB_ENDPOINT_XFER_ISOC:
1106 return -EINVAL; 1106 return -EINVAL;
1107 /* allow single-shot interrupt transfers, at bogus rates */ 1107 case USB_ENDPOINT_XFER_INT:
1108 /* allow single-shot interrupt transfers */
1109 uurb->type = USBDEVFS_URB_TYPE_INTERRUPT;
1110 goto interrupt_urb;
1108 } 1111 }
1109 uurb->number_of_packets = 0; 1112 uurb->number_of_packets = 0;
1110 if (uurb->buffer_length > MAX_USBFS_BUFFER_SIZE) 1113 if (uurb->buffer_length > MAX_USBFS_BUFFER_SIZE)
1111 return -EINVAL; 1114 return -EINVAL;
1112 break; 1115 break;
1113 1116
1117 case USBDEVFS_URB_TYPE_INTERRUPT:
1118 if (!usb_endpoint_xfer_int(&ep->desc))
1119 return -EINVAL;
1120 interrupt_urb:
1121 uurb->number_of_packets = 0;
1122 if (uurb->buffer_length > MAX_USBFS_BUFFER_SIZE)
1123 return -EINVAL;
1124 break;
1125
1114 case USBDEVFS_URB_TYPE_ISO: 1126 case USBDEVFS_URB_TYPE_ISO:
1115 /* arbitrary limit */ 1127 /* arbitrary limit */
1116 if (uurb->number_of_packets < 1 || 1128 if (uurb->number_of_packets < 1 ||
@@ -1143,14 +1155,6 @@ static int proc_do_submiturb(struct dev_state *ps, struct usbdevfs_urb *uurb,
1143 uurb->buffer_length = totlen; 1155 uurb->buffer_length = totlen;
1144 break; 1156 break;
1145 1157
1146 case USBDEVFS_URB_TYPE_INTERRUPT:
1147 uurb->number_of_packets = 0;
1148 if (!usb_endpoint_xfer_int(&ep->desc))
1149 return -EINVAL;
1150 if (uurb->buffer_length > MAX_USBFS_BUFFER_SIZE)
1151 return -EINVAL;
1152 break;
1153
1154 default: 1158 default:
1155 return -EINVAL; 1159 return -EINVAL;
1156 } 1160 }