Bluetooth: hci_sync: Fix queuing commands when HCI_UNREGISTER is set
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Thu, 27 Jan 2022 01:21:00 +0000 (17:21 -0800)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 27 Jan 2022 16:40:18 +0000 (17:40 +0100)
hci_cmd_sync_queue shall return an error if HCI_UNREGISTER flag has
been set as that means hci_unregister_dev has been called so it will
likely cause a uaf after the timeout as the hdev will be freed.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/hci_sync.c

index 2fe8c60..6e71aa6 100644 (file)
@@ -382,6 +382,9 @@ int hci_cmd_sync_queue(struct hci_dev *hdev, hci_cmd_sync_work_func_t func,
 {
        struct hci_cmd_sync_work_entry *entry;
 
+       if (hci_dev_test_flag(hdev, HCI_UNREGISTER))
+               return -ENODEV;
+
        entry = kmalloc(sizeof(*entry), GFP_KERNEL);
        if (!entry)
                return -ENOMEM;