Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0269fc6a authored by Satya Calloji's avatar Satya Calloji Committed by Android Git Automerger
Browse files

am cfbef47a: LE: Peer device\'s latest RPA is not being applied

* commit 'cfbef47a':
  LE: Peer device's latest RPA is not being applied
parents c1343e29 cfbef47a
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -678,10 +678,6 @@ bt_status_t btif_disable_bluetooth(void)

    btif_config_flush();

#if (BLE_INCLUDED == TRUE)
     BTA_VendorCleanup();
#endif

    if (status != BTA_SUCCESS)
    {
        BTIF_TRACE_ERROR("disable bt failed (%d)", status);
@@ -714,6 +710,10 @@ void btif_disable_bluetooth_evt(void)
    bte_main_enable_lpm(FALSE);
#endif

#if (BLE_INCLUDED == TRUE)
     BTA_VendorCleanup();
#endif

     bte_main_disable();

    /* update local state */
+1 −1
Original line number Diff line number Diff line
@@ -1660,7 +1660,7 @@ void btm_ble_conn_complete(UINT8 *p, UINT16 evt_len)

        /* possiblly receive connection complete with resolvable random on
           slave role while the device has been paired */
        if (!match && role == HCI_ROLE_SLAVE && BTM_BLE_IS_RESOLVE_BDA(bda))
        if (!match && /*role == HCI_ROLE_SLAVE && */BTM_BLE_IS_RESOLVE_BDA(bda))
        {
            btm_ble_resolve_random_addr(bda, btm_ble_resolve_random_addr_on_conn_cmpl, p_data);
        }
+5 −8
Original line number Diff line number Diff line
@@ -466,6 +466,10 @@ static void btm_ble_vendor_capability_vsc_cmpl_cback (tBTM_VSC_CMPL *p_vcs_cplt_
    if (btm_cb.cmn_ble_vsc_cb.max_filter > 0)
    {
        btm_ble_adv_filter_init();
    }

    if (btm_cb.cmn_ble_vsc_cb.max_irk_list_sz > 0)
    {
        btm_ble_vendor_init(btm_cb.cmn_ble_vsc_cb.max_irk_list_sz);
    }

@@ -1714,7 +1718,6 @@ tBTM_STATUS btm_ble_start_inquiry (UINT8 mode, UINT8 duration)

#if (defined BLE_PRIVACY_SPT && BLE_PRIVACY_SPT == TRUE)
        /* enable IRK list */
        if (btm_cb.cmn_ble_vsc_cb.rpa_offloading == TRUE)
        btm_ble_vendor_irk_list_known_dev (TRUE);
#endif
        status = btm_ble_start_scan(BTM_BLE_DUPLICATE_DISABLE);
@@ -3039,12 +3042,6 @@ void btm_ble_write_adv_enable_complete(UINT8 * p)
        /* toggle back the adv mode */
        p_cb->adv_mode = !p_cb->adv_mode;
    }

#if (BLE_PRIVACY_SPT == TRUE)
    if ((p_cb->adv_mode == BTM_BLE_ADV_DISABLE) &&
        (btm_cb.cmn_ble_vsc_cb.rpa_offloading == TRUE))
        btm_ble_vendor_disable_irk_list();
#endif
}

/*******************************************************************************
+6 −7
Original line number Diff line number Diff line
@@ -648,9 +648,14 @@ BOOLEAN l2cble_init_direct_conn (tL2C_LCB *p_lcb)
    memcpy(init_addr, p_lcb->remote_bd_addr, BD_ADDR_LEN);

#if BLE_PRIVACY_SPT == TRUE
    if (p_dev_rec->ble.active_addr_type == BTM_BLE_ADDR_RRA)
    /* if RPA offloading supported */
    if (btm_ble_vendor_irk_list_load_dev(p_dev_rec))
        btm_random_pseudo_to_public(init_addr, &init_addr_type);
    /* otherwise, if remote is RPA enabled, use latest RPA */
    else if (p_dev_rec->ble.active_addr_type == BTM_BLE_ADDR_RRA)
    {
        init_addr_type = BLE_ADDR_RANDOM;
        memcpy(init_addr, p_dev_rec->ble.cur_rand_addr, BD_ADDR_LEN);
    }
    /* if privacy is on and current do not consider using reconnection address */
    if (btm_cb.ble_ctr_cb.privacy ) /* && p_dev_rec->ble.use_reconn_addr */
