From 1cec2d3454adf87b1d45d0b101d4ee1c53a8ab91 Mon Sep 17 00:00:00 2001 From: Prasad Alatkar Date: Wed, 10 Mar 2021 20:35:11 +0530 Subject: [PATCH] NimBLE NVS: Fix bug in deletion of peer_dev_record - Fix comparison metric while deleting peer_dev_record. Previous to this, random address change after reboot used to result in NVS database mismatch and hence sometimes caused wrong NVS entry deletion. - Closes ESPCS-540 --- nimble/host/src/ble_hs_resolv.c | 2 +- nimble/host/store/config/src/ble_store_nvs.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/nimble/host/src/ble_hs_resolv.c b/nimble/host/src/ble_hs_resolv.c index 46e5577f6..b10fd50ef 100644 --- a/nimble/host/src/ble_hs_resolv.c +++ b/nimble/host/src/ble_hs_resolv.c @@ -96,7 +96,7 @@ ble_rpa_remove_peer_dev_rec(struct ble_hs_dev_records *p_dev_rec) ble_store_num_peer_dev_rec--; if ((i != ble_store_num_peer_dev_rec) && (ble_store_num_peer_dev_rec != 0)) { memmove(&peer_dev_rec[i], &peer_dev_rec[i + 1], - (ble_store_num_peer_dev_rec - i + 1) * sizeof(struct ble_hs_dev_records )); + (ble_store_num_peer_dev_rec - i) * sizeof(struct ble_hs_dev_records )); } BLE_HS_LOG(DEBUG, " RPA: removed device at index = %d, no. of peer records" diff --git a/nimble/host/store/config/src/ble_store_nvs.c b/nimble/host/store/config/src/ble_store_nvs.c index 0966f943e..2c35f5cf9 100644 --- a/nimble/host/store/config/src/ble_store_nvs.c +++ b/nimble/host/store/config/src/ble_store_nvs.c @@ -212,8 +212,10 @@ get_nvs_db_attribute(int obj_type, bool empty, void *value, int num_value) if (value) { #if MYNEWT_VAL(BLE_HOST_BASED_PRIVACY) if (obj_type == BLE_STORE_OBJ_TYPE_PEER_DEV_REC) { - err = get_nvs_matching_index(&p_dev_rec, value, num_value, - sizeof(struct ble_hs_dev_records)); + err = get_nvs_matching_index(&p_dev_rec.peer_sec, + &((struct ble_hs_dev_records *)value)->peer_sec, + num_value, + sizeof(struct ble_hs_peer_sec)); } else #endif {