Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Jan 2020 17:06:56 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r356988 - head/sys/netinet6
Message-ID:  <202001221706.00MH6usY027929@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Wed Jan 22 17:06:55 2020
New Revision: 356988
URL: https://svnweb.freebsd.org/changeset/base/356988

Log:
  Enter network epoch when calling in_pcbconnect() for IPv6 mapped to IPv4
  UDP sockets.  This is miss from r356983.
  
  Reported by:	https://syzkaller.appspot.com/bug?id=73c7a2e3f0783f9947459065e5c2f25fe8f82f54

Modified:
  head/sys/netinet6/udp6_usrreq.c

Modified: head/sys/netinet6/udp6_usrreq.c
==============================================================================
--- head/sys/netinet6/udp6_usrreq.c	Wed Jan 22 15:51:24 2020	(r356987)
+++ head/sys/netinet6/udp6_usrreq.c	Wed Jan 22 17:06:55 2020	(r356988)
@@ -1177,6 +1177,7 @@ udp6_close(struct socket *so)
 static int
 udp6_connect(struct socket *so, struct sockaddr *nam, struct thread *td)
 {
+	struct epoch_tracker et;
 	struct inpcb *inp;
 	struct inpcbinfo *pcbinfo;
 	struct sockaddr_in6 *sin6;
@@ -1215,10 +1216,12 @@ udp6_connect(struct socket *so, struct sockaddr *nam, 
 		vflagsav = inp->inp_vflag;
 		inp->inp_vflag |= INP_IPV4;
 		inp->inp_vflag &= ~INP_IPV6;
+		NET_EPOCH_ENTER(et);
 		INP_HASH_WLOCK(pcbinfo);
 		error = in_pcbconnect(inp, (struct sockaddr *)&sin,
 		    td->td_ucred);
 		INP_HASH_WUNLOCK(pcbinfo);
+		NET_EPOCH_EXIT(et);
 		/*
 		 * If connect succeeds, mark socket as connected. If
 		 * connect fails and socket is unbound, reset inp_vflag



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202001221706.00MH6usY027929>