From 02667389db3219fe6fb98fd7a5ba8dccc75d2ab5 Mon Sep 17 00:00:00 2001 From: Vincent Coubard Date: Wed, 23 Sep 2020 11:04:39 +0100 Subject: [PATCH] BLE: Fix insertion to host resolving list. --- .../generic/PrivateAddressController.cpp | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/connectivity/FEATURE_BLE/source/generic/PrivateAddressController.cpp b/connectivity/FEATURE_BLE/source/generic/PrivateAddressController.cpp index d7ef1719b7..ea3837ed95 100644 --- a/connectivity/FEATURE_BLE/source/generic/PrivateAddressController.cpp +++ b/connectivity/FEATURE_BLE/source/generic/PrivateAddressController.cpp @@ -164,16 +164,34 @@ ble_error_t PrivateAddressController::add_device_to_resolving_list( peer_irk ); } else { + // ensure an entry is not added twice + for (auto &entry : _resolving_list) { + if (entry.populated && + entry.peer_address_type == peer_address_type && + entry.peer_address == peer_identity_address && + entry.peer_irk == peer_irk + ) { + return BLE_ERROR_NONE; + } + } + + bool entry_added = false; for (auto &entry : _resolving_list) { if (entry.populated == false) { entry.peer_address_type = peer_address_type; entry.peer_address = peer_identity_address; entry.peer_irk = peer_irk; entry.populated = true; - return BLE_ERROR_NONE; + entry_added = true; + break; } } + if (!entry_added) { + return BLE_ERROR_NO_MEM; + } + + // Remove unresolved entries from the resolved list remove_resolution_entry_from_cache( [&](resolution_entry_t &entry) {