From: Quentin Young Date: Fri, 22 Sep 2017 21:15:33 +0000 (-0400) Subject: pimd: fix some null pointer derefs in cli X-Git-Tag: frr-4.0-dev~282^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=21b3e44eb495943dfd0c876216086af89fd1cefd;p=mirror%2Ffrr.git pimd: fix some null pointer derefs in cli If pim/igmp is not enabled on an interface, the ->info pointer will be null. Need to check that before dereferencing it. Signed-off-by: Quentin Young --- diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c index 1885d5a61a..f330807b22 100644 --- a/pimd/pim_cmd.c +++ b/pimd/pim_cmd.c @@ -3160,6 +3160,14 @@ static void clear_interfaces(struct pim_instance *pim) clear_pim_interfaces(pim); } +#define PIM_GET_PIM_INTERFACE(pim_ifp, ifp) \ + pim_ifp = ifp->info; \ + if (!pim_ifp) { \ + vty_out(vty, \ + "%% Enable PIM and/or IGMP on this interface first\n"); \ + return CMD_WARNING_CONFIG_FAILED; \ + } + DEFUN (clear_ip_interfaces, clear_ip_interfaces_cmd, "clear ip interfaces [vrf NAME]", @@ -6474,7 +6482,7 @@ DEFUN (interface_ip_mroute, struct in_addr src_addr; int result; - pim_ifp = iif->info; + PIM_GET_PIM_INTERFACE(pim_ifp, iif); pim = pim_ifp->pim; oifname = argv[idx_interface]->arg; @@ -6525,7 +6533,7 @@ DEFUN (interface_ip_mroute_source, struct in_addr src_addr; int result; - pim_ifp = iif->info; + PIM_GET_PIM_INTERFACE(pim_ifp, iif); pim = pim_ifp->pim; oifname = argv[idx_interface]->arg; @@ -6580,7 +6588,7 @@ DEFUN (interface_no_ip_mroute, struct in_addr src_addr; int result; - pim_ifp = iif->info; + PIM_GET_PIM_INTERFACE(pim_ifp, iif); pim = pim_ifp->pim; oifname = argv[idx_interface]->arg; @@ -6632,7 +6640,7 @@ DEFUN (interface_no_ip_mroute_source, struct in_addr src_addr; int result; - pim_ifp = iif->info; + PIM_GET_PIM_INTERFACE(pim_ifp, iif); pim = pim_ifp->pim; oifname = argv[idx_interface]->arg;