diff options
author | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2020-01-09 02:59:59 +0100 |
---|---|---|
committer | Ondrej Zajicek (work) <santiago@crfreenet.org> | 2020-01-09 03:02:15 +0100 |
commit | 9f2670277cc0d56d3364d4784348056174175aba (patch) | |
tree | bebaba3e4493adc4b30ddaeec2db8b729702545d /proto | |
parent | 7d767c5a3d001a6a1a5c3e800553202fd492190c (diff) |
OSPF: Fix bad initialization of tx_hdrlen field
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.
Diffstat (limited to 'proto')
-rw-r--r-- | proto/ospf/iface.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/proto/ospf/iface.c b/proto/ospf/iface.c index 6e7e498f..d58747c6 100644 --- a/proto/ospf/iface.c +++ b/proto/ospf/iface.c @@ -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; |