On Thu, Apr 23, 2015 at 4:06 PM, Johan Hovold <johan@xxxxxxxxxx> wrote: > Make sure only to copy any actual data rather than the whole buffer, > when releasing the temporary buffer used for unaligned non-isochronous > transfers. > > Compile-tested only. > > Signed-off-by: Johan Hovold <johan@xxxxxxxxxx> > --- > drivers/usb/host/ehci-tegra.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c > index ff9af29b4e9f..4031b372008e 100644 > --- a/drivers/usb/host/ehci-tegra.c > +++ b/drivers/usb/host/ehci-tegra.c > @@ -304,6 +304,7 @@ struct dma_aligned_buffer { > static void free_dma_aligned_buffer(struct urb *urb) > { > struct dma_aligned_buffer *temp; > + size_t length; > > if (!(urb->transfer_flags & URB_ALIGNED_TEMP_BUFFER)) > return; > @@ -311,9 +312,14 @@ static void free_dma_aligned_buffer(struct urb *urb) > temp = container_of(urb->transfer_buffer, > struct dma_aligned_buffer, data); > > - if (usb_urb_dir_in(urb)) > - memcpy(temp->old_xfer_buffer, temp->data, > - urb->transfer_buffer_length); > + if (usb_urb_dir_in(urb)) { > + if (usb_pipeisoc(urb->pipe)) > + length = urb->transfer_buffer_length; > + else > + length = urb->actual_length; > + > + memcpy(temp->old_xfer_buffer, temp->data, length); > + } > urb->transfer_buffer = temp->old_xfer_buffer; > kfree(temp->kmalloc_ptr); Out of curiosity: any reason not to declare that length variable inside this new compound? Thanks, Frans -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html