usb: hcd: do not call whc_clean_up on wch_init call failure
whc_init already calls whc_clean_up if an error occurs during the initialization, so calling it again if whc_init fails at the end of wch_probe will cause double free errors. Fix this by bailing out on an whc_init failure to a new label that avoids doing the duplicated whc_clean_up. Signed-off-by: Colin Ian King <colin.king@canonical.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
1507372b97
commit
328fafb94f
|
@ -257,14 +257,14 @@ static int whc_probe(struct umc_dev *umc)
|
|||
|
||||
ret = whc_init(whc);
|
||||
if (ret)
|
||||
goto error;
|
||||
goto error_whc_init;
|
||||
|
||||
wusbhc->dev = dev;
|
||||
wusbhc->uwb_rc = uwb_rc_get_by_grandpa(umc->dev.parent);
|
||||
if (!wusbhc->uwb_rc) {
|
||||
ret = -ENODEV;
|
||||
dev_err(dev, "cannot get radio controller\n");
|
||||
goto error;
|
||||
goto error_uwb_rc;
|
||||
}
|
||||
|
||||
if (whc->n_devices > USB_MAXCHILDREN) {
|
||||
|
@ -311,8 +311,9 @@ error_usb_add_hcd:
|
|||
wusbhc_destroy(wusbhc);
|
||||
error_wusbhc_create:
|
||||
uwb_rc_put(wusbhc->uwb_rc);
|
||||
error:
|
||||
error_uwb_rc:
|
||||
whc_clean_up(whc);
|
||||
error_whc_init:
|
||||
usb_put_hcd(usb_hcd);
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue