From: Ondrej Zajicek (work) Date: Fri, 14 Feb 2020 21:37:07 +0000 (+0100) Subject: RIP: Fix crash when interface is removed X-Git-Tag: v2.0.8~97 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3343088a7164a54b1e6c6cf9648d8036a61e9827;p=thirdparty%2Fbird.git 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. --- diff --git a/proto/rip/rip.c b/proto/rip/rip.c index 4559310eb..e811a3d84 100644 --- a/proto/rip/rip.c +++ b/proto/rip/rip.c @@ -167,7 +167,7 @@ rip_announce_rte(struct rip_proto *p, struct rip_entry *en) struct nexthop *nh = allocz(sizeof(struct nexthop)); 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; nexthop_insert(&nhs, nh); @@ -184,7 +184,7 @@ rip_announce_rte(struct rip_proto *p, struct rip_entry *en) /* Unipath route */ a0.from = rt->from->nbr->addr; 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); @@ -402,7 +402,7 @@ rip_remove_neighbor(struct rip_proto *p, struct rip_neighbor *n) { 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); n->ifa = NULL;