summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2017-09-22 17:15:33 -0400
committerQuentin Young <qlyoung@cumulusnetworks.com>2017-09-22 17:27:20 -0400
commit21b3e44eb495943dfd0c876216086af89fd1cefd (patch)
treeedfcbee1b1196e0493443431230c56c86a6547e8
parentb1cebe20cd1b5663cc2a47a99ac94dac046b8610 (diff)
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 <qlyoung@cumulusnetworks.com>
-rw-r--r--pimd/pim_cmd.c16
1 files changed, 12 insertions, 4 deletions
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;