summaryrefslogtreecommitdiffstats
path: root/isisd
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2021-02-07 20:59:53 +0100
committerDonald Sharp <sharpd@nvidia.com>2021-02-07 20:59:53 +0100
commit37a74717c7d50eacb1bad842aa84546bbe5b954b (patch)
tree2dd9f5561780cab141c36f986bce6b2f3c95518f /isisd
parentMerge pull request #7937 from pjdruddy/topotest-evpn-svi-advertise (diff)
downloadfrr-37a74717c7d50eacb1bad842aa84546bbe5b954b.tar.xz
frr-37a74717c7d50eacb1bad842aa84546bbe5b954b.zip
*: Fix usage of bfd_adj_event
Valgrind reports: 469901-==469901== 469901-==469901== Conditional jump or move depends on uninitialised value(s) 469901:==469901== at 0x3A090D: bgp_bfd_dest_update (bgp_bfd.c:416) 469901-==469901== by 0x497469E: zclient_read (zclient.c:3701) 469901-==469901== by 0x4955AEC: thread_call (thread.c:1684) 469901-==469901== by 0x48FF64E: frr_run (libfrr.c:1126) 469901-==469901== by 0x213AB3: main (bgp_main.c:540) 469901-==469901== Uninitialised value was created by a stack allocation 469901:==469901== at 0x3A0725: bgp_bfd_dest_update (bgp_bfd.c:376) 469901-==469901== 469901-==469901== Conditional jump or move depends on uninitialised value(s) 469901:==469901== at 0x3A093C: bgp_bfd_dest_update (bgp_bfd.c:421) 469901-==469901== by 0x497469E: zclient_read (zclient.c:3701) 469901-==469901== by 0x4955AEC: thread_call (thread.c:1684) 469901-==469901== by 0x48FF64E: frr_run (libfrr.c:1126) 469901-==469901== by 0x213AB3: main (bgp_main.c:540) 469901-==469901== Uninitialised value was created by a stack allocation 469901:==469901== at 0x3A0725: bgp_bfd_dest_update (bgp_bfd.c:376) On looking at bgp_bfd_dest_update the function call into bfd_get_peer_info when it fails to lookup the ifindex ifp pointer just returns leaving the dest and src prefix pointers pointing to whatever was passed in. Let's do two things: a) The src pointer was sometimes assumed to be passed in and sometimes not. Forget that. Make it always be passed in b) memset the src and dst pointers to be all zeros. Then when we look at either of the pointers we are not making decisions based upon random data in the pointers. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Diffstat (limited to 'isisd')
-rw-r--r--isisd/isis_bfd.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/isisd/isis_bfd.c b/isisd/isis_bfd.c
index e74af4da2..4fac73511 100644
--- a/isisd/isis_bfd.c
+++ b/isisd/isis_bfd.c
@@ -146,11 +146,11 @@ static void bfd_adj_event(struct isis_adjacency *adj, struct prefix *dst,
static int isis_bfd_interface_dest_update(ZAPI_CALLBACK_ARGS)
{
struct interface *ifp;
- struct prefix dst_ip;
+ struct prefix dst_ip, src_ip;
int status;
- ifp = bfd_get_peer_info(zclient->ibuf, &dst_ip, NULL, &status,
- NULL, vrf_id);
+ ifp = bfd_get_peer_info(zclient->ibuf, &dst_ip, &src_ip, &status, NULL,
+ vrf_id);
if (!ifp || (dst_ip.family != AF_INET && dst_ip.family != AF_INET6))
return 0;