usb: gadget: accessory: align read length to maxp
Bug: 63172680
Change-Id: I7cd33ca3ea7efd52bc72cce2c56a6622cd5f87fb
Signed-off-by: Mian Yousaf Kaukab <yousaf.kaukab@intel.com>
Signed-off-by: Ajay Dudani <adudani@google.com>
diff --git a/drivers/usb/gadget/function/f_accessory.c b/drivers/usb/gadget/function/f_accessory.c
index 3384b54..78f819d 100644
--- a/drivers/usb/gadget/function/f_accessory.c
+++ b/drivers/usb/gadget/function/f_accessory.c
@@ -613,6 +613,7 @@
ssize_t r = count;
unsigned xfer;
int ret = 0;
+ int aligned_count;
pr_debug("acc_read(%zu)\n", count);
@@ -621,8 +622,9 @@
return -ENODEV;
}
- if (count > BULK_BUFFER_SIZE)
- count = BULK_BUFFER_SIZE;
+ aligned_count = ALIGN(count, dev->ep_out->maxpacket);
+ if (aligned_count > BULK_BUFFER_SIZE)
+ aligned_count = BULK_BUFFER_SIZE;
/* we will block until we're online */
pr_debug("acc_read: waiting for online\n");
@@ -641,7 +643,7 @@
requeue_req:
/* queue a request */
req = dev->rx_req[0];
- req->length = count;
+ req->length = aligned_count;
dev->rx_done = 0;
ret = usb_ep_queue(dev->ep_out, req, GFP_KERNEL);
if (ret < 0) {