Check if `if_carp' is empty inside carp_ourether() instead of outside. 

ok?

Index: net/if_bridge.c
===================================================================
RCS file: /cvs/src/sys/net/if_bridge.c,v
retrieving revision 1.301
diff -u -p -r1.301 if_bridge.c
--- net/if_bridge.c     10 Jan 2018 23:50:39 -0000      1.301
+++ net/if_bridge.c     22 Jan 2018 10:54:48 -0000
@@ -1108,8 +1108,7 @@ bridge_process(struct ifnet *ifp, struct
                ac = (struct arpcom *)ifl->ifp;
                if (bcmp(ac->ac_enaddr, eh->ether_dhost, ETHER_ADDR_LEN) == 0
 #if NCARP > 0
-                   || (!SRPL_EMPTY_LOCKED(&ifl->ifp->if_carp) &&
-                       !carp_ourether(ifl->ifp, eh->ether_dhost))
+                   || !carp_ourether(ifl->ifp, eh->ether_dhost)
 #endif
                    ) {
                        if (srcifl->bif_flags & IFBIF_LEARNING)
@@ -1131,8 +1130,7 @@ bridge_process(struct ifnet *ifp, struct
                }
                if (bcmp(ac->ac_enaddr, eh->ether_shost, ETHER_ADDR_LEN) == 0
 #if NCARP > 0
-                   || (!SRPL_EMPTY_LOCKED(&ifl->ifp->if_carp) &&
-                       !carp_ourether(ifl->ifp, eh->ether_shost))
+                   || !carp_ourether(ifl->ifp, eh->ether_shost)
 #endif
                    ) {
                        m_freem(m);
Index: netinet/ip_carp.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_carp.c,v
retrieving revision 1.327
diff -u -p -r1.327 ip_carp.c
--- netinet/ip_carp.c   12 Jan 2018 23:47:24 -0000      1.327
+++ netinet/ip_carp.c   22 Jan 2018 10:53:35 -0000
@@ -1339,12 +1339,15 @@ carp_iamatch(struct ifnet *ifp)
 int
 carp_ourether(struct ifnet *ifp, u_int8_t *ena)
 {
-       struct srpl *cif;
+       struct srpl *cif = &ifp->if_carp;
        struct carp_softc *vh;
 
        KERNEL_ASSERT_LOCKED(); /* touching if_carp + carp_vhosts */
+
+       if (SRPL_EMPTY_LOCKED(cif))
+               return (0);
+
        KASSERT(ifp->if_type == IFT_ETHER);
-       cif = &ifp->if_carp;
 
        SRPL_FOREACH_LOCKED(vh, cif, sc_list) {
                struct carp_vhost_entry *vhe;

Reply via email to