mirror of
https://gitlab.com/chrony/chrony.git
synced 2025-12-03 16:35:06 -05:00
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.
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user