Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 8 Jul 2006 03:04:39 GMT
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 100954 for review
Message-ID:  <200607080304.k6834dHD081383@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=100954

Change 100954 by jhb@jhb_mutex on 2006/07/08 03:03:42

	- Use PTRIN() in a few places it wasn't being used.
	- Push the copyout of msg.msg_namelen out to the few places that
	  need it to simplify the interface to kern_recvit() (we can now
	  drop the namelenp arg).

Affected files ...

.. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_misc.c#38 edit
.. //depot/projects/smpng/sys/compat/svr4/svr4_stream.c#32 edit
.. //depot/projects/smpng/sys/kern/uipc_syscalls.c#84 edit
.. //depot/projects/smpng/sys/sys/syscallsubr.h#43 edit

Differences ...

==== //depot/projects/smpng/sys/compat/freebsd32/freebsd32_misc.c#38 (text+ko) ====

@@ -1000,8 +1000,8 @@
 	error = freebsd32_copyinmsghdr(uap->msg, &msg);
 	if (error)
 		return (error);
-	error = freebsd32_copyiniov((struct iovec32 *)(uintptr_t)m32.msg_iov,
-	    m32.msg_iovlen, &iov, EMSGSIZE);
+	error = freebsd32_copyiniov(PTRIN(m32.msg_iov), m32.msg_iovlen, &iov,
+	    EMSGSIZE);
 	if (error)
 		return (error);
 	msg.msg_flags = uap->flags;
@@ -1009,7 +1009,7 @@
 	msg.msg_iov = iov;
 
 	controlp = (msg.msg_control != NULL) ?  &control : NULL;
