When pim_upstream_new is called the code looks up the nexthop.
If there is no route to the source, the code silently ignored
the error returned.  When the nexthop lookup fails don't create
the 'struct pim_stream *' to return.

Signed-off-by: Donald Sharp <[email protected]>
---
 pimd/pim_upstream.c |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c
index d02f915..a4d274a 100644
--- a/pimd/pim_upstream.c
+++ b/pimd/pim_upstream.c
@@ -349,6 +349,7 @@ static struct pim_upstream *pim_upstream_new(struct in_addr 
source_addr,
                                             struct in_addr group_addr)
 {
   struct pim_upstream *up;
+  enum pim_rpf_result rpf_result;
 
   up = XMALLOC(MTYPE_PIM_UPSTREAM, sizeof(*up));
   if (!up) {
@@ -372,7 +373,11 @@ static struct pim_upstream *pim_upstream_new(struct 
in_addr source_addr,
   up->rpf.source_nexthop.mrib_route_metric        = 
qpim_infinite_assert_metric.route_metric;
   up->rpf.rpf_addr.s_addr                         = PIM_NET_INADDR_ANY;
 
-  pim_rpf_update(up, 0);
+  rpf_result = pim_rpf_update(up, 0);
+  if (rpf_result == PIM_RPF_FAILURE) {
+    XFREE(MTYPE_PIM_UPSTREAM, up);
+    return NULL;
+  }
 
   listnode_add(qpim_upstream_list, up);
 
-- 
1.7.10.4


_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to