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) {