If hci_register_suspend_notifier() returns error, the hdev need to be put and deleted and rfkill need be unregistered to avoid leaks. Fixes: 9952d90ea288 ("Bluetooth: Handle PM_SUSPEND_PREPARE and PM_POST_SUSPEND") Signed-off-by: Yang Yingliang <yangyingliang@xxxxxxxxxx> --- net/bluetooth/hci_core.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 0540555b3704..03b9374f3a97 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -2660,7 +2660,7 @@ int hci_register_dev(struct hci_dev *hdev) error = hci_register_suspend_notifier(hdev); if (error) - goto err_wqueue; + goto err_hdev; queue_work(hdev->req_workqueue, &hdev->power_on); @@ -2669,6 +2669,11 @@ int hci_register_dev(struct hci_dev *hdev) return id; +err_hdev: + hci_dev_put(hdev); + if (hdev->rfkill) + rfkill_unregister(hdev->rfkill); + device_del(&hdev->dev); err_wqueue: debugfs_remove_recursive(hdev->debugfs); destroy_workqueue(hdev->workqueue); -- 2.25.1