]> git.proxmox.com Git - mirror_frr.git/commitdiff
pim6d: Fix crash in ipv6 pim command
authorSarita Patra <saritap@vmware.com>
Fri, 5 May 2023 17:52:33 +0000 (10:52 -0700)
committerSarita Patra <saritap@vmware.com>
Tue, 30 May 2023 07:43:45 +0000 (00:43 -0700)
Problem:
Execute the below commands, pim6d core happens.
interface ens193
 ip address 69.0.0.2/24
 ipv6 address 8000::1/120
 ipv6 mld
 ipv6 pim
We see crash only if the interface is not configured, and
we are executing PIM/MLD commands.

RootCause:
Interface ens193 is not configured. So, it will have
ifindex = 0 and mroute_vif_index = -1.
Currently, we don't enable MLD on an interface if
mroute_vif_index < 0. So, pim_ifp->MLD = NULL.
In the API pim_if_membership_refresh(), we are accessing
pim_ifp->MLD NULL pointer which leads to crash.

Fix:
Added NULL check before accessing pim_ifp->MLD pointer in
the API pim_if_membership_refresh().

Issue: #13385

Signed-off-by: Sarita Patra <saritap@vmware.com>
pimd/pim_nb_config.c

index 3c4ab1d4cc5fa1be87ac83e7a1b549923a762089..d7e41545580406b3fb0edb5db96eb07d4ff0ce4d 100644 (file)
@@ -81,15 +81,17 @@ static void pim_if_membership_refresh(struct interface *ifp)
 
        pim_ifp = ifp->info;
        assert(pim_ifp);
-#if PIM_IPV == 6
-       gm_ifp = pim_ifp->mld;
-#endif
 
        if (!pim_ifp->pim_enable)
                return;
        if (!pim_ifp->gm_enable)
                return;
 
+#if PIM_IPV == 6
+       gm_ifp = pim_ifp->mld;
+       if (!gm_ifp)
+               return;
+#endif
        /*
         * First clear off membership from all PIM (S,G) entries on the
         * interface