0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-11-17 16:48:43 +00:00

RIP: Fix crash when interface is removed

Recent changes in neighbor code caused RIP to access neighbor field which
is NULL during interface/neighbor removal and caused crash when debug
messages are enabled. Use correct field to get iface from neighbor.
This commit is contained in:
Ondrej Zajicek (work) 2020-02-14 22:37:07 +01:00
parent ab089f4fb5
commit 3343088a71

View File

@ -167,7 +167,7 @@ rip_announce_rte(struct rip_proto *p, struct rip_entry *en)
struct nexthop *nh = allocz(sizeof(struct nexthop)); struct nexthop *nh = allocz(sizeof(struct nexthop));
nh->gw = rt->next_hop; nh->gw = rt->next_hop;
nh->iface = rt->from->nbr->iface; nh->iface = rt->from->ifa->iface;
nh->weight = rt->from->ifa->cf->ecmp_weight; nh->weight = rt->from->ifa->cf->ecmp_weight;
nexthop_insert(&nhs, nh); nexthop_insert(&nhs, nh);
@ -184,7 +184,7 @@ rip_announce_rte(struct rip_proto *p, struct rip_entry *en)
/* Unipath route */ /* Unipath route */
a0.from = rt->from->nbr->addr; a0.from = rt->from->nbr->addr;
a0.nh.gw = rt->next_hop; a0.nh.gw = rt->next_hop;
a0.nh.iface = rt->from->nbr->iface; a0.nh.iface = rt->from->ifa->iface;
} }
rta *a = rta_lookup(&a0); rta *a = rta_lookup(&a0);
@ -402,7 +402,7 @@ rip_remove_neighbor(struct rip_proto *p, struct rip_neighbor *n)
{ {
neighbor *nbr = n->nbr; neighbor *nbr = n->nbr;
TRACE(D_EVENTS, "Removing neighbor %I on %s", nbr->addr, nbr->iface->name); TRACE(D_EVENTS, "Removing neighbor %I on %s", nbr->addr, nbr->ifreq->name);
rem_node(NODE n); rem_node(NODE n);
n->ifa = NULL; n->ifa = NULL;