]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
OSPF: Fix crash during route removal
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Thu, 19 Jul 2018 18:48:13 +0000 (20:48 +0200)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Thu, 19 Jul 2018 18:48:13 +0000 (20:48 +0200)
The bug was introduced by an earler patch which removed additional eattr
argument to rt_notify hook.

proto/ospf/topology.c

index 54b255c99688b004af8c720a40cd3614a52feba4..03b773499d9383ea75873d9f26ced2a5012ea530 100644 (file)
@@ -1248,7 +1248,6 @@ ospf_rt_notify(struct proto *P, struct channel *ch UNUSED, net *n, rte *new, rte
   struct ospf_proto *p = (struct ospf_proto *) P;
   struct ospf_area *oa = NULL; /* non-NULL for NSSA-LSA */
   ort *nf;
-  struct ea_list *ea = new->attrs->eattrs;
 
   /*
    * There are several posibilities:
@@ -1282,8 +1281,8 @@ ospf_rt_notify(struct proto *P, struct channel *ch UNUSED, net *n, rte *new, rte
 
   /* Get route attributes */
   rta *a = new->attrs;
-  eattr *m1a = ea_find(ea, EA_OSPF_METRIC1);
-  eattr *m2a = ea_find(ea, EA_OSPF_METRIC2);
+  eattr *m1a = ea_find(a->eattrs, EA_OSPF_METRIC1);
+  eattr *m2a = ea_find(a->eattrs, EA_OSPF_METRIC2);
   uint m1 = m1a ? m1a->u.data : 0;
   uint m2 = m2a ? m2a->u.data : 10000;
 
@@ -1307,7 +1306,7 @@ ospf_rt_notify(struct proto *P, struct channel *ch UNUSED, net *n, rte *new, rte
 
   uint ebit = m2a || !m1a;
   uint metric = ebit ? m2 : m1;
-  uint tag = ea_get_int(ea, EA_OSPF_TAG, 0);
+  uint tag = ea_get_int(a->eattrs, EA_OSPF_TAG, 0);
 
   ip_addr fwd = IPA_NONE;
   if ((a->dest == RTD_UNICAST) && use_gw_for_fwaddr(p, a->nh.gw, a->nh.iface))