• Lin Ma's avatar
    bluetooth: eliminate the potential race condition when removing the HCI controller · e2cb6b89
    Lin Ma authored
    There is a possible race condition vulnerability between issuing a HCI
    command and removing the cont.  Specifically, functions hci_req_sync()
    and hci_dev_do_close() can race each other like below:
    
    thread-A in hci_req_sync()      |   thread-B in hci_dev_do_close()
                                    |   hci_req_sync_lock(hdev);
    test_bit(HCI_UP, &hdev->flags); |
    ...                             |   test_and_clear_bit(HCI_UP, &hdev->flags)
    hci_req_sync_lock(hdev);        |
                                    |
    In this commit we alter the sequence in function hci_req_sync(). Hence,
    the thread-A cannot issue th.
    Signed-off-by: default avatarLin Ma <linma@zju.edu.cn>
    Cc: Marcel Holtmann <marcel@holtmann.org>
    Fixes: 7c6a329e ("[Bluetooth] Fix regression from using default link policy")
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    e2cb6b89
hci_request.c 89.4 KB