]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Fix possible crash when leaving a channel
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 10 Nov 2016 12:35:02 +0000 (07:35 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 22 Dec 2016 01:26:14 +0000 (20:26 -0500)
When leaving a channel, there exists a possibility
that we have not created the channel oil yet.
Ensure that we have channel oil before dereferencing

Ticket: CM-13522
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_ifchannel.c

index ca1f2f6b4215b92aa681caf92260868fa219d1e4..b3b2748359f2e551bd2d050fc475e6afecfc40aa 100644 (file)
@@ -905,7 +905,7 @@ void pim_ifchannel_local_membership_del(struct interface *ifp,
                         buff, ifp->name, pim_str_sg_dump (&child->sg));
            }
 
-         if (!pim_upstream_evaluate_join_desired (child))
+         if (c_oil && !pim_upstream_evaluate_join_desired (child))
            pim_channel_del_oif (c_oil, ifp, PIM_OIF_FLAG_PROTO_PIM);
 
          /*
@@ -913,7 +913,7 @@ void pim_ifchannel_local_membership_del(struct interface *ifp,
           * has output here then the *,G was supplying the implied
           * if channel.  So remove it.
           */
-         if (!chchannel && c_oil->oil.mfcc_ttls[pim_ifp->mroute_vif_index])
+         if (!chchannel && c_oil && c_oil->oil.mfcc_ttls[pim_ifp->mroute_vif_index])
            pim_channel_del_oif (c_oil, ifp, PIM_OIF_FLAG_PROTO_PIM);
         }
     }