This is an automated email from the ASF dual-hosted git repository.
janc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
The following commit(s) were added to refs/heads/master by this push:
new 7b0a2d7d3 nimble/host: Fix compilation error in ble_store_config.c
7b0a2d7d3 is described below
commit 7b0a2d7d3044a06e4f03a5dd652e07c34054c61f
Author: Jerzy Kasenberg <[email protected]>
AuthorDate: Mon Mar 25 16:05:29 2024 +0100
nimble/host: Fix compilation error in ble_store_config.c
This should fix compilation error when -O2 optimization is enabled.
GCC incorrectly detects problem.
This change adds asserts that convinces GCC that pre-condition will not
result in accessing memory out-of-bounds.
This also changes one condition that also contributes to make GCC convinced
that pre-condition are met.
Error: In function 'ble_store_config_delete_obj',
inlined from 'ble_store_config_delete_cccd' at
repos/apache-mynewt-nimble/nimble/host/store/config/src/ble_store_config.c:380:10,
inlined from 'ble_store_config_delete' at
repos/apache-mynewt-nimble/nimble/host/store/config/src/ble_store_config.c:542:14:
repos/apache-mynewt-nimble/nimble/host/store/config/src/ble_store_config.c:193:9:
error: 'memmove' offset [16, 31] is out of the bounds [0, 16] of object
'ble_store_config_cccds' with type 'struct ble_store_value_cccd[1]'
[-Werror=array-bounds]
193 | memmove(dst, src, move_count * value_size);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
repos/apache-mynewt-nimble/nimble/host/store/config/src/ble_store_config.c:
In function 'ble_store_config_delete':
repos/apache-mynewt-nimble/nimble/host/store/config/src/ble_store_config.c:45:5:
note: 'ble_store_config_cccds' declared here
45 | ble_store_config_cccds[MYNEWT_VAL(BLE_STORE_MAX_CCCDS)];
Signed-off-by: Jerzy Kasenberg <[email protected]>
---
nimble/host/store/config/src/ble_store_config.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/nimble/host/store/config/src/ble_store_config.c
b/nimble/host/store/config/src/ble_store_config.c
index 0ee8906c6..664b8768b 100644
--- a/nimble/host/store/config/src/ble_store_config.c
+++ b/nimble/host/store/config/src/ble_store_config.c
@@ -225,6 +225,7 @@ ble_store_config_delete_our_sec(const struct
ble_store_key_sec *key_sec)
#if MYNEWT_VAL(BLE_STORE_MAX_BONDS)
int rc;
+ assert(ble_store_config_num_our_secs <=
ARRAY_SIZE(ble_store_config_our_secs));
rc = ble_store_config_delete_sec(key_sec, ble_store_config_our_secs,
&ble_store_config_num_our_secs);
if (rc != 0) {
@@ -248,6 +249,7 @@ ble_store_config_delete_peer_sec(const struct
ble_store_key_sec *key_sec)
#if MYNEWT_VAL(BLE_STORE_MAX_BONDS)
int rc;
+ assert(ble_store_config_num_peer_secs <=
ARRAY_SIZE(ble_store_config_peer_secs));
rc = ble_store_config_delete_sec(key_sec, ble_store_config_peer_secs,
&ble_store_config_num_peer_secs);
if (rc != 0) {
@@ -369,10 +371,11 @@ ble_store_config_delete_cccd(const struct
ble_store_key_cccd *key_cccd)
int rc;
idx = ble_store_config_find_cccd(key_cccd);
- if (idx == -1) {
+ if (idx < 0) {
return BLE_HS_ENOENT;
}
+ assert(ble_store_config_num_cccds < ARRAY_SIZE(ble_store_config_cccds));
rc = ble_store_config_delete_obj(ble_store_config_cccds,
sizeof *ble_store_config_cccds,
idx,