diff options
Diffstat (limited to 'drivers/usb/usbip/stub_tx.c')
| -rw-r--r-- | drivers/usb/usbip/stub_tx.c | 13 | 
1 files changed, 10 insertions, 3 deletions
| diff --git a/drivers/usb/usbip/stub_tx.c b/drivers/usb/usbip/stub_tx.c index b18bce96c212..f0ec41a50cbc 100644 --- a/drivers/usb/usbip/stub_tx.c +++ b/drivers/usb/usbip/stub_tx.c @@ -88,7 +88,7 @@ void stub_complete(struct urb *urb)  	/* link a urb to the queue of tx. */  	spin_lock_irqsave(&sdev->priv_lock, flags);  	if (sdev->ud.tcp_socket == NULL) { -		usbip_dbg_stub_tx("ignore urb for closed connection %p", urb); +		usbip_dbg_stub_tx("ignore urb for closed connection\n");  		/* It will be freed in stub_device_cleanup_urbs(). */  	} else if (priv->unlinking) {  		stub_enqueue_ret_unlink(sdev, priv->seqnum, urb->status); @@ -167,6 +167,13 @@ static int stub_send_ret_submit(struct stub_device *sdev)  		memset(&pdu_header, 0, sizeof(pdu_header));  		memset(&msg, 0, sizeof(msg)); +		if (urb->actual_length > 0 && !urb->transfer_buffer) { +			dev_err(&sdev->udev->dev, +				"urb: actual_length %d transfer_buffer null\n", +				urb->actual_length); +			return -1; +		} +  		if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS)  			iovnum = 2 + urb->number_of_packets;  		else @@ -183,8 +190,8 @@ static int stub_send_ret_submit(struct stub_device *sdev)  		/* 1. setup usbip_header */  		setup_ret_submit_pdu(&pdu_header, urb); -		usbip_dbg_stub_tx("setup txdata seqnum: %d urb: %p\n", -				  pdu_header.base.seqnum, urb); +		usbip_dbg_stub_tx("setup txdata seqnum: %d\n", +				  pdu_header.base.seqnum);  		usbip_header_correct_endian(&pdu_header, 1);  		iov[iovnum].iov_base = &pdu_header; |