diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-01-13 17:10:32 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-01-13 17:10:32 -0500 |
commit | 2c1cfa49901839136e578ca516a7e230182da024 (patch) | |
tree | 65b59ab16826869a104871b638c0536bfb285494 | |
parent | d5a047fd92c6e0db7d56b9e20200cc30f6c7c8e2 (diff) | |
parent | 1a2e91e795def04e15fac87b8e16b635691d0b82 (diff) |
Merge tag 'usb-4.15-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB fixes from Greg KH:
"Here are some small USB fixes and device ids for 4.15-rc8
Nothing major, small fixes for various devices, some resolutions for
bugs found by fuzzers, and the usual handful of new device ids.
All of these have been in linux-next with no reported issues"
* tag 'usb-4.15-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
Documentation: usb: fix typo in UVC gadgetfs config command
usb: misc: usb3503: make sure reset is low for at least 100us
uas: ignore UAS for Norelsys NS1068(X) chips
USB: UDC core: fix double-free in usb_add_gadget_udc_release
USB: fix usbmon BUG trigger
usbip: vudc_tx: fix v_send_ret_submit() vulnerability to null xfer buffer
usbip: remove kernel addresses from usb device and urb debug msgs
usbip: fix vudc_rx: harden CMD_SUBMIT path to handle malicious input
USB: serial: cp210x: add new device ID ELV ALC 8xxx
USB: serial: cp210x: add IDs for LifeScan OneTouch Verio IQ
-rw-r--r-- | Documentation/usb/gadget-testing.txt | 2 | ||||
-rw-r--r-- | drivers/usb/gadget/udc/core.c | 28 | ||||
-rw-r--r-- | drivers/usb/misc/usb3503.c | 2 | ||||
-rw-r--r-- | drivers/usb/mon/mon_bin.c | 8 | ||||
-rw-r--r-- | drivers/usb/serial/cp210x.c | 2 | ||||
-rw-r--r-- | drivers/usb/storage/unusual_uas.h | 7 | ||||
-rw-r--r-- | drivers/usb/usbip/usbip_common.c | 17 | ||||
-rw-r--r-- | drivers/usb/usbip/vudc_rx.c | 19 | ||||
-rw-r--r-- | drivers/usb/usbip/vudc_tx.c | 11 |
9 files changed, 63 insertions, 33 deletions
diff --git a/Documentation/usb/gadget-testing.txt b/Documentation/usb/gadget-testing.txt index 441a4b9b666f..5908a21fddb6 100644 --- a/Documentation/usb/gadget-testing.txt +++ b/Documentation/usb/gadget-testing.txt | |||
@@ -693,7 +693,7 @@ such specification consists of a number of lines with an inverval value | |||
693 | in each line. The rules stated above are best illustrated with an example: | 693 | in each line. The rules stated above are best illustrated with an example: |
694 | 694 | ||
695 | # mkdir functions/uvc.usb0/control/header/h | 695 | # mkdir functions/uvc.usb0/control/header/h |
696 | # cd functions/uvc.usb0/control/header/h | 696 | # cd functions/uvc.usb0/control/ |
697 | # ln -s header/h class/fs | 697 | # ln -s header/h class/fs |
698 | # ln -s header/h class/ss | 698 | # ln -s header/h class/ss |
699 | # mkdir -p functions/uvc.usb0/streaming/uncompressed/u/360p | 699 | # mkdir -p functions/uvc.usb0/streaming/uncompressed/u/360p |
diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c index 93eff7dec2f5..1b3efb14aec7 100644 --- a/drivers/usb/gadget/udc/core.c +++ b/drivers/usb/gadget/udc/core.c | |||
@@ -1147,11 +1147,7 @@ int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget, | |||
1147 | 1147 | ||
1148 | udc = kzalloc(sizeof(*udc), GFP_KERNEL); | 1148 | udc = kzalloc(sizeof(*udc), GFP_KERNEL); |
1149 | if (!udc) | 1149 | if (!udc) |
1150 | goto err1; | 1150 | goto err_put_gadget; |
1151 | |||
1152 | ret = device_add(&gadget->dev); | ||
1153 | if (ret) | ||
1154 | goto err2; | ||
1155 | 1151 | ||
1156 | device_initialize(&udc->dev); | 1152 | device_initialize(&udc->dev); |
1157 | udc->dev.release = usb_udc_release; | 1153 | udc->dev.release = usb_udc_release; |
@@ -1160,7 +1156,11 @@ int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget, | |||
1160 | udc->dev.parent = parent; | 1156 | udc->dev.parent = parent; |
1161 | ret = dev_set_name(&udc->dev, "%s", kobject_name(&parent->kobj)); | 1157 | ret = dev_set_name(&udc->dev, "%s", kobject_name(&parent->kobj)); |
1162 | if (ret) | 1158 | if (ret) |
1163 | goto err3; | 1159 | goto err_put_udc; |
1160 | |||
1161 | ret = device_add(&gadget->dev); | ||
1162 | if (ret) | ||
1163 | goto err_put_udc; | ||
1164 | 1164 | ||
1165 | udc->gadget = gadget; | 1165 | udc->gadget = gadget; |
1166 | gadget->udc = udc; | 1166 | gadget->udc = udc; |
@@ -1170,7 +1170,7 @@ int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget, | |||
1170 | 1170 | ||
1171 | ret = device_add(&udc->dev); | 1171 | ret = device_add(&udc->dev); |
1172 | if (ret) | 1172 | if (ret) |
1173 | goto err4; | 1173 | goto err_unlist_udc; |
1174 | 1174 | ||
1175 | usb_gadget_set_state(gadget, USB_STATE_NOTATTACHED); | 1175 | usb_gadget_set_state(gadget, USB_STATE_NOTATTACHED); |
1176 | udc->vbus = true; | 1176 | udc->vbus = true; |
@@ -1178,27 +1178,25 @@ int usb_add_gadget_udc_release(struct device *parent, struct usb_gadget *gadget, | |||
1178 | /* pick up one of pending gadget drivers */ | 1178 | /* pick up one of pending gadget drivers */ |
1179 | ret = check_pending_gadget_drivers(udc); | 1179 | ret = check_pending_gadget_drivers(udc); |
1180 | if (ret) | 1180 | if (ret) |
1181 | goto err5; | 1181 | goto err_del_udc; |
1182 | 1182 | ||
1183 | mutex_unlock(&udc_lock); | 1183 | mutex_unlock(&udc_lock); |
1184 | 1184 | ||
1185 | return 0; | 1185 | return 0; |
1186 | 1186 | ||
1187 | err5: | 1187 | err_del_udc: |
1188 | device_del(&udc->dev); | 1188 | device_del(&udc->dev); |
1189 | 1189 | ||
1190 | err4: | 1190 | err_unlist_udc: |
1191 | list_del(&udc->list); | 1191 | list_del(&udc->list); |
1192 | mutex_unlock(&udc_lock); | 1192 | mutex_unlock(&udc_lock); |
1193 | 1193 | ||
1194 | err3: | ||
1195 | put_device(&udc->dev); | ||
1196 | device_del(&gadget->dev); | 1194 | device_del(&gadget->dev); |
1197 | 1195 | ||
1198 | err2: | 1196 | err_put_udc: |
1199 | kfree(udc); | 1197 | put_device(&udc->dev); |
1200 | 1198 | ||
1201 | err1: | 1199 | err_put_gadget: |
1202 | put_device(&gadget->dev); | 1200 | put_device(&gadget->dev); |
1203 | return ret; | 1201 | return ret; |
1204 | } | 1202 | } |
diff --git a/drivers/usb/misc/usb3503.c b/drivers/usb/misc/usb3503.c index 465dbf68b463..f723f7b8c9ac 100644 --- a/drivers/usb/misc/usb3503.c +++ b/drivers/usb/misc/usb3503.c | |||
@@ -279,6 +279,8 @@ static int usb3503_probe(struct usb3503 *hub) | |||
279 | if (gpio_is_valid(hub->gpio_reset)) { | 279 | if (gpio_is_valid(hub->gpio_reset)) { |
280 | err = devm_gpio_request_one(dev, hub->gpio_reset, | 280 | err = devm_gpio_request_one(dev, hub->gpio_reset, |
281 | GPIOF_OUT_INIT_LOW, "usb3503 reset"); | 281 | GPIOF_OUT_INIT_LOW, "usb3503 reset"); |
282 | /* Datasheet defines a hardware reset to be at least 100us */ | ||
283 | usleep_range(100, 10000); | ||
282 | if (err) { | 284 | if (err) { |
283 | dev_err(dev, | 285 | dev_err(dev, |
284 | "unable to request GPIO %d as reset pin (%d)\n", | 286 | "unable to request GPIO %d as reset pin (%d)\n", |
diff --git a/drivers/usb/mon/mon_bin.c b/drivers/usb/mon/mon_bin.c index f6ae753ab99b..f932f40302df 100644 --- a/drivers/usb/mon/mon_bin.c +++ b/drivers/usb/mon/mon_bin.c | |||
@@ -1004,7 +1004,9 @@ static long mon_bin_ioctl(struct file *file, unsigned int cmd, unsigned long arg | |||
1004 | break; | 1004 | break; |
1005 | 1005 | ||
1006 | case MON_IOCQ_RING_SIZE: | 1006 | case MON_IOCQ_RING_SIZE: |
1007 | mutex_lock(&rp->fetch_lock); | ||
1007 | ret = rp->b_size; | 1008 | ret = rp->b_size; |
1009 | mutex_unlock(&rp->fetch_lock); | ||
1008 | break; | 1010 | break; |
1009 | 1011 | ||
1010 | case MON_IOCT_RING_SIZE: | 1012 | case MON_IOCT_RING_SIZE: |
@@ -1231,12 +1233,16 @@ static int mon_bin_vma_fault(struct vm_fault *vmf) | |||
1231 | unsigned long offset, chunk_idx; | 1233 | unsigned long offset, chunk_idx; |
1232 | struct page *pageptr; | 1234 | struct page *pageptr; |
1233 | 1235 | ||
1236 | mutex_lock(&rp->fetch_lock); | ||
1234 | offset = vmf->pgoff << PAGE_SHIFT; | 1237 | offset = vmf->pgoff << PAGE_SHIFT; |
1235 | if (offset >= rp->b_size) | 1238 | if (offset >= rp->b_size) { |
1239 | mutex_unlock(&rp->fetch_lock); | ||
1236 | return VM_FAULT_SIGBUS; | 1240 | return VM_FAULT_SIGBUS; |
1241 | } | ||
1237 | chunk_idx = offset / CHUNK_SIZE; | 1242 | chunk_idx = offset / CHUNK_SIZE; |
1238 | pageptr = rp->b_vec[chunk_idx].pg; | 1243 | pageptr = rp->b_vec[chunk_idx].pg; |
1239 | get_page(pageptr); | 1244 | get_page(pageptr); |
1245 | mutex_unlock(&rp->fetch_lock); | ||
1240 | vmf->page = pageptr; | 1246 | vmf->page = pageptr; |
1241 | return 0; | 1247 | return 0; |
1242 | } | 1248 | } |
diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c index 7c6273bf5beb..06d502b3e913 100644 --- a/drivers/usb/serial/cp210x.c +++ b/drivers/usb/serial/cp210x.c | |||
@@ -124,6 +124,7 @@ static const struct usb_device_id id_table[] = { | |||
124 | { USB_DEVICE(0x10C4, 0x8470) }, /* Juniper Networks BX Series System Console */ | 124 | { USB_DEVICE(0x10C4, 0x8470) }, /* Juniper Networks BX Series System Console */ |
125 | { USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */ | 125 | { USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */ |
126 | { USB_DEVICE(0x10C4, 0x84B6) }, /* Starizona Hyperion */ | 126 | { USB_DEVICE(0x10C4, 0x84B6) }, /* Starizona Hyperion */ |
127 | { USB_DEVICE(0x10C4, 0x85A7) }, /* LifeScan OneTouch Verio IQ */ | ||
127 | { USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */ | 128 | { USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */ |
128 | { USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */ | 129 | { USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */ |
129 | { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */ | 130 | { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */ |
@@ -174,6 +175,7 @@ static const struct usb_device_id id_table[] = { | |||
174 | { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */ | 175 | { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */ |
175 | { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */ | 176 | { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */ |
176 | { USB_DEVICE(0x18EF, 0xE025) }, /* ELV Marble Sound Board 1 */ | 177 | { USB_DEVICE(0x18EF, 0xE025) }, /* ELV Marble Sound Board 1 */ |
178 | { USB_DEVICE(0x18EF, 0xE030) }, /* ELV ALC 8xxx Battery Charger */ | ||
177 | { USB_DEVICE(0x18EF, 0xE032) }, /* ELV TFD500 Data Logger */ | 179 | { USB_DEVICE(0x18EF, 0xE032) }, /* ELV TFD500 Data Logger */ |
178 | { USB_DEVICE(0x1901, 0x0190) }, /* GE B850 CP2105 Recorder interface */ | 180 | { USB_DEVICE(0x1901, 0x0190) }, /* GE B850 CP2105 Recorder interface */ |
179 | { USB_DEVICE(0x1901, 0x0193) }, /* GE B650 CP2104 PMC interface */ | 181 | { USB_DEVICE(0x1901, 0x0193) }, /* GE B650 CP2104 PMC interface */ |
diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h index e6127fb21c12..a7d08ae0adad 100644 --- a/drivers/usb/storage/unusual_uas.h +++ b/drivers/usb/storage/unusual_uas.h | |||
@@ -143,6 +143,13 @@ UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999, | |||
143 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | 143 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
144 | US_FL_NO_ATA_1X), | 144 | US_FL_NO_ATA_1X), |
145 | 145 | ||
146 | /* Reported-by: Icenowy Zheng <icenowy@aosc.io> */ | ||
147 | UNUSUAL_DEV(0x2537, 0x1068, 0x0000, 0x9999, | ||
148 | "Norelsys", | ||
149 | "NS1068X", | ||
150 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
151 | US_FL_IGNORE_UAS), | ||
152 | |||
146 | /* Reported-by: Takeo Nakayama <javhera@gmx.com> */ | 153 | /* Reported-by: Takeo Nakayama <javhera@gmx.com> */ |
147 | UNUSUAL_DEV(0x357d, 0x7788, 0x0000, 0x9999, | 154 | UNUSUAL_DEV(0x357d, 0x7788, 0x0000, 0x9999, |
148 | "JMicron", | 155 | "JMicron", |
diff --git a/drivers/usb/usbip/usbip_common.c b/drivers/usb/usbip/usbip_common.c index 7b219d9109b4..ee2bbce24584 100644 --- a/drivers/usb/usbip/usbip_common.c +++ b/drivers/usb/usbip/usbip_common.c | |||
@@ -91,7 +91,7 @@ static void usbip_dump_usb_device(struct usb_device *udev) | |||
91 | dev_dbg(dev, " devnum(%d) devpath(%s) usb speed(%s)", | 91 | dev_dbg(dev, " devnum(%d) devpath(%s) usb speed(%s)", |
92 | udev->devnum, udev->devpath, usb_speed_string(udev->speed)); | 92 | udev->devnum, udev->devpath, usb_speed_string(udev->speed)); |
93 | 93 | ||
94 | pr_debug("tt %p, ttport %d\n", udev->tt, udev->ttport); | 94 | pr_debug("tt hub ttport %d\n", udev->ttport); |
95 | 95 | ||
96 | dev_dbg(dev, " "); | 96 | dev_dbg(dev, " "); |
97 | for (i = 0; i < 16; i++) | 97 | for (i = 0; i < 16; i++) |
@@ -124,12 +124,8 @@ static void usbip_dump_usb_device(struct usb_device *udev) | |||
124 | } | 124 | } |
125 | pr_debug("\n"); | 125 | pr_debug("\n"); |
126 | 126 | ||
127 | dev_dbg(dev, "parent %p, bus %p\n", udev->parent, udev->bus); | 127 | dev_dbg(dev, "parent %s, bus %s\n", dev_name(&udev->parent->dev), |
128 | 128 | udev->bus->bus_name); | |
129 | dev_dbg(dev, | ||
130 | "descriptor %p, config %p, actconfig %p, rawdescriptors %p\n", | ||
131 | &udev->descriptor, udev->config, | ||
132 | udev->actconfig, udev->rawdescriptors); | ||
133 | 129 | ||
134 | dev_dbg(dev, "have_langid %d, string_langid %d\n", | 130 | dev_dbg(dev, "have_langid %d, string_langid %d\n", |
135 | udev->have_langid, udev->string_langid); | 131 | udev->have_langid, udev->string_langid); |
@@ -237,9 +233,6 @@ void usbip_dump_urb(struct urb *urb) | |||
237 | 233 | ||
238 | dev = &urb->dev->dev; | 234 | dev = &urb->dev->dev; |
239 | 235 | ||
240 | dev_dbg(dev, " urb :%p\n", urb); | ||
241 | dev_dbg(dev, " dev :%p\n", urb->dev); | ||
242 | |||
243 | usbip_dump_usb_device(urb->dev); | 236 | usbip_dump_usb_device(urb->dev); |
244 | 237 | ||
245 | dev_dbg(dev, " pipe :%08x ", urb->pipe); | 238 | dev_dbg(dev, " pipe :%08x ", urb->pipe); |
@@ -248,11 +241,9 @@ void usbip_dump_urb(struct urb *urb) | |||
248 | 241 | ||
249 | dev_dbg(dev, " status :%d\n", urb->status); | 242 | dev_dbg(dev, " status :%d\n", urb->status); |
250 | dev_dbg(dev, " transfer_flags :%08X\n", urb->transfer_flags); | 243 | dev_dbg(dev, " transfer_flags :%08X\n", urb->transfer_flags); |
251 | dev_dbg(dev, " transfer_buffer :%p\n", urb->transfer_buffer); | ||
252 | dev_dbg(dev, " transfer_buffer_length:%d\n", | 244 | dev_dbg(dev, " transfer_buffer_length:%d\n", |
253 | urb->transfer_buffer_length); | 245 | urb->transfer_buffer_length); |
254 | dev_dbg(dev, " actual_length :%d\n", urb->actual_length); | 246 | dev_dbg(dev, " actual_length :%d\n", urb->actual_length); |
255 | dev_dbg(dev, " setup_packet :%p\n", urb->setup_packet); | ||
256 | 247 | ||
257 | if (urb->setup_packet && usb_pipetype(urb->pipe) == PIPE_CONTROL) | 248 | if (urb->setup_packet && usb_pipetype(urb->pipe) == PIPE_CONTROL) |
258 | usbip_dump_usb_ctrlrequest( | 249 | usbip_dump_usb_ctrlrequest( |
@@ -262,8 +253,6 @@ void usbip_dump_urb(struct urb *urb) | |||
262 | dev_dbg(dev, " number_of_packets :%d\n", urb->number_of_packets); | 253 | dev_dbg(dev, " number_of_packets :%d\n", urb->number_of_packets); |
263 | dev_dbg(dev, " interval :%d\n", urb->interval); | 254 | dev_dbg(dev, " interval :%d\n", urb->interval); |
264 | dev_dbg(dev, " error_count :%d\n", urb->error_count); | 255 | dev_dbg(dev, " error_count :%d\n", urb->error_count); |
265 | dev_dbg(dev, " context :%p\n", urb->context); | ||
266 | dev_dbg(dev, " complete :%p\n", urb->complete); | ||
267 | } | 256 | } |
268 | EXPORT_SYMBOL_GPL(usbip_dump_urb); | 257 | EXPORT_SYMBOL_GPL(usbip_dump_urb); |
269 | 258 | ||
diff --git a/drivers/usb/usbip/vudc_rx.c b/drivers/usb/usbip/vudc_rx.c index df1e30989148..1e8a23d92cb4 100644 --- a/drivers/usb/usbip/vudc_rx.c +++ b/drivers/usb/usbip/vudc_rx.c | |||
@@ -120,6 +120,25 @@ static int v_recv_cmd_submit(struct vudc *udc, | |||
120 | urb_p->new = 1; | 120 | urb_p->new = 1; |
121 | urb_p->seqnum = pdu->base.seqnum; | 121 | urb_p->seqnum = pdu->base.seqnum; |
122 | 122 | ||
123 | if (urb_p->ep->type == USB_ENDPOINT_XFER_ISOC) { | ||
124 | /* validate packet size and number of packets */ | ||
125 | unsigned int maxp, packets, bytes; | ||
126 | |||
127 | maxp = usb_endpoint_maxp(urb_p->ep->desc); | ||
128 | maxp *= usb_endpoint_maxp_mult(urb_p->ep->desc); | ||
129 | bytes = pdu->u.cmd_submit.transfer_buffer_length; | ||
130 | packets = DIV_ROUND_UP(bytes, maxp); | ||
131 | |||
132 | if (pdu->u.cmd_submit.number_of_packets < 0 || | ||
133 | pdu->u.cmd_submit.number_of_packets > packets) { | ||
134 | dev_err(&udc->gadget.dev, | ||
135 | "CMD_SUBMIT: isoc invalid num packets %d\n", | ||
136 | pdu->u.cmd_submit.number_of_packets); | ||
137 | ret = -EMSGSIZE; | ||
138 | goto free_urbp; | ||
139 | } | ||
140 | } | ||
141 | |||
123 | ret = alloc_urb_from_cmd(&urb_p->urb, pdu, urb_p->ep->type); | 142 | ret = alloc_urb_from_cmd(&urb_p->urb, pdu, urb_p->ep->type); |
124 | if (ret) { | 143 | if (ret) { |
125 | usbip_event_add(&udc->ud, VUDC_EVENT_ERROR_MALLOC); | 144 | usbip_event_add(&udc->ud, VUDC_EVENT_ERROR_MALLOC); |
diff --git a/drivers/usb/usbip/vudc_tx.c b/drivers/usb/usbip/vudc_tx.c index 1440ae0919ec..3ccb17c3e840 100644 --- a/drivers/usb/usbip/vudc_tx.c +++ b/drivers/usb/usbip/vudc_tx.c | |||
@@ -85,6 +85,13 @@ static int v_send_ret_submit(struct vudc *udc, struct urbp *urb_p) | |||
85 | memset(&pdu_header, 0, sizeof(pdu_header)); | 85 | memset(&pdu_header, 0, sizeof(pdu_header)); |
86 | memset(&msg, 0, sizeof(msg)); | 86 | memset(&msg, 0, sizeof(msg)); |
87 | 87 | ||
88 | if (urb->actual_length > 0 && !urb->transfer_buffer) { | ||
89 | dev_err(&udc->gadget.dev, | ||
90 | "urb: actual_length %d transfer_buffer null\n", | ||
91 | urb->actual_length); | ||
92 | return -1; | ||
93 | } | ||
94 | |||
88 | if (urb_p->type == USB_ENDPOINT_XFER_ISOC) | 95 | if (urb_p->type == USB_ENDPOINT_XFER_ISOC) |
89 | iovnum = 2 + urb->number_of_packets; | 96 | iovnum = 2 + urb->number_of_packets; |
90 | else | 97 | else |
@@ -100,8 +107,8 @@ static int v_send_ret_submit(struct vudc *udc, struct urbp *urb_p) | |||
100 | 107 | ||
101 | /* 1. setup usbip_header */ | 108 | /* 1. setup usbip_header */ |
102 | setup_ret_submit_pdu(&pdu_header, urb_p); | 109 | setup_ret_submit_pdu(&pdu_header, urb_p); |
103 | usbip_dbg_stub_tx("setup txdata seqnum: %d urb: %p\n", | 110 | usbip_dbg_stub_tx("setup txdata seqnum: %d\n", |
104 | pdu_header.base.seqnum, urb); | 111 | pdu_header.base.seqnum); |
105 | usbip_header_correct_endian(&pdu_header, 1); | 112 | usbip_header_correct_endian(&pdu_header, 1); |
106 | 113 | ||
107 | iov[iovnum].iov_base = &pdu_header; | 114 | iov[iovnum].iov_base = &pdu_header; |