summaryrefslogtreecommitdiffstats
path: root/drivers/usb/storage
diff options
context:
space:
mode:
authorOliver Neukum <oneukum@suse.de>2014-03-28 11:29:25 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-04-16 14:04:59 -0700
commitc637f1fa7b0452b71eebd35d00906d371c04714e (patch)
treee99bb91252f43a54926e3461f552be50a5e0ab38 /drivers/usb/storage
parente7eda9329372f5e436e5a9291eb115eab0feae02 (diff)
downloadop-kernel-dev-c637f1fa7b0452b71eebd35d00906d371c04714e.zip
op-kernel-dev-c637f1fa7b0452b71eebd35d00906d371c04714e.tar.gz
uas: fix error handling during scsi_scan()
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>
Diffstat (limited to 'drivers/usb/storage')
-rw-r--r--drivers/usb/storage/uas.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
index 8f42226..fcab9b7 100644
--- a/drivers/usb/storage/uas.c
+++ b/drivers/usb/storage/uas.c
@@ -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)
OpenPOWER on IntegriCloud