Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 08 Feb 2001 10:39:56 +0900
From:      itojun@iijlab.net
To:        Jonathan Lemon <jlemon@flugsvamp.com>, kris@obsecurity.org, net@freebsd.org
Subject:   Re: [itojun@iijlab.net: accept(2) behavior with tcp RST right after handshake]
Message-ID:  <9722.981596396@coconut.itojun.org>
In-Reply-To: itojun's message of Thu, 08 Feb 2001 10:33:29 JST. <9619.981596009@coconut.itojun.org>

next in thread | previous in thread | raw e-mail | index | archive | help

>>>Looks good to me (although the patch is mixed in with a bunch
>>>of other crud).  I've tested it out locally and will commit it
>>>unless there are any objections.
>>	it is because of cvs issue.  the important portion is below.
>	oops, need some change in uipc_syscalls.c side... hold on.

	this diff is taken against 4.2-RELEASE (in kame tree), sorry.
	also i need to say that i ran no tests (i have no environment).

	uipc_syscalls.c change: make very sure to nuke file descriptor on errors
	uipc_socket.c change: return ECONNABORTED

itojun


Index: kern/uipc_socket.c
===================================================================
RCS file: /cvsroot/kame/kame/freebsd4/sys/kern/uipc_socket.c,v
retrieving revision 1.1.1.3
retrieving revision 1.3
diff -u -r1.1.1.3 -r1.3
--- kern/uipc_socket.c	2001/01/19 02:25:59	1.1.1.3
+++ kern/uipc_socket.c	2001/02/08 01:37:42	1.3
@@ -362,7 +362,7 @@
 	else {
 		if (nam)
 			*nam = 0;
-		error = 0;
+		error = ECONNABORTED;
 	}
 	splx(s);
 	return (error);
Index: kern/uipc_syscalls.c
===================================================================
RCS file: /cvsroot/kame/kame/freebsd4/sys/kern/uipc_syscalls.c,v
retrieving revision 1.1.1.3
retrieving revision 1.2
diff -u -r1.1.1.3 -r1.2
--- kern/uipc_syscalls.c	2001/01/19 02:26:00	1.1.1.3
+++ kern/uipc_syscalls.c	2001/02/08 01:37:42	1.2
@@ -270,28 +270,22 @@
 	fp->f_ops = &socketops;
 	fp->f_type = DTYPE_SOCKET;
 	sa = 0;
-	(void) soaccept(so, &sa);
-	if (sa == 0) {
-		namelen = 0;
-		if (uap->name)
-			goto gotnoname;
-		splx(s);
-		return 0;
-	}
-	if (uap->name) {
+	error = soaccept(so, &sa);
+	if (!error && uap->name) {
 		/* check sa_len before it is destroyed */
-		if (namelen > sa->sa_len)
-			namelen = sa->sa_len;
+		if (sa) {
+			if (namelen > sa->sa_len)
+				namelen = sa->sa_len;
 #ifdef COMPAT_OLDSOCK
-		if (compat)
-			((struct osockaddr *)sa)->sa_family =
-			    sa->sa_family;
+			if (compat)
+				((struct osockaddr *)sa)->sa_family =
+				    sa->sa_family;
 #endif
-		error = copyout(sa, (caddr_t)uap->name, (u_int)namelen);
-		if (!error)
-gotnoname:
-			error = copyout((caddr_t)&namelen,
-			    (caddr_t)uap->anamelen, sizeof (*uap->anamelen));
+			error = copyout(sa, (caddr_t)uap->name, (u_int)namelen);
+		} else
+			namelen = 0;
+		error = copyout((caddr_t)&namelen,
+		    (caddr_t)uap->anamelen, sizeof (*uap->anamelen));
 	}
 	if (sa)
 		FREE(sa, M_SONAME);


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message




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