summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHansong Zhang <hsz@google.com>2019-01-09 18:18:17 -0800
committerTim Schumacher <timschumi@gmx.de>2019-07-07 14:40:23 +0200
commit3d34ee18a6b5e16ddf77157103a1c3cc5a777d3b (patch)
treeb614615cd8d4a2969b58cbe165096485cedd350d
parent1ce2f0f57ce8d450ff16c177f51304b3d3736319 (diff)
downloadandroid_system_bt-3d34ee18a6b5e16ddf77157103a1c3cc5a777d3b.tar.gz
android_system_bt-3d34ee18a6b5e16ddf77157103a1c3cc5a777d3b.tar.bz2
android_system_bt-3d34ee18a6b5e16ddf77157103a1c3cc5a777d3b.zip
btm_proc_smp_cback: Don't access p_dev_rec if freed
In btm_proc_smp_cback(), return after p_dev_rec is freed in the middle to prevent use after free Bug: 120612744 Test: Use ASAN build; connect to a LE device and wait for timeout Change-Id: Ic9d0eaeb62a1a1b24884146ca82f4104fabc5bac (cherry picked from commit 953dd279502980b1d8d30656eb78c6445a6e31f7)
-rw-r--r--stack/btm/btm_ble.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/stack/btm/btm_ble.c b/stack/btm/btm_ble.c
index bcabc3428..0a5003d21 100644
--- a/stack/btm/btm_ble.c
+++ b/stack/btm/btm_ble.c
@@ -34,6 +34,7 @@
#include "btm_int.h"
#include "btm_ble_api.h"
#include "smp_api.h"
+#include "log/log.h"
#include "l2c_int.h"
#include "gap_api.h"
#include "bt_utils.h"
@@ -2034,6 +2035,12 @@ UINT8 btm_proc_smp_cback(tSMP_EVT event, BD_ADDR bd_addr, tSMP_EVT_DATA *p_data)
if (event == SMP_COMPLT_EVT)
{
+ p_dev_rec = btm_find_dev(bd_addr);
+ if (p_dev_rec == NULL) {
+ BTM_TRACE_ERROR("%s: p_dev_rec is NULL", __func__);
+ android_errorWriteLog(0x534e4554, "120612744");
+ return 0;
+ }
BTM_TRACE_DEBUG ("evt=SMP_COMPLT_EVT before update sec_level=0x%x sec_flags=0x%x", p_data->cmplt.sec_level , p_dev_rec->sec_flags );
res = (p_data->cmplt.reason == SMP_SUCCESS) ? BTM_SUCCESS : BTM_ERR_PROCESSING;