lkml.org 
[lkml]   [2020]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 073/717] Bluetooth: Fix: LL PRivacy BLE device fails to connect
    Date
    From: Sathish Narasimman <nsathish41@gmail.com>

    [ Upstream commit 1fb17dfc258ff6208f7873cc7b8e40e27515d2d5 ]

    When adding device to white list the device is added to resolving list
    also. It has to be added only when HCI_ENABLE_LL_PRIVACY flag is set.
    HCI_ENABLE_LL_PRIVACY flag has to be tested before adding/deleting devices
    to resolving list. use_ll_privacy macro is used only to check if controller
    supports LL_Privacy.

    https://bugzilla.kernel.org/show_bug.cgi?id=209745

    Fixes: 0eee35bdfa3b ("Bluetooth: Update resolving list when updating whitelist")
    Signed-off-by: Sathish Narasimman <sathish.narasimman@intel.com>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/bluetooth/hci_request.c | 12 ++++++++----
    1 file changed, 8 insertions(+), 4 deletions(-)

    diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c
    index 6f12bab4d2fa6..610ed0817bd77 100644
    --- a/net/bluetooth/hci_request.c
    +++ b/net/bluetooth/hci_request.c
    @@ -698,7 +698,8 @@ static void del_from_white_list(struct hci_request *req, bdaddr_t *bdaddr,
    cp.bdaddr_type);
    hci_req_add(req, HCI_OP_LE_DEL_FROM_WHITE_LIST, sizeof(cp), &cp);

    - if (use_ll_privacy(req->hdev)) {
    + if (use_ll_privacy(req->hdev) &&
    + hci_dev_test_flag(req->hdev, HCI_ENABLE_LL_PRIVACY)) {
    struct smp_irk *irk;

    irk = hci_find_irk_by_addr(req->hdev, bdaddr, bdaddr_type);
    @@ -732,7 +733,8 @@ static int add_to_white_list(struct hci_request *req,
    return -1;

    /* White list can not be used with RPAs */
    - if (!allow_rpa && !use_ll_privacy(hdev) &&
    + if (!allow_rpa &&
    + !hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY) &&
    hci_find_irk_by_addr(hdev, &params->addr, params->addr_type)) {
    return -1;
    }
    @@ -750,7 +752,8 @@ static int add_to_white_list(struct hci_request *req,
    cp.bdaddr_type);
    hci_req_add(req, HCI_OP_LE_ADD_TO_WHITE_LIST, sizeof(cp), &cp);

    - if (use_ll_privacy(hdev)) {
    + if (use_ll_privacy(hdev) &&
    + hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY)) {
    struct smp_irk *irk;

    irk = hci_find_irk_by_addr(hdev, &params->addr,
    @@ -812,7 +815,8 @@ static u8 update_white_list(struct hci_request *req)
    }

    /* White list can not be used with RPAs */
    - if (!allow_rpa && !use_ll_privacy(hdev) &&
    + if (!allow_rpa &&
    + !hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY) &&
    hci_find_irk_by_addr(hdev, &b->bdaddr, b->bdaddr_type)) {
    return 0x00;
    }
    --
    2.27.0


    \
     
     \ /
      Last update: 2020-12-28 16:39    [W:4.081 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site