svn commit: r356988 - head/sys/netinet6
Gleb Smirnoff
glebius at FreeBSD.org
Wed Jan 22 17:06:56 UTC 2020
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
More information about the svn-src-all
mailing list