mirror of
https://gitlab.labs.nic.cz/labs/bird.git
synced 2024-05-11 16:54:54 +00:00
Conf: Fixes bug in symbol lookup during reconfiguration
Symbol lookup by cf_find_symbol() not only did the lookup but also added new void symbols allocated from cfg_mem linpool, which gets broken when lookups are done outside of config parsing, which may lead to crashes during reconfiguration. The patch separates lookup-only cf_find_symbol() and config-modifying cf_get_symbol(), while the later is called only during parsing. Also new_config and cfg_mem global variables are NULLed outside of parsing.
This commit is contained in:
@@ -1663,7 +1663,7 @@ rt_prune_loop(void)
|
||||
void
|
||||
rt_preconfig(struct config *c)
|
||||
{
|
||||
struct symbol *s = cf_find_symbol("master");
|
||||
struct symbol *s = cf_get_symbol("master");
|
||||
|
||||
init_list(&c->tables);
|
||||
c->master_rtc = rt_new_table(s);
|
||||
@@ -1903,7 +1903,7 @@ rt_commit(struct config *new, struct config *old)
|
||||
rtable *ot = o->table;
|
||||
if (!ot->deleted)
|
||||
{
|
||||
struct symbol *sym = cf_find_symbol(o->name);
|
||||
struct symbol *sym = cf_find_symbol(new, o->name);
|
||||
if (sym && sym->class == SYM_TABLE && !new->shutdown)
|
||||
{
|
||||
DBG("\t%s: same\n", o->name);
|
||||
|
Reference in New Issue
Block a user