mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-11-02 21:58:04 +00:00
bgpd: fix rpki segfault
If a cache server was added after rpki was started it's tr_socket would not be initialized. This would lead to a segfault if the rtr manager ever decides to switch to that socket or if rpki support is stopped. Signed-off-by: Marcel Röthke <marcel.roethke@haw-hamburg.de>
This commit is contained in:
parent
c3555a6d12
commit
92110aabe4
@ -158,6 +158,30 @@ static void free_wrapper(void *ptr)
|
||||
XFREE(MTYPE_BGP_RPKI_CACHE, ptr);
|
||||
}
|
||||
|
||||
static void init_tr_socket(struct cache *cache)
|
||||
{
|
||||
if (cache->type == TCP)
|
||||
tr_tcp_init(cache->tr_config.tcp_config,
|
||||
cache->tr_socket);
|
||||
#if defined(FOUND_SSH)
|
||||
else
|
||||
tr_ssh_init(cache->tr_config.ssh_config,
|
||||
cache->tr_socket);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void free_tr_socket(struct cache *cache)
|
||||
{
|
||||
if (cache->type == TCP)
|
||||
tr_tcp_init(cache->tr_config.tcp_config,
|
||||
cache->tr_socket);
|
||||
#if defined(FOUND_SSH)
|
||||
else
|
||||
tr_ssh_init(cache->tr_config.ssh_config,
|
||||
cache->tr_socket);
|
||||
#endif
|
||||
}
|
||||
|
||||
static int rpki_validate_prefix(struct peer *peer, struct attr *attr,
|
||||
struct prefix *prefix);
|
||||
|
||||
@ -253,14 +277,7 @@ static struct rtr_mgr_group *get_groups(void)
|
||||
rtr_mgr_groups[i].sockets_len = 1;
|
||||
rtr_mgr_groups[i].preference = cache->preference;
|
||||
|
||||
if (cache->type == TCP)
|
||||
tr_tcp_init(cache->tr_config.tcp_config,
|
||||
cache->tr_socket);
|
||||
#if defined(FOUND_SSH)
|
||||
else
|
||||
tr_ssh_init(cache->tr_config.ssh_config,
|
||||
cache->tr_socket);
|
||||
#endif
|
||||
init_tr_socket(cache);
|
||||
|
||||
i++;
|
||||
}
|
||||
@ -517,9 +534,13 @@ static int add_cache(struct cache *cache)
|
||||
|
||||
listnode_add(cache_list, cache);
|
||||
|
||||
if (rtr_is_running
|
||||
&& rtr_mgr_add_group(rtr_config, &group) != RTR_SUCCESS) {
|
||||
return ERROR;
|
||||
if (rtr_is_running) {
|
||||
init_tr_socket(cache);
|
||||
|
||||
if (rtr_mgr_add_group(rtr_config, &group) != RTR_SUCCESS) {
|
||||
free_tr_socket(cache);
|
||||
return ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user