]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
OSPF: Fix bad initialization of tx_hdrlen field
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Thu, 9 Jan 2020 01:59:59 +0000 (02:59 +0100)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Thu, 9 Jan 2020 02:02:15 +0000 (03:02 +0100)
Function ifa_tx_hdrlen() uses fields autype and passwords, so it must be
called after these are set.

Thanks to Kenth Eriksson for the bugreport.

proto/ospf/iface.c

index 6e7e498f27400066ce54bdaa478f3ad563241b0b..d58747c6f3b09bae90fd078bf8aa5fa541b41a16 100644 (file)
@@ -586,8 +586,6 @@ ospf_iface_new(struct ospf_area *oa, struct ifa *addr, struct ospf_iface_patt *i
   ifa->deadint = ip->deadint;
   ifa->stub = ospf_iface_stubby(ip, addr);
   ifa->ioprob = OSPF_I_OK;
-  ifa->tx_length = ifa_tx_length(ifa);
-  ifa->tx_hdrlen = ifa_tx_hdrlen(ifa);
   ifa->check_link = ip->check_link;
   ifa->ecmp_weight = ip->ecmp_weight;
   ifa->check_ttl = (ip->ttl_security == 1);
@@ -596,6 +594,10 @@ ospf_iface_new(struct ospf_area *oa, struct ifa *addr, struct ospf_iface_patt *i
   ifa->passwords = ip->passwords;
   ifa->instance_id = ip->instance_id;
 
+  /* This must be done after relevant fields are set */
+  ifa->tx_length = ifa_tx_length(ifa);
+  ifa->tx_hdrlen = ifa_tx_hdrlen(ifa);
+
   ifa->ptp_netmask = !(addr->flags & IA_PEER);
   if (ip->ptp_netmask < 2)
     ifa->ptp_netmask = ip->ptp_netmask;
@@ -698,12 +700,14 @@ ospf_iface_new_vlink(struct ospf_proto *p, struct ospf_iface_patt *ip)
   ifa->waitint = ip->waitint;
   ifa->deadint = ip->deadint;
   ifa->inftransdelay = ip->inftransdelay;
-  ifa->tx_length = ospf_is_v2(p) ? IP4_MIN_MTU : IP6_MIN_MTU;
-  ifa->tx_hdrlen = ifa_tx_hdrlen(ifa);
   ifa->autype = ip->autype;
   ifa->passwords = ip->passwords;
   ifa->instance_id = ip->instance_id;
 
+  /* This must be done after relevant fields are set */
+  ifa->tx_length = ospf_is_v2(p) ? IP4_MIN_MTU : IP6_MIN_MTU;
+  ifa->tx_hdrlen = ifa_tx_hdrlen(ifa);
+
   ifa->type = OSPF_IT_VLINK;
 
   ifa->state = OSPF_IS_DOWN;