Bluetooth: hci_bcm: Invalidate IRQ on request failure
authorLukas Wunner <lukas@wunner.de>
Wed, 10 Jan 2018 15:32:10 +0000 (16:32 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 10 Jan 2018 18:00:13 +0000 (19:00 +0100)
If devm_request_irq() fails, the driver bails out of bcm_request_irq()
but continues to ->setup the device (because the IRQ is optional).

The driver subsequently calls devm_free_irq(), enable_irq_wake() and
disable_irq_wake() on the IRQ even though requesting it failed.

Avoid by invalidating the IRQ on request failure.

Cc: Frédéric Danis <frederic.danis.oss@gmail.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/bluetooth/hci_bcm.c

index 140c7e5bf812a352e10f8ddffac41b9c7670b994..c893c597fead99aa5eba799982153e5f5dd863bf 100644 (file)
@@ -216,8 +216,10 @@ static int bcm_request_irq(struct bcm_data *bcm)
                               bdev->irq_active_low ? IRQF_TRIGGER_FALLING :
                                                      IRQF_TRIGGER_RISING,
                               "host_wake", bdev);
-       if (err)
+       if (err) {
+               bdev->irq = err;
                goto unlock;
+       }
 
        device_init_wakeup(bdev->dev, true);