1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (C) 2003-2008 Takahiro Hirofuchi
6 #include <asm/byteorder.h>
7 #include <linux/kthread.h>
9 #include <linux/usb/hcd.h>
10 #include <linux/scatterlist.h>
12 #include "usbip_common.h"
15 static int is_clear_halt_cmd(struct urb
*urb
)
17 struct usb_ctrlrequest
*req
;
19 req
= (struct usb_ctrlrequest
*) urb
->setup_packet
;
21 return (req
->bRequest
== USB_REQ_CLEAR_FEATURE
) &&
22 (req
->bRequestType
== USB_RECIP_ENDPOINT
) &&
23 (req
->wValue
== USB_ENDPOINT_HALT
);
26 static int is_set_interface_cmd(struct urb
*urb
)
28 struct usb_ctrlrequest
*req
;
30 req
= (struct usb_ctrlrequest
*) urb
->setup_packet
;
32 return (req
->bRequest
== USB_REQ_SET_INTERFACE
) &&
33 (req
->bRequestType
== USB_RECIP_INTERFACE
);
36 static int is_set_configuration_cmd(struct urb
*urb
)
38 struct usb_ctrlrequest
*req
;
40 req
= (struct usb_ctrlrequest
*) urb
->setup_packet
;
42 return (req
->bRequest
== USB_REQ_SET_CONFIGURATION
) &&
43 (req
->bRequestType
== USB_RECIP_DEVICE
);
46 static int is_reset_device_cmd(struct urb
*urb
)
48 struct usb_ctrlrequest
*req
;
52 req
= (struct usb_ctrlrequest
*) urb
->setup_packet
;
53 value
= le16_to_cpu(req
->wValue
);
54 index
= le16_to_cpu(req
->wIndex
);
56 if ((req
->bRequest
== USB_REQ_SET_FEATURE
) &&
57 (req
->bRequestType
== USB_RT_PORT
) &&
58 (value
== USB_PORT_FEAT_RESET
)) {
59 usbip_dbg_stub_rx("reset_device_cmd, port %u\n", index
);
65 static int tweak_clear_halt_cmd(struct urb
*urb
)
67 struct usb_ctrlrequest
*req
;
73 req
= (struct usb_ctrlrequest
*) urb
->setup_packet
;
76 * The stalled endpoint is specified in the wIndex value. The endpoint
77 * of the urb is the target of this clear_halt request (i.e., control
80 target_endp
= le16_to_cpu(req
->wIndex
) & 0x000f;
82 /* the stalled endpoint direction is IN or OUT?. USB_DIR_IN is 0x80. */
83 target_dir
= le16_to_cpu(req
->wIndex
) & 0x0080;
86 target_pipe
= usb_rcvctrlpipe(urb
->dev
, target_endp
);
88 target_pipe
= usb_sndctrlpipe(urb
->dev
, target_endp
);
90 ret
= usb_clear_halt(urb
->dev
, target_pipe
);
92 dev_err(&urb
->dev
->dev
,
93 "usb_clear_halt error: devnum %d endp %d ret %d\n",
94 urb
->dev
->devnum
, target_endp
, ret
);
96 dev_info(&urb
->dev
->dev
,
97 "usb_clear_halt done: devnum %d endp %d\n",
98 urb
->dev
->devnum
, target_endp
);
103 static int tweak_set_interface_cmd(struct urb
*urb
)
105 struct usb_ctrlrequest
*req
;
110 req
= (struct usb_ctrlrequest
*) urb
->setup_packet
;
111 alternate
= le16_to_cpu(req
->wValue
);
112 interface
= le16_to_cpu(req
->wIndex
);
114 usbip_dbg_stub_rx("set_interface: inf %u alt %u\n",
115 interface
, alternate
);
117 ret
= usb_set_interface(urb
->dev
, interface
, alternate
);
119 dev_err(&urb
->dev
->dev
,
120 "usb_set_interface error: inf %u alt %u ret %d\n",
121 interface
, alternate
, ret
);
123 dev_info(&urb
->dev
->dev
,
124 "usb_set_interface done: inf %u alt %u\n",
125 interface
, alternate
);
130 static int tweak_set_configuration_cmd(struct urb
*urb
)
132 struct stub_priv
*priv
= (struct stub_priv
*) urb
->context
;
133 struct stub_device
*sdev
= priv
->sdev
;
134 struct usb_ctrlrequest
*req
;
138 req
= (struct usb_ctrlrequest
*) urb
->setup_packet
;
139 config
= le16_to_cpu(req
->wValue
);
141 err
= usb_set_configuration(sdev
->udev
, config
);
142 if (err
&& err
!= -ENODEV
)
143 dev_err(&sdev
->udev
->dev
, "can't set config #%d, error %d\n",
148 static int tweak_reset_device_cmd(struct urb
*urb
)
150 struct stub_priv
*priv
= (struct stub_priv
*) urb
->context
;
151 struct stub_device
*sdev
= priv
->sdev
;
153 dev_info(&urb
->dev
->dev
, "usb_queue_reset_device\n");
155 if (usb_lock_device_for_reset(sdev
->udev
, NULL
) < 0) {
156 dev_err(&urb
->dev
->dev
, "could not obtain lock to reset device\n");
159 usb_reset_device(sdev
->udev
);
160 usb_unlock_device(sdev
->udev
);
166 * clear_halt, set_interface, and set_configuration require special tricks.
168 static void tweak_special_requests(struct urb
*urb
)
170 if (!urb
|| !urb
->setup_packet
)
173 if (usb_pipetype(urb
->pipe
) != PIPE_CONTROL
)
176 if (is_clear_halt_cmd(urb
))
177 /* tweak clear_halt */
178 tweak_clear_halt_cmd(urb
);
180 else if (is_set_interface_cmd(urb
))
181 /* tweak set_interface */
182 tweak_set_interface_cmd(urb
);
184 else if (is_set_configuration_cmd(urb
))
185 /* tweak set_configuration */
186 tweak_set_configuration_cmd(urb
);
188 else if (is_reset_device_cmd(urb
))
189 tweak_reset_device_cmd(urb
);
191 usbip_dbg_stub_rx("no need to tweak\n");
195 * stub_recv_unlink() unlinks the URB by a call to usb_unlink_urb().
196 * By unlinking the urb asynchronously, stub_rx can continuously
197 * process coming urbs. Even if the urb is unlinked, its completion
198 * handler will be called and stub_tx will send a return pdu.
200 * See also comments about unlinking strategy in vhci_hcd.c.
202 static int stub_recv_cmd_unlink(struct stub_device
*sdev
,
203 struct usbip_header
*pdu
)
207 struct stub_priv
*priv
;
209 spin_lock_irqsave(&sdev
->priv_lock
, flags
);
211 list_for_each_entry(priv
, &sdev
->priv_init
, list
) {
212 if (priv
->seqnum
!= pdu
->u
.cmd_unlink
.seqnum
)
216 * This matched urb is not completed yet (i.e., be in
217 * flight in usb hcd hardware/driver). Now we are
218 * cancelling it. The unlinking flag means that we are
219 * now not going to return the normal result pdu of a
220 * submission request, but going to return a result pdu
221 * of the unlink request.
226 * In the case that unlinking flag is on, prev->seqnum
227 * is changed from the seqnum of the cancelling urb to
228 * the seqnum of the unlink request. This will be used
229 * to make the result pdu of the unlink request.
231 priv
->seqnum
= pdu
->base
.seqnum
;
233 spin_unlock_irqrestore(&sdev
->priv_lock
, flags
);
236 * usb_unlink_urb() is now out of spinlocking to avoid
237 * spinlock recursion since stub_complete() is
238 * sometimes called in this context but not in the
239 * interrupt context. If stub_complete() is executed
240 * before we call usb_unlink_urb(), usb_unlink_urb()
241 * will return an error value. In this case, stub_tx
242 * will return the result pdu of this unlink request
243 * though submission is completed and actual unlinking
244 * is not executed. OK?
246 /* In the above case, urb->status is not -ECONNRESET,
247 * so a driver in a client host will know the failure
248 * of the unlink request ?
250 for (i
= priv
->completed_urbs
; i
< priv
->num_urbs
; i
++) {
251 ret
= usb_unlink_urb(priv
->urbs
[i
]);
252 if (ret
!= -EINPROGRESS
)
253 dev_err(&priv
->urbs
[i
]->dev
->dev
,
254 "failed to unlink %d/%d urb of seqnum %lu, ret %d\n",
255 i
+ 1, priv
->num_urbs
,
261 usbip_dbg_stub_rx("seqnum %d is not pending\n",
262 pdu
->u
.cmd_unlink
.seqnum
);
265 * The urb of the unlink target is not found in priv_init queue. It was
266 * already completed and its results is/was going to be sent by a
267 * CMD_RET pdu. In this case, usb_unlink_urb() is not needed. We only
268 * return the completeness of this unlink request to vhci_hcd.
270 stub_enqueue_ret_unlink(sdev
, pdu
->base
.seqnum
, 0);
272 spin_unlock_irqrestore(&sdev
->priv_lock
, flags
);
277 static int valid_request(struct stub_device
*sdev
, struct usbip_header
*pdu
)
279 struct usbip_device
*ud
= &sdev
->ud
;
282 if (pdu
->base
.devid
== sdev
->devid
) {
283 spin_lock_irq(&ud
->lock
);
284 if (ud
->status
== SDEV_ST_USED
) {
285 /* A request is valid. */
288 spin_unlock_irq(&ud
->lock
);
294 static struct stub_priv
*stub_priv_alloc(struct stub_device
*sdev
,
295 struct usbip_header
*pdu
)
297 struct stub_priv
*priv
;
298 struct usbip_device
*ud
= &sdev
->ud
;
301 spin_lock_irqsave(&sdev
->priv_lock
, flags
);
303 priv
= kmem_cache_zalloc(stub_priv_cache
, GFP_ATOMIC
);
305 dev_err(&sdev
->udev
->dev
, "alloc stub_priv\n");
306 spin_unlock_irqrestore(&sdev
->priv_lock
, flags
);
307 usbip_event_add(ud
, SDEV_EVENT_ERROR_MALLOC
);
311 priv
->seqnum
= pdu
->base
.seqnum
;
315 * After a stub_priv is linked to a list_head,
316 * our error handler can free allocated data.
318 list_add_tail(&priv
->list
, &sdev
->priv_init
);
320 spin_unlock_irqrestore(&sdev
->priv_lock
, flags
);
325 static int get_pipe(struct stub_device
*sdev
, struct usbip_header
*pdu
)
327 struct usb_device
*udev
= sdev
->udev
;
328 struct usb_host_endpoint
*ep
;
329 struct usb_endpoint_descriptor
*epd
= NULL
;
330 int epnum
= pdu
->base
.ep
;
331 int dir
= pdu
->base
.direction
;
333 if (epnum
< 0 || epnum
> 15)
336 if (dir
== USBIP_DIR_IN
)
337 ep
= udev
->ep_in
[epnum
& 0x7f];
339 ep
= udev
->ep_out
[epnum
& 0x7f];
345 if (usb_endpoint_xfer_control(epd
)) {
346 if (dir
== USBIP_DIR_OUT
)
347 return usb_sndctrlpipe(udev
, epnum
);
349 return usb_rcvctrlpipe(udev
, epnum
);
352 if (usb_endpoint_xfer_bulk(epd
)) {
353 if (dir
== USBIP_DIR_OUT
)
354 return usb_sndbulkpipe(udev
, epnum
);
356 return usb_rcvbulkpipe(udev
, epnum
);
359 if (usb_endpoint_xfer_int(epd
)) {
360 if (dir
== USBIP_DIR_OUT
)
361 return usb_sndintpipe(udev
, epnum
);
363 return usb_rcvintpipe(udev
, epnum
);
366 if (usb_endpoint_xfer_isoc(epd
)) {
367 /* validate number of packets */
368 if (pdu
->u
.cmd_submit
.number_of_packets
< 0 ||
369 pdu
->u
.cmd_submit
.number_of_packets
>
370 USBIP_MAX_ISO_PACKETS
) {
371 dev_err(&sdev
->udev
->dev
,
372 "CMD_SUBMIT: isoc invalid num packets %d\n",
373 pdu
->u
.cmd_submit
.number_of_packets
);
376 if (dir
== USBIP_DIR_OUT
)
377 return usb_sndisocpipe(udev
, epnum
);
379 return usb_rcvisocpipe(udev
, epnum
);
384 dev_err(&sdev
->udev
->dev
, "CMD_SUBMIT: invalid epnum %d\n", epnum
);
388 static void masking_bogus_flags(struct urb
*urb
)
391 struct usb_device
*dev
;
392 struct usb_host_endpoint
*ep
;
394 unsigned int allowed
;
396 if (!urb
|| urb
->hcpriv
|| !urb
->complete
)
399 if ((!dev
) || (dev
->state
< USB_STATE_UNAUTHENTICATED
))
402 ep
= (usb_pipein(urb
->pipe
) ? dev
->ep_in
: dev
->ep_out
)
403 [usb_pipeendpoint(urb
->pipe
)];
407 xfertype
= usb_endpoint_type(&ep
->desc
);
408 if (xfertype
== USB_ENDPOINT_XFER_CONTROL
) {
409 struct usb_ctrlrequest
*setup
=
410 (struct usb_ctrlrequest
*) urb
->setup_packet
;
414 is_out
= !(setup
->bRequestType
& USB_DIR_IN
) ||
417 is_out
= usb_endpoint_dir_out(&ep
->desc
);
420 /* enforce simple/standard policy */
421 allowed
= (URB_NO_TRANSFER_DMA_MAP
| URB_NO_INTERRUPT
|
422 URB_DIR_MASK
| URB_FREE_BUFFER
);
424 case USB_ENDPOINT_XFER_BULK
:
426 allowed
|= URB_ZERO_PACKET
;
428 default: /* all non-iso endpoints */
430 allowed
|= URB_SHORT_NOT_OK
;
432 case USB_ENDPOINT_XFER_ISOC
:
433 allowed
|= URB_ISO_ASAP
;
436 urb
->transfer_flags
&= allowed
;
439 static int stub_recv_xbuff(struct usbip_device
*ud
, struct stub_priv
*priv
)
444 for (i
= 0; i
< priv
->num_urbs
; i
++) {
445 ret
= usbip_recv_xbuff(ud
, priv
->urbs
[i
]);
453 static void stub_recv_cmd_submit(struct stub_device
*sdev
,
454 struct usbip_header
*pdu
)
456 struct stub_priv
*priv
;
457 struct usbip_device
*ud
= &sdev
->ud
;
458 struct usb_device
*udev
= sdev
->udev
;
459 struct scatterlist
*sgl
= NULL
, *sg
;
461 unsigned long long buf_len
;
464 int pipe
= get_pipe(sdev
, pdu
);
465 int use_sg
= pdu
->u
.cmd_submit
.transfer_flags
& URB_DMA_MAP_SG
;
474 * Smatch reported the error case where use_sg is true and buf_len is 0.
475 * In this case, It adds SDEV_EVENT_ERROR_MALLOC and stub_priv will be
476 * released by stub event handler and connection will be shut down.
478 priv
= stub_priv_alloc(sdev
, pdu
);
482 buf_len
= (unsigned long long)pdu
->u
.cmd_submit
.transfer_buffer_length
;
484 if (use_sg
&& !buf_len
) {
485 dev_err(&udev
->dev
, "sg buffer with zero length\n");
489 /* allocate urb transfer buffer, if needed */
492 sgl
= sgl_alloc(buf_len
, GFP_KERNEL
, &nents
);
496 /* Check if the server's HCD supports SG */
497 if (!udev
->bus
->sg_tablesize
) {
499 * If the server's HCD doesn't support SG, break
500 * a single SG request into several URBs and map
501 * each SG list entry to corresponding URB
502 * buffer. The previously allocated SG list is
503 * stored in priv->sgl (If the server's HCD
504 * support SG, SG list is stored only in
505 * urb->sg) and it is used as an indicator that
506 * the server split single SG request into
507 * several URBs. Later, priv->sgl is used by
508 * stub_complete() and stub_send_ret_submit() to
509 * reassemble the divied URBs.
513 priv
->completed_urbs
= 0;
514 pdu
->u
.cmd_submit
.transfer_flags
&=
518 buffer
= kzalloc(buf_len
, GFP_KERNEL
);
524 /* allocate urb array */
525 priv
->num_urbs
= num_urbs
;
526 priv
->urbs
= kmalloc_array(num_urbs
, sizeof(*priv
->urbs
), GFP_KERNEL
);
532 if (usb_pipeisoc(pipe
))
533 np
= pdu
->u
.cmd_submit
.number_of_packets
;
535 priv
->urbs
[0] = usb_alloc_urb(np
, GFP_KERNEL
);
541 priv
->urbs
[0]->sg
= sgl
;
542 priv
->urbs
[0]->num_sgs
= nents
;
543 priv
->urbs
[0]->transfer_buffer
= NULL
;
545 priv
->urbs
[0]->transfer_buffer
= buffer
;
549 /* copy urb setup packet */
550 priv
->urbs
[0]->setup_packet
= kmemdup(&pdu
->u
.cmd_submit
.setup
,
552 if (!priv
->urbs
[0]->setup_packet
) {
553 usbip_event_add(ud
, SDEV_EVENT_ERROR_MALLOC
);
557 usbip_pack_pdu(pdu
, priv
->urbs
[0], USBIP_CMD_SUBMIT
, 0);
559 for_each_sg(sgl
, sg
, nents
, i
) {
560 priv
->urbs
[i
] = usb_alloc_urb(0, GFP_KERNEL
);
561 /* The URBs which is previously allocated will be freed
562 * in stub_device_cleanup_urbs() if error occurs.
567 usbip_pack_pdu(pdu
, priv
->urbs
[i
], USBIP_CMD_SUBMIT
, 0);
568 priv
->urbs
[i
]->transfer_buffer
= sg_virt(sg
);
569 priv
->urbs
[i
]->transfer_buffer_length
= sg
->length
;
574 for (i
= 0; i
< num_urbs
; i
++) {
575 /* set other members from the base header of pdu */
576 priv
->urbs
[i
]->context
= (void *) priv
;
577 priv
->urbs
[i
]->dev
= udev
;
578 priv
->urbs
[i
]->pipe
= pipe
;
579 priv
->urbs
[i
]->complete
= stub_complete
;
581 /* no need to submit an intercepted request, but harmless? */
582 tweak_special_requests(priv
->urbs
[i
]);
584 masking_bogus_flags(priv
->urbs
[i
]);
587 if (stub_recv_xbuff(ud
, priv
) < 0)
590 if (usbip_recv_iso(ud
, priv
->urbs
[0]) < 0)
593 /* urb is now ready to submit */
594 for (i
= 0; i
< priv
->num_urbs
; i
++) {
595 ret
= usb_submit_urb(priv
->urbs
[i
], GFP_KERNEL
);
598 usbip_dbg_stub_rx("submit urb ok, seqnum %u\n",
601 dev_err(&udev
->dev
, "submit_urb error, %d\n", ret
);
602 usbip_dump_header(pdu
);
603 usbip_dump_urb(priv
->urbs
[i
]);
607 * This connection will be discarded.
609 usbip_event_add(ud
, SDEV_EVENT_ERROR_SUBMIT
);
614 usbip_dbg_stub_rx("Leave\n");
623 usbip_event_add(ud
, SDEV_EVENT_ERROR_MALLOC
);
627 static void stub_rx_pdu(struct usbip_device
*ud
)
630 struct usbip_header pdu
;
631 struct stub_device
*sdev
= container_of(ud
, struct stub_device
, ud
);
632 struct device
*dev
= &sdev
->udev
->dev
;
634 usbip_dbg_stub_rx("Enter\n");
636 memset(&pdu
, 0, sizeof(pdu
));
638 /* receive a pdu header */
639 ret
= usbip_recv(ud
->tcp_socket
, &pdu
, sizeof(pdu
));
640 if (ret
!= sizeof(pdu
)) {
641 dev_err(dev
, "recv a header, %d\n", ret
);
642 usbip_event_add(ud
, SDEV_EVENT_ERROR_TCP
);
646 usbip_header_correct_endian(&pdu
, 0);
648 if (usbip_dbg_flag_stub_rx
)
649 usbip_dump_header(&pdu
);
651 if (!valid_request(sdev
, &pdu
)) {
652 dev_err(dev
, "recv invalid request\n");
653 usbip_event_add(ud
, SDEV_EVENT_ERROR_TCP
);
657 switch (pdu
.base
.command
) {
658 case USBIP_CMD_UNLINK
:
659 stub_recv_cmd_unlink(sdev
, &pdu
);
662 case USBIP_CMD_SUBMIT
:
663 stub_recv_cmd_submit(sdev
, &pdu
);
668 dev_err(dev
, "unknown pdu\n");
669 usbip_event_add(ud
, SDEV_EVENT_ERROR_TCP
);
674 int stub_rx_loop(void *data
)
676 struct usbip_device
*ud
= data
;
678 while (!kthread_should_stop()) {
679 if (usbip_event_happened(ud
))