]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
uas: fix error handling during scsi_scan()
authorOliver Neukum <oneukum@suse.de>
Fri, 28 Mar 2014 10:29:25 +0000 (11:29 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 16 Apr 2014 21:04:59 +0000 (14:04 -0700)
intfdata is set only after scsi_scan(). uas_pre_reset() however
needs intfdata to be valid and will follow the NULL pointer
killing khubd. intfdata must be preemptively set before the
host is registered and undone in the error case.

Signed-off-by: Oliver Neukum <oliver@neukum.org>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/storage/uas.c

index 8f4222640bd6b7061d412086f39a1d4fe301c880..fcab9b79d9fb9095d150582a21a91a3374ccc615 100644 (file)
@@ -1096,16 +1096,17 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id)
        if (result)
                goto free_streams;
 
+       usb_set_intfdata(intf, shost);
        result = scsi_add_host(shost, &intf->dev);
        if (result)
                goto free_streams;
 
        scsi_scan_host(shost);
-       usb_set_intfdata(intf, shost);
        return result;
 
 free_streams:
        uas_free_streams(devinfo);
+       usb_set_intfdata(intf, NULL);
 set_alt0:
        usb_set_interface(udev, intf->altsetting[0].desc.bInterfaceNumber, 0);
        if (shost)