From 8276f4db31f193417f3488729a23d429d010e0ec Mon Sep 17 00:00:00 2001 From: Igor Ryzhov Date: Thu, 11 Jan 2024 20:58:09 +0200 Subject: [PATCH] mgmtd: don't try to send config to disconnected clients When determining the interested backend clients for a configuration change, don't consider disconnected clients. This fixes a crash in `mgmt_txn_send_be_txn_create` when trying to send data to a non-existing adapter. Signed-off-by: Igor Ryzhov --- mgmtd/mgmt_txn.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/mgmtd/mgmt_txn.c b/mgmtd/mgmt_txn.c index 297482f01548..bc21daeb91c4 100644 --- a/mgmtd/mgmt_txn.c +++ b/mgmtd/mgmt_txn.c @@ -850,7 +850,6 @@ static int mgmt_txn_create_config_batches(struct mgmt_txn_req *txn_req, enum mgmt_be_client_id id; struct mgmt_be_client_adapter *adapter; struct mgmt_commit_cfg_req *cmtcfg_req; - bool found_validator; int num_chgs = 0; int xpath_len, value_len; uint64_t clients; @@ -881,11 +880,8 @@ static int mgmt_txn_create_config_batches(struct mgmt_txn_req *txn_req, value ? value : "NIL"); clients = mgmt_be_interested_clients(xpath, true); - cmtcfg_req->clients |= clients; - if (clients) - found_validator = true; - else - found_validator = false; + + cmtcfg_req->clients = 0; xpath_len = strlen(xpath) + 1; value_len = strlen(value) + 1; @@ -894,6 +890,8 @@ static int mgmt_txn_create_config_batches(struct mgmt_txn_req *txn_req, if (!adapter) continue; + cmtcfg_req->clients |= (1ull << id); + batch = cmtcfg_req->last_be_cfg_batch[id]; if (!batch || (batch->num_cfg_data == @@ -940,7 +938,7 @@ static int mgmt_txn_create_config_batches(struct mgmt_txn_req *txn_req, num_chgs++; } - if (!found_validator) { + if (!cmtcfg_req->clients) { snprintf(err_buf, sizeof(err_buf), "No validator module found for XPATH: '%s", xpath);