-	error = kern_recvit(td, uap->s, &msg, NULL, UIO_USERSPACE,
+	error = kern_recvit(td, uap->s, &msg, UIO_USERSPACE,
 	    UIO_USERSPACE, controlp);
 	if (error == 0) {
 		msg.msg_iov = uiov;
@@ -1086,8 +1086,8 @@
 	error = freebsd32_copyinmsghdr(uap->msg, &msg);
 	if (error)
 		return (error);
-	error = freebsd32_copyiniov((struct iovec32 *)(uintptr_t)m32.msg_iov,
-	    m32.msg_iovlen, &iov, EMSGSIZE);
+	error = freebsd32_copyiniov(PTRIN(m32.msg_iov), m32.msg_iovlen, &iov,
+	    EMSGSIZE);
 	if (error)
 		return (error);
 	msg.msg_iov = iov;
@@ -1135,24 +1135,26 @@
 	int error;
 
 	if (uap->fromlenaddr) {
-		error = copyin((void *)(uintptr_t)uap->fromlenaddr,
-		    &msg.msg_namelen, sizeof(msg.msg_namelen));
+		error = copyin(PTRIN(uap->fromlenaddr), &msg.msg_namelen,
+		    sizeof(msg.msg_namelen));
 		if (error)
 			return (error);
 	} else {
 		msg.msg_namelen = 0;
 	}
 
-	msg.msg_name = (void *)(uintptr_t)uap->from;
+	msg.msg_name = PTRIN(uap->from);
 	msg.msg_iov = &aiov;
 	msg.msg_iovlen = 1;
-	aiov.iov_base = (void *)(uintptr_t)uap->buf;
+	aiov.iov_base = PTRIN(uap->buf);
 	aiov.iov_len = uap->len;
 	msg.msg_control = 0;
 	msg.msg_flags = uap->flags;
-	error = kern_recvit(td, uap->s, &msg,
-	    (void *)(uintptr_t)uap->fromlenaddr, UIO_USERSPACE, UIO_USERSPACE,
-	    NULL);
+	error = kern_recvit(td, uap->s, &msg, UIO_USERSPACE,
+	    UIO_USERSPACE, NULL);
+	if (error == 0 && uap->fromlenaddr)
+		error = copyout(&msg.msg_namelen, PTRIN(uap->fromlenaddr),
+		    sizeof (msg.msg_namelen));
 	return (error);
 }
 
@@ -1611,14 +1613,14 @@
 		CP(hdtr32, hdtr, trl_cnt);
 
 		if (hdtr.headers != NULL) {
-			iov32 = (struct iovec32 *)(uintptr_t)hdtr32.headers;
+			iov32 = PTRIN(hdtr32.headers);
 			error = freebsd32_copyinuio(iov32,
 			    hdtr32.hdr_cnt, &hdr_uio);
 			if (error)
 				goto out;
 		}
 		if (hdtr.trailers != NULL) {
-			iov32 = (struct iovec32 *)(uintptr_t)hdtr32.trailers;
+			iov32 = PTRIN(hdtr32.trailers);
 			error = freebsd32_copyinuio(iov32,
 			    hdtr32.trl_cnt, &trl_uio);
 			if (error)

==== //depot/projects/smpng/sys/compat/svr4/svr4_stream.c#32 (text+ko) ====

@@ -1859,7 +1859,7 @@
 		aiov.iov_len = dat.maxlen;
 		msg.msg_flags = 0;
 
-		error = kern_recvit(td, uap->fd, &msg, NULL, UIO_USERSPACE,
+		error = kern_recvit(td, uap->fd, &msg, UIO_USERSPACE,
 		    UIO_SYSSPACE, NULL);
 
 		if (error) {

==== //depot/projects/smpng/sys/kern/uipc_syscalls.c#84 (text+ko) ====

@@ -952,11 +952,10 @@
 }
 
 int
-kern_recvit(td, s, mp, namelenp, uioseg, fromseg, controlp)
+kern_recvit(td, s, mp, uioseg, fromseg, controlp)
 	struct thread *td;
 	int s;
 	struct msghdr *mp;
-	void *namelenp;
 	enum uio_seg uioseg, fromseg;
 	struct mbuf **controlp;
 {
@@ -1055,15 +1054,6 @@
 				bcopy(fromsa, mp->msg_name, len);
 		}
 		mp->msg_namelen = len;
-		if (namelenp &&
-		    (error = copyout(&len, namelenp, sizeof (socklen_t)))) {
-#ifdef COMPAT_OLDSOCK
-			if (mp->msg_flags & MSG_COMPAT)
-				error = 0;	/* old recvfrom didn't check */
-			else
-#endif
-			goto out;
-		}
 	}
 	if (mp->msg_control && controlp == NULL) {
 #ifdef COMPAT_OLDSOCK
@@ -1132,9 +1122,19 @@
 	struct msghdr *mp;
 	void *namelenp;
 {
+	int error;
 
-	return (kern_recvit(td, s, mp, namelenp, UIO_USERSPACE, UIO_USERSPACE,
-	    NULL));
+	error = kern_recvit(td, s, mp, UIO_USERSPACE, UIO_USERSPACE, NULL);
+	if (error)
+		return (error);
+	if (namelenp) {
+		error = copyout(&mp->msg_namelen, namelenp, sizeof (socklen_t));
+#ifdef COMPAT_OLDSOCK
+		if (mp->msg_flags & MSG_COMPAT)
+			error = 0;	/* old recvfrom didn't check */
+#endif
+	}
+	return (error);
 }
 
 /*

==== //depot/projects/smpng/sys/sys/syscallsubr.h#43 (text+ko) ====

@@ -126,8 +126,7 @@
 	    char *buf, enum uio_seg bufseg, int count);
 int	kern_readv(struct thread *td, int fd, struct uio *auio);
 int	kern_recvit(struct thread *td, int s, struct msghdr *mp,
-	    void *namelenp, enum uio_seg uioseg, enum uio_seg fromseg,
-	    struct mbuf **controlp);
+	    enum uio_seg uioseg, enum uio_seg fromseg, struct mbuf **controlp);
 int	kern_rename(struct thread *td, char *from, char *to,
 	    enum uio_seg pathseg);
 int	kern_rmdir(struct thread *td, char *path, enum uio_seg pathseg);



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