On 1/01/2020 5:58 am, Alexander Motin wrote:
Author: mav
Date: Tue Dec 31 18:58:29 2019
New Revision: 356240
URL: https://svnweb.freebsd.org/changeset/base/356240

Log:
   Relax locking of carp_forus().
This fixes deadlock between CARP and bridge. Bridge calls this function
   taking CARP lock while holding bridge lock.  Same time CARP tries to send
   its announcements via the bridge while holding CARP lock.
Use of CARP_LOCK() here does not solve anything, since sc_addr is constant
   while race on sc_state is harmless and use of the lock does not close it.
Reviewed by: glebius
   MFC after:   2 weeks
   Sponsored by:        iXsystems, Inc.

Modified:
   head/sys/netinet/ip_carp.c

Modified: head/sys/netinet/ip_carp.c
==============================================================================
--- head/sys/netinet/ip_carp.c  Tue Dec 31 18:28:25 2019        (r356239)
+++ head/sys/netinet/ip_carp.c  Tue Dec 31 18:58:29 2019        (r356240)
@@ -1230,14 +1230,15 @@ carp_forus(struct ifnet *ifp, u_char *dhost)
CIF_LOCK(ifp->if_carp);
        IFNET_FOREACH_CARP(ifp, sc) {
-               CARP_LOCK(sc);
+               /*
+                * CARP_LOCK() is not here, since would protect nothing, but
+                * cause deadlock with if_bridge, calling this under its lock.
+                */
                if (sc->sc_state == MASTER && !bcmp(dhost, LLADDR(&sc->sc_addr),
                    ETHER_ADDR_LEN)) {
-                       CARP_UNLOCK(sc);
                        CIF_UNLOCK(ifp->if_carp);
                        return (1);
                }
-               CARP_UNLOCK(sc);
        }
        CIF_UNLOCK(ifp->if_carp);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"


Hi Alexander,

Is this a only-head-impacted fix, or does the issue impact stable/12,11 too, warranting MFC ?
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to