From: Miroslav Lichvar Date: Mon, 29 Jul 2024 12:33:14 +0000 (+0200) Subject: ntp: make sure new configuration IDs are unused X-Git-Tag: 4.6-pre1~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=66512ebcb362ac5f5d55c087a8f39872aa1b0edf;p=thirdparty%2Fchrony.git 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. --- diff --git a/ntp_sources.c b/ntp_sources.c index 64d9a8b4..29c99acf 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;