Bluetooth: btusb: fix wakeup source leak on probe failure

Make sure to disable wakeup on probe failure to avoid leaking the wakeup
source.

Fixes: fd913ef7ce ("Bluetooth: btusb: Add out-of-band wakeup support")
Cc: stable@vger.kernel.org	# 4.11
Cc: Rajat Jain <rajatja@google.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This commit is contained in:
Johan Hovold 2026-06-04 08:37:38 +02:00 committed by Luiz Augusto von Dentz
parent c5b600a3c0
commit 3d93e1bb0f

View File

@ -3013,6 +3013,11 @@ static int marvell_config_oob_wake(struct hci_dev *hdev)
return 0;
}
#else
static inline int marvell_config_oob_wake(struct hci_dev *hdev)
{
return 0;
}
#endif
static int btusb_set_bdaddr_marvell(struct hci_dev *hdev,
@ -3855,6 +3860,11 @@ static int btusb_config_oob_wake(struct hci_dev *hdev)
bt_dev_info(hdev, "OOB Wake-on-BT configured at IRQ %u", irq);
return 0;
}
#else
static inline int btusb_config_oob_wake(struct hci_dev *hdev)
{
return 0;
}
#endif
static void btusb_check_needs_reset_resume(struct usb_interface *intf)
@ -4191,7 +4201,6 @@ static int btusb_probe(struct usb_interface *intf,
hdev->wakeup = btusb_wakeup;
hdev->hci_drv = &btusb_hci_drv;
#ifdef CONFIG_PM
err = btusb_config_oob_wake(hdev);
if (err)
goto out_free_dev;
@ -4200,9 +4209,9 @@ static int btusb_probe(struct usb_interface *intf,
if (id->driver_info & BTUSB_MARVELL && data->oob_wake_irq) {
err = marvell_config_oob_wake(hdev);
if (err)
goto out_free_dev;
goto err_disable_wakeup;
}
#endif
if (id->driver_info & BTUSB_CW6622)
hci_set_quirk(hdev, HCI_QUIRK_BROKEN_STORED_LINK_KEY);
@ -4447,6 +4456,9 @@ static int btusb_probe(struct usb_interface *intf,
}
err_kill_tx_urbs:
usb_kill_anchored_urbs(&data->tx_anchor);
err_disable_wakeup:
if (data->oob_wake_irq)
device_init_wakeup(&data->udev->dev, false);
out_free_dev:
if (data->reset_gpio)
gpiod_put(data->reset_gpio);