Re: System crashes when usb_free_streams API used

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 30, 2010 at 5:14 AM, Sarah Sharp
<sarah.a.sharp@xxxxxxxxxxxxxxx> wrote:
> Ramya,
>
> Can you try this patch?  It's also on the xhci-streams branch (which
> should become obsolete soon, since Greg KH queued the streams patches
> and the streams patches are now on the master branch).  Please let me
> know if this fixes the crash you saw.

Dear Sarah,

Thank you very much. After applying this (below) patch, my driver is
working fine without any system crash.

By the way, I did not find any kernel version which includes your
stream patches at http://www.kernel.org/pub/linux/kernel/v2.6/ I did
not find them in 2.6.33.3 kernel version, which is the latest at
http://www.kernel.org/pub/linux/kernel/v2.6/. Please let me know the
master kernel version that includes your stream patches.

Thanks and Regards,
Ramya

> Sarah Sharp
>
>
> From a4136735a2ab4ff53daff91d1f66911b0da3e3b4 Mon Sep 17 00:00:00 2001
> From: Sarah Sharp <sarah.a.sharp@xxxxxxxxxxxxxxx>
> Date: Thu, 29 Apr 2010 16:14:51 -0700
> Subject: [PATCH] xhci: Avoid double free after streams are disabled.
>
> When a device is disconnected, xhci_free_virt_device() is called.  Ramya
> found that if the device had streams enabled, and then the driver freed
> the streams with a call to usb_free_streams(), then about a minute after
> he had called this, his machine crashed with a Bad DMA error.  It turns
> out that xhci_free_virt_device() would attempt to free the endpoint's
> stream_info data structure if it wasn't NULL, and the free streams
> function was not setting it to NULL after freeing it.
>
> Signed-off-by: Sarah Sharp <sarah.a.sharp@xxxxxxxxxxxxxxx>
> Cc: Ramya Desai <ramya.desai@xxxxxxxxx>
> ---
>  drivers/usb/host/xhci.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
> index a22a1e6..958cb1c 100644
> --- a/drivers/usb/host/xhci.c
> +++ b/drivers/usb/host/xhci.c
> @@ -1751,6 +1751,7 @@ cleanup:
>        for (i = 0; i < num_eps; i++) {
>                ep_index = xhci_get_endpoint_index(&eps[i]->desc);
>                xhci_free_stream_info(xhci, vdev->eps[ep_index].stream_info);
> +               vdev->eps[ep_index].stream_info = NULL;
>                /* FIXME Unset maxPstreams in endpoint context and
>                 * update deq ptr to point to normal string ring.
>                 */
> @@ -1831,6 +1832,7 @@ int xhci_free_streams(struct usb_hcd *hcd, struct usb_device *udev,
>        for (i = 0; i < num_eps; i++) {
>                ep_index = xhci_get_endpoint_index(&eps[i]->desc);
>                xhci_free_stream_info(xhci, vdev->eps[ep_index].stream_info);
> +               vdev->eps[ep_index].stream_info = NULL;
>                /* FIXME Unset maxPstreams in endpoint context and
>                 * update deq ptr to point to normal string ring.
>                 */
> --
> 1.6.3.3
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux