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:
parent
ab089f4fb5
commit
3343088a71
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user