summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Jakma <paul@opensourcerouting.org>2014-09-19 16:41:10 +0100
committerDaniel Walton <dwalton@cumulusnetworks.com>2016-05-26 15:33:30 +0000
commitf842f166403b993a6763611808ae05da6cb9ca93 (patch)
tree7528b131a9fd6fc0a855f4daeb3a1f7eaf510292
parent0908a2fdd38417908959f548548ca13a3b5c435a (diff)
ospfd: Make ospf_passive_interface_update calls friendly to static analysis
* ospf_vty.c: ({no_}ospf_passive_interface_addr_cmd) To a static analyser, the call to ospf_passive_interface_update can look like uninitialised memory in addr might be read from. It won't be, as ospf_passive_interface_update only reads addr if params != IF_DEF_PARAMS, but not clear. Split up the helper into the two cases to make it clear. (cherry picked from commit e1bcd4741c24ff990a9413ead9a9e37b80153046)
-rw-r--r--ospfd/ospf_vty.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
index 89f2e12857..54d82da639 100644
--- a/ospfd/ospf_vty.c
+++ b/ospfd/ospf_vty.c
@@ -323,9 +323,9 @@ ospf_passive_interface_default (struct ospf *ospf, u_char newval)
}
static void
-ospf_passive_interface_update (struct ospf *ospf, struct interface *ifp,
- struct in_addr addr,
- struct ospf_if_params *params, u_char value)
+ospf_passive_interface_update_addr (struct ospf *ospf, struct interface *ifp,
+ struct ospf_if_params *params, u_char value,
+ struct in_addr addr)
{
u_char dflt;
@@ -345,7 +345,14 @@ ospf_passive_interface_update (struct ospf *ospf, struct interface *ifp,
ospf_free_if_params (ifp, addr);
ospf_if_update_params (ifp, addr);
}
- else
+}
+
+static void
+ospf_passive_interface_update (struct ospf *ospf, struct interface *ifp,
+ struct ospf_if_params *params, u_char value)
+{
+ params->passive_interface = value;
+ if (params == IF_DEF_PARAMS (ifp))
{
if (value != ospf->passive_interface_default)
SET_IF_PARAM (params, passive_interface);
@@ -392,8 +399,11 @@ DEFUN (ospf_passive_interface,
params = ospf_get_if_params (ifp, addr);
ospf_if_update_params (ifp, addr);
+ ospf_passive_interface_update_addr (ospf, ifp, params,
+ OSPF_IF_PASSIVE, addr);
}
- ospf_passive_interface_update (ospf, ifp, addr, params, OSPF_IF_PASSIVE);
+
+ ospf_passive_interface_update (ospf, ifp, params, OSPF_IF_PASSIVE);
/* XXX We should call ospf_if_set_multicast on exactly those
* interfaces for which the passive property changed. It is too much
@@ -472,9 +482,11 @@ DEFUN (no_ospf_passive_interface,
params = ospf_lookup_if_params (ifp, addr);
if (params == NULL)
return CMD_SUCCESS;
+ ospf_passive_interface_update_addr (ospf, ifp, params, OSPF_IF_ACTIVE,
+ addr);
}
- ospf_passive_interface_update (ospf, ifp, addr, params, OSPF_IF_ACTIVE);
-
+ ospf_passive_interface_update (ospf, ifp, params, OSPF_IF_ACTIVE);
+
/* XXX We should call ospf_if_set_multicast on exactly those
* interfaces for which the passive property changed. It is too much
* work to determine this set, so we do this for every interface.