@@ -663,12 +668,6 @@ BOOLEAN l2cble_init_direct_conn (tL2C_LCB *p_lcb)
        L2CAP_TRACE_ERROR("initate direct connection fail, topology limitation");
        return FALSE;
    }
    if (btm_ble_vendor_irk_list_load_dev(p_dev_rec) &&
        (btm_cb.cmn_ble_vsc_cb.rpa_offloading == TRUE ))
    {
        btm_ble_vendor_enable_irk_feature(TRUE);
        btm_random_pseudo_to_public(init_addr, &init_addr_type);
    }

    if (!btsnd_hcic_ble_create_ll_conn (scan_int,/* UINT16 scan_int      */
                                        scan_win, /* UINT16 scan_win      */
+38 −10
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ void btm_ble_vendor_enq_irk_pending(BD_ADDR target_bda, BD_ADDR psuedo_bda, UINT
    p_q->irk_q_action[p_q->q_next] = to_add;

    p_q->q_next ++;
    p_q->q_next %= btm_cb.cmn_ble_vsc_cb.max_irk_list_sz;;
    p_q->q_next %= btm_cb.cmn_ble_vsc_cb.max_irk_list_sz;
#endif
    return ;
}
@@ -389,6 +389,9 @@ tBTM_STATUS btm_ble_remove_irk_entry(tBTM_SEC_DEV_REC *p_dev_rec)
    tBTM_STATUS     st;
    tBTM_BLE_VENDOR_CB  *p_cb = &btm_ble_vendor_cb;

    if (btm_cb.cmn_ble_vsc_cb.max_irk_list_sz == 0)
        return BTM_MODE_UNSUPPORTED;

    p = param;
    memset(param, 0, 20);

@@ -427,6 +430,9 @@ tBTM_STATUS btm_ble_vendor_clear_irk_list(void)
    UINT8           param[20], *p;
    tBTM_STATUS     st;

    if (btm_cb.cmn_ble_vsc_cb.max_irk_list_sz == 0)
        return BTM_MODE_UNSUPPORTED;

    p = param;
    memset(param, 0, 20);

@@ -457,9 +463,12 @@ tBTM_STATUS btm_ble_read_irk_entry(BD_ADDR target_bda)
#if BLE_PRIVACY_SPT == TRUE
    UINT8           param[20], *p;
    tBTM_STATUS     st = BTM_UNKNOWN_ADDR;
    tBTM_BLE_IRK_ENTRY *p_entry = btm_ble_vendor_find_irk_entry(target_bda);
    tBTM_BLE_IRK_ENTRY *p_entry;

    if (p_entry == NULL)
    if (btm_cb.cmn_ble_vsc_cb.max_irk_list_sz == 0)
        return BTM_MODE_UNSUPPORTED;

    if ((p_entry = btm_ble_vendor_find_irk_entry(target_bda)) == NULL)
        return st;

    p = param;
@@ -498,6 +507,9 @@ void btm_ble_vendor_irk_list_known_dev(BOOLEAN enable)
    UINT8               count = 0;
    tBTM_SEC_DEV_REC    *p_dev_rec = &btm_cb.sec_dev_rec[0];

    if (btm_cb.cmn_ble_vsc_cb.max_irk_list_sz == 0)
        return;

    /* add all known device with random address into IRK list */
    for (i = 0; i < BTM_SEC_MAX_DEVICE_RECORDS; i ++, p_dev_rec ++)
    {
@@ -534,6 +546,9 @@ BOOLEAN btm_ble_vendor_irk_list_load_dev(tBTM_SEC_DEV_REC *p_dev_rec)
    BTM_TRACE_DEBUG ("btm_ble_vendor_irk_list_load_dev:max_irk_size=%d", p_cb->irk_avail_size);
    memset(param, 0, 40);

    if (btm_cb.cmn_ble_vsc_cb.max_irk_list_sz == 0)
        return FALSE;

    if (p_dev_rec != NULL && /* RPA is being used and PID is known */
        (p_dev_rec->ble.key_type & BTM_LE_KEY_PID) != 0)
    {
@@ -560,6 +575,8 @@ BOOLEAN btm_ble_vendor_irk_list_load_dev(tBTM_SEC_DEV_REC *p_dev_rec)
                    btm_ble_vendor_enq_irk_pending(p_dev_rec->ble.static_addr, p_dev_rec->bd_addr, TRUE);
                    p_cb->irk_list_size ++;
                    rt = TRUE;

                    btm_ble_vendor_enable_irk_feature(TRUE);
                }
            }
        }
@@ -594,6 +611,9 @@ void btm_ble_vendor_irk_list_remove_dev(tBTM_SEC_DEV_REC *p_dev_rec)
    tBTM_BLE_VENDOR_CB  *p_cs_cb = &btm_ble_vendor_cb;
    tBTM_BLE_IRK_ENTRY *p_irk_entry;

    if (btm_cb.cmn_ble_vsc_cb.max_irk_list_sz == 0)
        return;

    if ((p_irk_entry = btm_ble_vendor_find_irk_entry_by_psuedo_addr(p_dev_rec->bd_addr)) != NULL &&
        btm_ble_vendor_find_irk_pending_entry(p_dev_rec->bd_addr, FALSE) == FALSE)
    {
@@ -645,6 +665,11 @@ tBTM_STATUS btm_ble_vendor_enable_irk_feature(BOOLEAN enable)
    tBTM_STATUS     st = BTM_WRONG_MODE;
    tBTM_BLE_PF_COUNT *p_bda_filter;

    if (btm_cb.cmn_ble_vsc_cb.max_irk_list_sz == 0)
        return BTM_MODE_UNSUPPORTED;

    if (btm_ble_vendor_cb.enable != enable)
    {
        p = param;
        memset(param, 0, 20);

@@ -655,6 +680,9 @@ tBTM_STATUS btm_ble_vendor_enable_irk_feature(BOOLEAN enable)
        st = BTM_VendorSpecificCommand (HCI_VENDOR_BLE_RPA_VSC, BTM_BLE_IRK_ENABLE_LEN,
                                        param, btm_ble_vendor_irk_vsc_op_cmpl);

        btm_ble_vendor_cb.enable = enable;
    }

    return st;
#endif
    return BTM_MODE_UNSUPPORTED;