All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@linuxfoundation.org>
To: changbin.du@intel.com
Cc: stern@rowland.harvard.edu, baolu.lu@linux.intel.com,
	chasemetzger15@gmail.com, balbi@ti.com, kborer@gmail.com,
	mjg59@coreos.com, jun.li@freescale.com,
	Robert.Schlabbach@gmx.net, linux-usb@vger.kernel.org,
	linux-kernel@vger.kernel.org, tonyb@cybernetics.com,
	joe.lawrence@stratus.com
Subject: Re: [PATCH] usb: hub: fix panic caused by NULL bos pointer during reset device
Date: Tue, 26 Apr 2016 15:16:01 -0700	[thread overview]
Message-ID: <20160426221601.GA23085@kroah.com> (raw)
In-Reply-To: <1457428517-3099-1-git-send-email-changbin.du@intel.com>

On Tue, Mar 08, 2016 at 05:15:17PM +0800, changbin.du@intel.com wrote:
> From: "Du, Changbin" <changbin.du@intel.com>
> 
> This is a reworked patch based on reverted commit d8f00cd685f5 ("usb:
> hub: do not clear BOS field during reset device").
> 
> The privious one caused double mem-free if run to re_enumerate label.
> New patch title changed to distinguish from old one. And I have tested
> it with memory debugging options.
> 
> In function usb_reset_and_verify_device, the old BOS descriptor may
> still be used before allocating a new one. (usb_disable_lpm function
> uses it under the situation that it fails at usb_disable_link_state.)
> So we cannot set the udev->bos to NULL before that, just keep what it
> was. It will be overwrite when allocating a new one.
> 
> How to reproduce:
> 1. connect one usb3 hub to xhci port.
> 2. connect several lpm-capable super-speed usb disk to the hub.
> 3. copy big files to the usb disks.
> 4. disconnect the hub and repeat step 1-4.
> 
> Crash log:
> BUG: unable to handle kernel NULL pointer dereference at
> 0000000000000010
> IP: [<ffffffff8171f98d>] usb_enable_link_state+0x2d/0x2f0
> Call Trace:
> [<ffffffff8171ed5b>] ? usb_set_lpm_timeout+0x12b/0x140
> [<ffffffff8171fcd1>] usb_enable_lpm+0x81/0xa0
> [<ffffffff8171fdd8>] usb_disable_lpm+0xa8/0xc0
> [<ffffffff8171fe1c>] usb_unlocked_disable_lpm+0x2c/0x50
> [<ffffffff81723933>] usb_reset_and_verify_device+0xc3/0x710
> [<ffffffff8172c4ed>] ? usb_sg_wait+0x13d/0x190
> [<ffffffff81724743>] usb_reset_device+0x133/0x280
> [<ffffffff8179ccd1>] usb_stor_port_reset+0x61/0x70
> [<ffffffff8179cd68>] usb_stor_invoke_transport+0x88/0x520
> 
> Signed-off-by: Du, Changbin <changbin.du@intel.com>
> ---
>  drivers/usb/core/hub.c | 14 +++++++++-----
>  1 file changed, 9 insertions(+), 5 deletions(-)

Is this patch still needed?  I thought we had some other fix in this
area...

confused,

greg k-h


> 
> diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
> index 51b43691..27444e5 100644
> --- a/drivers/usb/core/hub.c
> +++ b/drivers/usb/core/hub.c
> @@ -5401,7 +5401,6 @@ static int usb_reset_and_verify_device(struct usb_device *udev)
>  	}
>  
>  	bos = udev->bos;
> -	udev->bos = NULL;
>  
>  	for (i = 0; i < SET_CONFIG_TRIES; ++i) {
>  
> @@ -5494,13 +5493,18 @@ done:
>  	usb_set_usb2_hardware_lpm(udev, 1);
>  	usb_unlocked_enable_lpm(udev);
>  	usb_enable_ltm(udev);
> -	usb_release_bos_descriptor(udev);
> -	udev->bos = bos;
> +	/* release the new BOS descriptor allocated by hub_port_init() */
> +	if (udev->bos != bos) {
> +		usb_release_bos_descriptor(udev);
> +		udev->bos = bos;
> +	}
>  	return 0;
>  
>  re_enumerate:
> -	usb_release_bos_descriptor(udev);
> -	udev->bos = bos;
> +	if (udev->bos != bos) {
> +		usb_release_bos_descriptor(udev);
> +		udev->bos = bos;
> +	}
>  re_enumerate_no_bos:
>  	/* LPM state doesn't matter when we're about to destroy the device. */
>  	hub_port_logical_disconnect(parent_hub, port1);
> -- 
> 2.5.0
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2016-04-26 22:19 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-08  9:15 [PATCH] usb: hub: fix panic caused by NULL bos pointer during reset device changbin.du
2016-04-26 22:16 ` Greg KH [this message]
2016-04-27  2:53   ` Du, Changbin
2016-04-27 13:35     ` Tony Battersby
2016-05-03 21:18       ` Greg KH
2016-05-04  2:21         ` Du, Changbin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160426221601.GA23085@kroah.com \
    --to=gregkh@linuxfoundation.org \
    --cc=Robert.Schlabbach@gmx.net \
    --cc=balbi@ti.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=changbin.du@intel.com \
    --cc=chasemetzger15@gmail.com \
    --cc=joe.lawrence@stratus.com \
    --cc=jun.li@freescale.com \
    --cc=kborer@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=mjg59@coreos.com \
    --cc=stern@rowland.harvard.edu \
    --cc=tonyb@cybernetics.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.