pimd: Fix possible crash when leaving a channel

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>
This commit is contained in:
Donald Sharp 2016-11-10 07:35:02 -05:00
parent b76d6e718e
commit b72f79a92b

View File

@ -905,7 +905,7 @@ void pim_ifchannel_local_membership_del(struct interface *ifp,
buff, ifp->name, pim_str_sg_dump (&child->sg)); 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); 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 * has output here then the *,G was supplying the implied
* if channel. So remove it. * 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); pim_channel_del_oif (c_oil, ifp, PIM_OIF_FLAG_PROTO_PIM);
} }
} }