From: Andre Eisenbach Date: Tue, 18 Oct 2016 00:32:45 +0000 (-0700) Subject: Reset device security flags when pairing fails X-Git-Tag: android-x86-7.1-r1~32^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=667e1fe3d7ccc6e2ce11781443f36fc10e47d9a3;p=android-x86%2Fsystem-bt.git Reset device security flags when pairing fails Bug: 29998634 Test: manual Change-Id: Icd9a76a065de147372df060c0b9555c75bcf46bc --- diff --git a/bta/dm/bta_dm_act.c b/bta/dm/bta_dm_act.c index 5c76faae3..acda74716 100644 --- a/bta/dm/bta_dm_act.c +++ b/bta/dm/bta_dm_act.c @@ -3495,24 +3495,19 @@ static void bta_dm_reset_sec_dev_pending(BD_ADDR remote_bd_addr) *******************************************************************************/ static void bta_dm_remove_sec_dev_entry(BD_ADDR remote_bd_addr) { - UINT16 index = 0; if ( BTM_IsAclConnectionUp(remote_bd_addr, BT_TRANSPORT_LE) || BTM_IsAclConnectionUp(remote_bd_addr, BT_TRANSPORT_BR_EDR)) { - APPL_TRACE_DEBUG("%s ACL is not down. Schedule for Dev Removal when ACL closes", - __FUNCTION__); - for (index = 0; index < bta_dm_cb.device_list.count; index ++) + APPL_TRACE_DEBUG("%s ACL is not down. Schedule for Dev Removal when ACL closes", + __func__); + BTM_SecClearSecurityFlags (remote_bd_addr); + for (int i = 0; i < bta_dm_cb.device_list.count; i++) { - if (!bdcmp( bta_dm_cb.device_list.peer_device[index].peer_bdaddr, remote_bd_addr)) + if (!bdcmp( bta_dm_cb.device_list.peer_device[i].peer_bdaddr, remote_bd_addr)) + { + bta_dm_cb.device_list.peer_device[i].remove_dev_pending = TRUE; break; - } - if (index != bta_dm_cb.device_list.count) - { - bta_dm_cb.device_list.peer_device[index].remove_dev_pending = TRUE; - } - else - { - APPL_TRACE_ERROR(" %s Device does not exist in DB", __FUNCTION__); + } } } else diff --git a/stack/btm/btm_dev.c b/stack/btm/btm_dev.c index 9087e52c1..1e3f1fe79 100644 --- a/stack/btm/btm_dev.c +++ b/stack/btm/btm_dev.c @@ -190,6 +190,25 @@ BOOLEAN BTM_SecDeleteDevice (BD_ADDR bd_addr) /******************************************************************************* ** +** Function BTM_SecClearSecurityFlags +** +** Description Reset the security flags (mark as not-paired) for a given +** remove device. +** +*******************************************************************************/ +extern void BTM_SecClearSecurityFlags (BD_ADDR bd_addr) +{ + tBTM_SEC_DEV_REC *p_dev_rec = btm_find_dev(bd_addr); + if (p_dev_rec == NULL) + return; + + p_dev_rec->sec_flags = 0; + p_dev_rec->sec_state = BTM_SEC_STATE_IDLE; + p_dev_rec->sm4 = BTM_SM4_UNKNOWN; +} + +/******************************************************************************* +** ** Function BTM_SecReadDevName ** ** Description Looks for the device name in the security database for the diff --git a/stack/include/btm_api.h b/stack/include/btm_api.h index b3232f47d..89b718f35 100644 --- a/stack/include/btm_api.h +++ b/stack/include/btm_api.h @@ -3324,6 +3324,15 @@ extern BOOLEAN BTM_SecAddDevice (BD_ADDR bd_addr, DEV_CLASS dev_class, *******************************************************************************/ extern BOOLEAN BTM_SecDeleteDevice (BD_ADDR bd_addr); +/******************************************************************************* +** +** Function BTM_SecClearSecurityFlags +** +** Description Reset the security flags (mark as not-paired) for a given +** remove device. +** +*******************************************************************************/ +extern void BTM_SecClearSecurityFlags (BD_ADDR bd_addr); /******************************************************************************* **