]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: fix some null pointer derefs in cli 1227/head
authorQuentin Young <qlyoung@cumulusnetworks.com>
Fri, 22 Sep 2017 21:15:33 +0000 (17:15 -0400)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Fri, 22 Sep 2017 21:27:20 +0000 (17:27 -0400)
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>
pimd/pim_cmd.c

index 1885d5a61a9e104ef3905ddd6dbfd847e43cdf34..f330807b22ebf47912bff6891c9405deeff0e14a 100644 (file)
@@ -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;