From 66512ebcb362ac5f5d55c087a8f39872aa1b0edf Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Mon, 29 Jul 2024 14:33:14 +0200 Subject: [PATCH] ntp: make sure new configuration IDs are unused The configuration IDs assigned to individual sources (used when they don't have a resolved IP address) and pools of sources are 32-bit. The ID could overflow if some sources were very frequently removed and added again. Two unrelated sources could end up with the same ID, causing some operations to unexpectedly impact only one or both sources. Make sure the ID is currently unused before assigning it to a new source. --- ntp_sources.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ntp_sources.c b/ntp_sources.c index 64d9a8b..29c99ac 100644 --- a/ntp_sources.c +++ b/ntp_sources.c @@ -770,8 +770,19 @@ static int get_unused_pool_id(void) static uint32_t get_next_conf_id(uint32_t *conf_id) { + SourceRecord *record; + unsigned int i; + +again: last_conf_id++; + /* Make sure the ID is not already used (after 32-bit wraparound) */ + for (i = 0; i < ARR_GetSize(records); i++) { + record = get_record(i); + if (record->remote_addr && record->conf_id == last_conf_id) + goto again; + } + if (conf_id) *conf_id = last_conf_id;