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:
parent
3940d2aae3
commit
66512ebcb3
1 changed files with 11 additions and 0 deletions
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue