From cd89f4239368b106fbfab9555cf445fbc00203a2 Mon Sep 17 00:00:00 2001 From: Trond Einar Snekvik Date: Thu, 30 Sep 2021 16:32:05 +0200 Subject: [PATCH] Bluetooth: Mesh: Model extensions walk stops before last model When reaching the last model in the circular extension linked list, the walker would abandon the walk before checking the last model. This makes us skip models when checking the subscription list, potentially causing incoming messages to be wrongfully ignored. Signed-off-by: Trond Einar Snekvik --- subsys/bluetooth/mesh/access.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/subsys/bluetooth/mesh/access.c b/subsys/bluetooth/mesh/access.c index 9cc0fc63694..addf18f4327 100644 --- a/subsys/bluetooth/mesh/access.c +++ b/subsys/bluetooth/mesh/access.c @@ -821,12 +821,12 @@ void bt_mesh_model_extensions_walk(struct bt_mesh_model *model, #else struct bt_mesh_model *it; - if (model->next == NULL) { - (void)cb(model, user_data); + if (cb(model, user_data) == BT_MESH_WALK_STOP || !model->next) { return; } - for (it = model; (it != NULL) && (it->next != model); it = it->next) { + /* List is circular. Step through all models until we reach the start: */ + for (it = model->next; it != model; it = it->next) { if (cb(it, user_data) == BT_MESH_WALK_STOP) { return; }