• Du, Changbin's avatar
    usb: hub: do not clear BOS field during reset device · c0473173
    Du, Changbin authored
    commit d8f00cd6 upstream.
    
    In function usb_reset_and_verify_device, the old BOS descriptor may
    still be used before allocating a new one. (usb_unlocked_disable_lpm
    function uses it under the situation that it fails to disable lpm.)
    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.
    
    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: default avatarDu, Changbin <changbin.du@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    c0473173
hub.c 159 KB