Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Jan 2020 13:37:44 +1100
From:      Kubilay Kocak <koobs@FreeBSD.org>
To:        Alexander Motin <mav@FreeBSD.org>, src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r356240 - head/sys/netinet
Message-ID:  <ead44a08-d328-079d-f716-f3aa3f449183@FreeBSD.org>
In-Reply-To: <201912311858.xBVIwUSh048909@repo.freebsd.org>
References:  <201912311858.xBVIwUSh048909@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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-unsubscribe@freebsd.org"
> 

Hi Alexander,

Is this a only-head-impacted fix, or does the issue impact stable/12,11 
too, warranting MFC ?



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?ead44a08-d328-079d-f716-f3aa3f449183>