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

Commit ab7ace21 authored by Andre Eisenbach's avatar Andre Eisenbach Committed by Android (Google) Code Review
Browse files

Merge "LE: Remove stored link key if encryption fails due to missing key (remote)" into lmp-dev

parents 4e999737 3502e3cc
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -851,9 +851,10 @@ void bta_gattc_reset_discover_st(tBTA_GATTC_SERV *p_srcb, tBTA_GATT_STATUS statu
void bta_gattc_disc_close(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data)
{
    APPL_TRACE_DEBUG("Discovery cancel conn_id=%d",p_clcb->bta_conn_id);

    if (p_clcb->disc_active)
        bta_gattc_reset_discover_st(p_clcb->p_srcb, BTA_GATT_ERROR);
    bta_gattc_sm_execute(p_clcb, BTA_GATTC_API_CLOSE_EVT, p_data);
    else
        p_clcb->state = BTA_GATTC_CONN_ST;
}
/*******************************************************************************
**
@@ -978,6 +979,8 @@ void bta_gattc_start_discover(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data)
                APPL_TRACE_ERROR("discovery on server failed");
                bta_gattc_reset_discover_st(p_clcb->p_srcb, p_clcb->status);
            }
            else
                p_clcb->disc_active = TRUE;
        }
        else
        {
@@ -1015,6 +1018,7 @@ void bta_gattc_disc_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data)
        L2CA_EnableUpdateBleConnParams(p_clcb->p_srcb->server_bda, TRUE);
#endif
    p_clcb->p_srcb->state = BTA_GATTC_SERV_IDLE;
    p_clcb->disc_active = FALSE;

    if (p_clcb->status != GATT_SUCCESS)
    {
+1 −0
Original line number Diff line number Diff line
@@ -378,6 +378,7 @@ typedef struct
#define BTA_GATTC_REQ_WAITING       0x10

    UINT8               auto_update; /* auto update is waiting */
    BOOLEAN             disc_active;
    BOOLEAN             in_use;
    tBTA_GATTC_STATE    state;
    tBTA_GATT_STATUS    status;

system/bta/hh/bta_hh_le.c

100755 → 100644
+27 −8
Original line number Diff line number Diff line
@@ -1278,6 +1278,31 @@ void bta_hh_le_notify_enc_cmpl(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf)
    bta_hh_start_security(p_cb, NULL);
}

/*******************************************************************************
**
** Function         bta_hh_clear_service_cache
**
** Description    clear the service cache
**
** Parameters:
**
*******************************************************************************/
void bta_hh_clear_service_cache(tBTA_HH_DEV_CB *p_cb)
{
    UINT8 i;
    tBTA_HH_LE_HID_SRVC     *p_hid_srvc = &p_cb->hid_srvc[0];

    p_cb->app_id = 0;
    p_cb->total_srvc = 0;
    p_cb->dscp_info.descriptor.dsc_list = NULL;

    for (i = 0; i < BTA_HH_LE_HID_SRVC_MAX; i ++, p_hid_srvc ++)
    {
        utl_freebuf((void **)&p_hid_srvc->rpt_map);
        memset(p_hid_srvc, 0, sizeof(tBTA_HH_LE_HID_SRVC));
    }
}

/*******************************************************************************
**
** Function         bta_hh_start_security
@@ -1325,6 +1350,7 @@ void bta_hh_start_security(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_buf)
    {
        sec_flag = BTM_BLE_SEC_ENCRYPT_NO_MITM;
        p_cb->status = BTA_HH_ERR_AUTH_FAILED;
        bta_hh_clear_service_cache(p_cb);
        BTM_SetEncryption(p_cb->addr, BTA_TRANSPORT_LE, bta_hh_le_encrypt_cback, &sec_flag);
    }
    /* otherwise let it go through */
@@ -2307,18 +2333,11 @@ void bta_hh_le_open_fail(tBTA_HH_DEV_CB *p_cb, tBTA_HH_DATA *p_data)
{
    tBTA_HH_CONN            conn_dat ;
    tBTA_HH_LE_HID_SRVC     *p_hid_srvc = &p_cb->hid_srvc[0];
    UINT8   i;

    /* open failure in the middle of service discovery, clear all services */
    if (p_cb->disc_active & BTA_HH_LE_DISC_HIDS)
    {
        p_cb->total_srvc = 0;
        p_cb->dscp_info.descriptor.dsc_list = NULL;
        for (i = 0; i < BTA_HH_LE_HID_SRVC_MAX; i ++, p_hid_srvc ++)
        {
            utl_freebuf((void **)&p_hid_srvc->rpt_map);
            memset(p_hid_srvc, 0, sizeof(tBTA_HH_LE_HID_SRVC));
        }
        bta_hh_clear_service_cache(p_cb);
    }

    p_cb->disc_active = BTA_HH_LE_DISC_NONE;
+2 −3
Original line number Diff line number Diff line
@@ -192,7 +192,6 @@ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, UINT8 attr
{
    /* look up the sec device record, and find the address */
    tBTM_BLE_CB *p_cb = &btm_cb.ble_ctr_cb;
    BOOLEAN     started = FALSE;
    UINT8       wl_state = p_cb->wl_state;

    if ((to_add && p_cb->num_empty_filter == 0) ||
@@ -200,7 +199,7 @@ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, UINT8 attr
    {
        BTM_TRACE_ERROR("WL full or empty, unable to update to WL. num_entry available: %d",
                          p_cb->num_empty_filter);
        return started;
        return FALSE;
    }

    btm_suspend_wl_activity(wl_state);
@@ -210,7 +209,7 @@ BOOLEAN btm_update_dev_to_white_list(BOOLEAN to_add, BD_ADDR bd_addr, UINT8 attr

    btm_resume_wl_activity(wl_state);

    return started;
    return TRUE;
}
/*******************************************************************************
**
+3 −0
Original line number Diff line number Diff line
@@ -4191,6 +4191,9 @@ void btm_sec_encrypt_change (UINT16 handle, UINT8 status, UINT8 encr_enable)

    if (p_acl && p_acl->transport == BT_TRANSPORT_LE)
    {
        if (status == HCI_ERR_KEY_MISSING || status == HCI_ERR_AUTH_FAILURE
            ||status == HCI_ERR_ENCRY_MODE_NOT_ACCEPTABLE)
            p_dev_rec->sec_flags &= ~ (BTM_SEC_LE_LINK_KEY_KNOWN);
        btm_ble_link_encrypted(p_dev_rec->bd_addr, encr_enable);
        return;
    }