From da6ede34a831e8c6a7707c209ff7100fc6c3faba Mon Sep 17 00:00:00 2001 From: Vincent Coubard Date: Thu, 1 Mar 2018 14:56:30 +0000 Subject: [PATCH] BLE - Cordio PAL SM: Select correct on_ltk_request overload. --- .../source/CordioPalSecurityManager.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioPalSecurityManager.cpp b/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioPalSecurityManager.cpp index 730035ed14..f066e21f0e 100644 --- a/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioPalSecurityManager.cpp +++ b/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioPalSecurityManager.cpp @@ -552,12 +552,21 @@ bool CordioSecurityManager::sm_handler(const wsfMsgHdr_t* msg) { } case DM_SEC_LTK_REQ_IND: { + uint8_t null_rand[HCI_RAND_LEN] = { 0 }; hciLeLtkReqEvt_t* evt = (hciLeLtkReqEvt_t*) msg; - handler->on_ltk_request( - evt->hdr.param, - reinterpret_cast(&evt->encDiversifier), - evt->randNum - ); + + if (evt->encDiversifier == 0 && + memcmp(evt->randNum, null_rand, sizeof(null_rand))) { + handler->on_ltk_request( + evt->hdr.param + ); + } else { + handler->on_ltk_request( + evt->hdr.param, + reinterpret_cast(&evt->encDiversifier), + evt->randNum + ); + } return true; }