Module Name:    src
Committed By:   rmind
Date:           Fri Apr 23 15:19:21 UTC 2010

Modified Files:
        src/sys/compat/netbsd32: netbsd32_compat_10.c netbsd32_compat_20.c
            netbsd32_compat_30.c netbsd32_compat_43.c netbsd32_compat_50.c
            netbsd32_event.c netbsd32_exec_aout.c netbsd32_fs.c
            netbsd32_ioctl.c netbsd32_netbsd.c netbsd32_select.c
            netbsd32_signal.c netbsd32_socket.c netbsd32_sysctl.c
        src/sys/compat/osf1: osf1_cvt.c osf1_descrip.c osf1_file.c
            osf1_generic.c osf1_misc.c osf1_signal.c osf1_socket.c
        src/sys/kern: uipc_syscalls.c
        src/sys/sys: uio.h

Log Message:
Replace M_IOV and some malloc(9)s with kmem(9), and while there:
- Fix invalid free (M_TEMP vs M_IOV) in do_sys_recvmsg(), spotted by jakll...@.
  Also, same fix in osf1_sys_sendmsg_xopen().
- Fix attempt to free non-allocated memory in error path in 
netbsd32___getfh30().
- Plug a memory leak in compat_43_netbsd32_orecvmsg().


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/compat/netbsd32/netbsd32_compat_10.c
cvs rdiff -u -r1.27 -r1.28 src/sys/compat/netbsd32/netbsd32_compat_20.c
cvs rdiff -u -r1.29 -r1.30 src/sys/compat/netbsd32/netbsd32_compat_30.c
cvs rdiff -u -r1.51 -r1.52 src/sys/compat/netbsd32/netbsd32_compat_43.c
cvs rdiff -u -r1.15 -r1.16 src/sys/compat/netbsd32/netbsd32_compat_50.c
cvs rdiff -u -r1.7 -r1.8 src/sys/compat/netbsd32/netbsd32_event.c
cvs rdiff -u -r1.24 -r1.25 src/sys/compat/netbsd32/netbsd32_exec_aout.c
cvs rdiff -u -r1.58 -r1.59 src/sys/compat/netbsd32/netbsd32_fs.c
cvs rdiff -u -r1.46 -r1.47 src/sys/compat/netbsd32/netbsd32_ioctl.c
cvs rdiff -u -r1.166 -r1.167 src/sys/compat/netbsd32/netbsd32_netbsd.c
cvs rdiff -u -r1.18 -r1.19 src/sys/compat/netbsd32/netbsd32_select.c
cvs rdiff -u -r1.33 -r1.34 src/sys/compat/netbsd32/netbsd32_signal.c
cvs rdiff -u -r1.36 -r1.37 src/sys/compat/netbsd32/netbsd32_socket.c
cvs rdiff -u -r1.30 -r1.31 src/sys/compat/netbsd32/netbsd32_sysctl.c
cvs rdiff -u -r1.26 -r1.27 src/sys/compat/osf1/osf1_cvt.c
cvs rdiff -u -r1.28 -r1.29 src/sys/compat/osf1/osf1_descrip.c
cvs rdiff -u -r1.38 -r1.39 src/sys/compat/osf1/osf1_file.c
cvs rdiff -u -r1.16 -r1.17 src/sys/compat/osf1/osf1_generic.c
cvs rdiff -u -r1.84 -r1.85 src/sys/compat/osf1/osf1_misc.c
cvs rdiff -u -r1.35 -r1.36 src/sys/compat/osf1/osf1_signal.c
cvs rdiff -u -r1.19 -r1.20 src/sys/compat/osf1/osf1_socket.c
cvs rdiff -u -r1.140 -r1.141 src/sys/kern/uipc_syscalls.c
cvs rdiff -u -r1.34 -r1.35 src/sys/sys/uio.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/compat/netbsd32/netbsd32_compat_10.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_10.c:1.23 src/sys/compat/netbsd32/netbsd32_compat_10.c:1.24
--- src/sys/compat/netbsd32/netbsd32_compat_10.c:1.23	Sun Jan 11 02:45:49 2009
+++ src/sys/compat/netbsd32/netbsd32_compat_10.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_compat_10.c,v 1.23 2009/01/11 02:45:49 christos Exp $	*/
+/*	$NetBSD: netbsd32_compat_10.c,v 1.24 2010/04/23 15:19:20 rmind Exp $	*/
 
 /*
  * Copyright (c) 1994 Adam Glass and Charles M. Hannum.  All rights reserved.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_10.c,v 1.23 2009/01/11 02:45:49 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_10.c,v 1.24 2010/04/23 15:19:20 rmind Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_sysv.h"
@@ -42,7 +42,6 @@
 #include <sys/kernel.h>
 #include <sys/proc.h>
 #include <sys/sem.h>
-#include <sys/malloc.h>
 
 #include <sys/mount.h>
 #include <sys/syscallargs.h>

Index: src/sys/compat/netbsd32/netbsd32_compat_20.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_20.c:1.27 src/sys/compat/netbsd32/netbsd32_compat_20.c:1.28
--- src/sys/compat/netbsd32/netbsd32_compat_20.c:1.27	Mon Jun 29 05:08:16 2009
+++ src/sys/compat/netbsd32/netbsd32_compat_20.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_compat_20.c,v 1.27 2009/06/29 05:08:16 dholland Exp $	*/
+/*	$NetBSD: netbsd32_compat_20.c,v 1.28 2010/04/23 15:19:20 rmind Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,11 +27,10 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_20.c,v 1.27 2009/06/29 05:08:16 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_20.c,v 1.28 2010/04/23 15:19:20 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
-#include <sys/malloc.h>
 #include <sys/mount.h>
 #include <sys/stat.h>
 #include <sys/time.h>

Index: src/sys/compat/netbsd32/netbsd32_compat_30.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_30.c:1.29 src/sys/compat/netbsd32/netbsd32_compat_30.c:1.30
--- src/sys/compat/netbsd32/netbsd32_compat_30.c:1.29	Mon Jan 26 13:00:04 2009
+++ src/sys/compat/netbsd32/netbsd32_compat_30.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_compat_30.c,v 1.29 2009/01/26 13:00:04 njoly Exp $	*/
+/*	$NetBSD: netbsd32_compat_30.c,v 1.30 2010/04/23 15:19:20 rmind Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,11 +27,10 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_30.c,v 1.29 2009/01/26 13:00:04 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_30.c,v 1.30 2010/04/23 15:19:20 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
-#include <sys/malloc.h>
 #include <sys/mount.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
@@ -79,13 +78,13 @@
 		error = EBADF;
 		goto out;
 	}
-	buf = malloc(count, M_TEMP, M_WAITOK);
+	buf = kmem_alloc(count, KM_SLEEP);
 	error = vn_readdir(fp, buf, UIO_SYSSPACE, count, &done, l, 0, 0);
 	if (error == 0) {
 		*retval = netbsd32_to_dirent12(buf, done);
 		error = copyout(buf, SCARG_P32(uap, buf), *retval);
 	}
-	free(buf, M_TEMP);
+	kmem_free(buf, count);
  out:
  	fd_putfile(SCARG(uap, fd));
 	return (error);
@@ -210,10 +209,10 @@
 	    SCARG(uap, flags));
 
 	if (error != 0) {
-		s32 = malloc(sizeof *s32, M_TEMP, M_WAITOK);
+		s32 = kmem_alloc(sizeof(*s32), KM_SLEEP);
 		netbsd32_from_statvfs(sbuf, s32);
 		error = copyout(s32, SCARG_P32(uap, buf), sizeof *s32);
-		free(s32, M_TEMP);
+		kmem_free(s32, sizeof(*s32));
 	}
 	STATVFSBUF_PUT(sbuf);
 

Index: src/sys/compat/netbsd32/netbsd32_compat_43.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_43.c:1.51 src/sys/compat/netbsd32/netbsd32_compat_43.c:1.52
--- src/sys/compat/netbsd32/netbsd32_compat_43.c:1.51	Fri Jan 30 13:01:36 2009
+++ src/sys/compat/netbsd32/netbsd32_compat_43.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_compat_43.c,v 1.51 2009/01/30 13:01:36 njoly Exp $	*/
+/*	$NetBSD: netbsd32_compat_43.c,v 1.52 2010/04/23 15:19:20 rmind Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_43.c,v 1.51 2009/01/30 13:01:36 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_43.c,v 1.52 2010/04/23 15:19:20 rmind Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_43.h"
@@ -37,7 +37,6 @@
 #include <sys/systm.h>
 #include <sys/fcntl.h>
 #include <sys/filedesc.h>
-#include <sys/malloc.h>
 #include <sys/mbuf.h>
 #include <sys/mount.h>
 #include <sys/namei.h>
@@ -456,7 +455,7 @@
 	    NETBSD32PTR64(omsg.msg_accrights) != NULL ? &control : NULL,
 	    retval);
 	if (error != 0)
-		return error;
+		goto out;
 
 	/*
 	 * If there is any control information and it's SCM_RIGHTS,
@@ -493,7 +492,10 @@
 
 	if (error != 0)
 		 error = copyout(&omsg, SCARG_P32(uap, msg), sizeof(omsg));
-
+out:
+	if (iov != aiov) {
+		kmem_free(iov, omsg.msg_iovlen * sizeof(struct iov));
+	}
 	return error;
 }
 
@@ -508,10 +510,10 @@
 	struct iovec *iov, aiov[UIO_SMALLIOV];
 	struct netbsd32_omsghdr omsg;
 	struct msghdr msg;
-	int error;
 	struct mbuf *nam;
 	struct osockaddr *osa;
 	struct sockaddr *sa;
+	int error;
 
 	error = copyin(SCARG_P32(uap, msg), &omsg, sizeof (struct omsghdr));
 	if (error != 0)
@@ -549,7 +551,7 @@
 
     out:
 	if (iov != aiov)
-		free(iov, M_TEMP);
+		kmem_free(iov, omsg.msg_iovlen * sizeof(struct iov));
 	return (error);
 }
 

Index: src/sys/compat/netbsd32/netbsd32_compat_50.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_50.c:1.15 src/sys/compat/netbsd32/netbsd32_compat_50.c:1.16
--- src/sys/compat/netbsd32/netbsd32_compat_50.c:1.15	Thu Apr  8 11:51:14 2010
+++ src/sys/compat/netbsd32/netbsd32_compat_50.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_compat_50.c,v 1.15 2010/04/08 11:51:14 njoly Exp $	*/
+/*	$NetBSD: netbsd32_compat_50.c,v 1.16 2010/04/23 15:19:20 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.15 2010/04/08 11:51:14 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.16 2010/04/23 15:19:20 rmind Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_sysv.h"
@@ -44,7 +44,6 @@
 
 #include <sys/param.h>
 #include <sys/systm.h>
-#include <sys/malloc.h>
 #include <sys/mount.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
@@ -630,17 +629,16 @@
 	nevents = SCARG(uap, nevents);
 	maxalloc = MIN(KQ_NEVENTS, MAX(nchanges, nevents));
 	netbsd32_kevent_ops.keo_private =
-	    malloc(maxalloc * sizeof(struct netbsd32_kevent), M_TEMP,
-	    M_WAITOK);
+	    kmem_alloc(maxalloc * sizeof(struct netbsd32_kevent), KM_SLEEP);
 
 	error = kevent1(retval, SCARG(uap, fd),
 	    NETBSD32PTR64(SCARG(uap, changelist)), nchanges,
 	    NETBSD32PTR64(SCARG(uap, eventlist)), nevents,
 	    NETBSD32PTR64(SCARG(uap, timeout)), &netbsd32_kevent_ops);
 
-	free(netbsd32_kevent_ops.keo_private, M_TEMP);
+	kmem_free(netbsd32_kevent_ops.keo_private,
+	    maxalloc * sizeof(struct netbsd32_kevent));
 	return error;
-	return 0;
 }
 
 int

Index: src/sys/compat/netbsd32/netbsd32_event.c
diff -u src/sys/compat/netbsd32/netbsd32_event.c:1.7 src/sys/compat/netbsd32/netbsd32_event.c:1.8
--- src/sys/compat/netbsd32/netbsd32_event.c:1.7	Sun Jan 11 02:45:49 2009
+++ src/sys/compat/netbsd32/netbsd32_event.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_event.c,v 1.7 2009/01/11 02:45:49 christos Exp $	*/
+/*	$NetBSD: netbsd32_event.c,v 1.8 2010/04/23 15:19:20 rmind Exp $	*/
 
 /*
  *  Copyright (c) 2005 The NetBSD Foundation.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_event.c,v 1.7 2009/01/11 02:45:49 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_event.c,v 1.8 2010/04/23 15:19:20 rmind Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -37,7 +37,6 @@
 #include <sys/select.h>
 #include <sys/event.h>
 #include <sys/eventvar.h>
-#include <sys/malloc.h>
 #include <sys/proc.h>
 #include <sys/dirent.h>
 
@@ -115,14 +114,14 @@
 	nevents = SCARG(uap, nevents);
 	maxalloc = MIN(KQ_NEVENTS, MAX(nchanges, nevents));
 	netbsd32_kevent_ops.keo_private =
-	    malloc(maxalloc * sizeof(struct netbsd32_kevent), M_TEMP,
-	    M_WAITOK);
+	    kmem_alloc(maxalloc * sizeof(struct netbsd32_kevent), KM_SLEEP);
 
 	error = kevent1(retval, SCARG(uap, fd),
 	    NETBSD32PTR64(SCARG(uap, changelist)), nchanges,
 	    NETBSD32PTR64(SCARG(uap, eventlist)), nevents,
 	    NETBSD32PTR64(SCARG(uap, timeout)), &netbsd32_kevent_ops);
 
-	free(netbsd32_kevent_ops.keo_private, M_TEMP);
+	kmem_free(netbsd32_kevent_ops.keo_private,
+	    maxalloc * sizeof(struct netbsd32_kevent));
 	return error;
 }

Index: src/sys/compat/netbsd32/netbsd32_exec_aout.c
diff -u src/sys/compat/netbsd32/netbsd32_exec_aout.c:1.24 src/sys/compat/netbsd32/netbsd32_exec_aout.c:1.25
--- src/sys/compat/netbsd32/netbsd32_exec_aout.c:1.24	Thu May 29 14:51:26 2008
+++ src/sys/compat/netbsd32/netbsd32_exec_aout.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_exec_aout.c,v 1.24 2008/05/29 14:51:26 mrg Exp $	*/
+/*	$NetBSD: netbsd32_exec_aout.c,v 1.25 2010/04/23 15:19:20 rmind Exp $	*/
 /*	from: NetBSD: exec_aout.c,v 1.15 1996/09/26 23:34:46 cgd Exp */
 
 /*
@@ -57,12 +57,11 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_exec_aout.c,v 1.24 2008/05/29 14:51:26 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_exec_aout.c,v 1.25 2010/04/23 15:19:20 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/proc.h>
-#include <sys/malloc.h>
 #include <sys/vnode.h>
 #include <sys/exec.h>
 #include <sys/exec_aout.h>

Index: src/sys/compat/netbsd32/netbsd32_fs.c
diff -u src/sys/compat/netbsd32/netbsd32_fs.c:1.58 src/sys/compat/netbsd32/netbsd32_fs.c:1.59
--- src/sys/compat/netbsd32/netbsd32_fs.c:1.58	Mon Dec 14 00:47:11 2009
+++ src/sys/compat/netbsd32/netbsd32_fs.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_fs.c,v 1.58 2009/12/14 00:47:11 matt Exp $	*/
+/*	$NetBSD: netbsd32_fs.c,v 1.59 2010/04/23 15:19:20 rmind Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,11 +27,10 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_fs.c,v 1.58 2009/12/14 00:47:11 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_fs.c,v 1.59 2010/04/23 15:19:20 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
-#include <sys/malloc.h>
 #include <sys/mount.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
@@ -79,7 +78,7 @@
 		return NULL;
 
 	if (iovlen > aiov_len)
-		iov = malloc(iovlen * sizeof (*iov), M_TEMP, M_WAITOK);
+		iov = kmem_alloc(iovlen * sizeof(*iov), KM_SLEEP);
 
 	iovp = iov;
 	for (i = 0; i < iovlen; iov32 += N_IOV32, i += N_IOV32) {
@@ -89,7 +88,7 @@
 		error = copyin(iov32, aiov32, n * sizeof (*iov32));
 		if (error != 0) {
 			if (iov != aiov)
-				free(iov, M_TEMP);
+				kmem_free(iov, iovlen * sizeof(*iov));
 			return NULL;
 		}
 		for (j = 0; j < n; iovp++, j++) {
@@ -144,7 +143,7 @@
 			error = EINVAL;
 			goto out;
 		}
-		iov = malloc(iovlen, M_IOV, M_WAITOK);
+		iov = kmem_alloc(iovlen, KM_SLEEP);
 		needfree = iov;
 	} else if ((u_int)iovcnt > 0) {
 		iov = aiov;
@@ -180,7 +179,7 @@
 	 * if tracing, save a copy of iovec
 	 */
 	if (ktrpoint(KTR_GENIO)) {
-		ktriov = malloc(iovlen, M_TEMP, M_WAITOK);
+		ktriov = kmem_alloc(iovlen, KM_SLEEP);
 		memcpy((void *)ktriov, (void *)auio.uio_iov, iovlen);
 	}
 
@@ -194,13 +193,13 @@
 
 	if (ktriov != NULL) {
 		ktrgeniov(fd, UIO_READ, ktriov, cnt, error);
-		free(ktriov, M_TEMP);
+		kmem_free(ktriov, iovlen);
 	}
 
 	*retval = cnt;
 done:
 	if (needfree)
-		free(needfree, M_IOV);
+		kmem_free(needfree, iovlen);
 out:
 	fd_putfile(fd);
 	return (error);
@@ -248,7 +247,7 @@
 			error = EINVAL;
 			goto out;
 		}
-		iov = malloc(iovlen, M_IOV, M_WAITOK);
+		iov = kmem_alloc(iovlen, KM_SLEEP);
 		needfree = iov;
 	} else if ((u_int)iovcnt > 0) {
 		iov = aiov;
@@ -284,7 +283,7 @@
 	 * if tracing, save a copy of iovec
 	 */
 	if (ktrpoint(KTR_GENIO))  {
-		ktriov = malloc(iovlen, M_TEMP, M_WAITOK);
+		ktriov = kmem_alloc(iovlen, KM_SLEEP);
 		memcpy((void *)ktriov, (void *)auio.uio_iov, iovlen);
 	}
 
@@ -303,12 +302,12 @@
 	cnt -= auio.uio_resid;
 	if (ktriov != NULL) {
 		ktrgenio(fd, UIO_WRITE, ktriov, cnt, error);
-		free(ktriov, M_TEMP);
+		kmem_free(ktriov, iovlen);
 	}
 	*retval = cnt;
 done:
 	if (needfree)
-		free(needfree, M_IOV);
+		kmem_free(needfree, iovlen);
 out:
 	fd_putfile(fd);
 	return (error);
@@ -363,10 +362,10 @@
 	struct netbsd32_statvfs *sbuf_32;
 	int error;
 
-	sbuf_32 = malloc(sizeof *sbuf_32, M_TEMP, M_WAITOK);
+	sbuf_32 = kmem_alloc(sizeof(*sbuf_32), KM_SLEEP);
 	netbsd32_from_statvfs(kp, sbuf_32);
 	error = copyout(sbuf_32, up, sizeof(*sbuf_32));
-	free(sbuf_32, M_TEMP);
+	kmem_free(sbuf_32, sizeof(*sbuf_32));
 
 	return error;
 }
@@ -723,7 +722,7 @@
 	else if (len < 2)
 		return ERANGE;
 
-	path = (char *)malloc(len, M_TEMP, M_WAITOK);
+	path = kmem_alloc(len, KM_SLEEP);
 	if (!path)
 		return ENOMEM;
 
@@ -751,7 +750,7 @@
 	error = copyout(bp, SCARG_P32(uap, bufp), lenused);
 
 out:
-	free(path, M_TEMP);
+	kmem_free(path, len);
 	return error;
 }
 

Index: src/sys/compat/netbsd32/netbsd32_ioctl.c
diff -u src/sys/compat/netbsd32/netbsd32_ioctl.c:1.46 src/sys/compat/netbsd32/netbsd32_ioctl.c:1.47
--- src/sys/compat/netbsd32/netbsd32_ioctl.c:1.46	Fri Dec 11 11:14:34 2009
+++ src/sys/compat/netbsd32/netbsd32_ioctl.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_ioctl.c,v 1.46 2009/12/11 11:14:34 njoly Exp $	*/
+/*	$NetBSD: netbsd32_ioctl.c,v 1.47 2010/04/23 15:19:20 rmind Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_ioctl.c,v 1.46 2009/12/11 11:14:34 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_ioctl.c,v 1.47 2010/04/23 15:19:20 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -43,7 +43,6 @@
 #include <sys/audioio.h>
 #include <sys/disklabel.h>
 #include <sys/dkio.h>
-#include <sys/malloc.h>
 #include <sys/sockio.h>
 #include <sys/socket.h>
 #include <sys/ttycom.h>
@@ -575,7 +574,7 @@
 		    size32, error);
 	}
 
-	/* if we malloced data, free it here */
+	/* If we allocated data, free it here. */
 	if (memp32)
 		kmem_free(memp32, (size_t)size32);
 	if (memp)

Index: src/sys/compat/netbsd32/netbsd32_netbsd.c
diff -u src/sys/compat/netbsd32/netbsd32_netbsd.c:1.166 src/sys/compat/netbsd32/netbsd32_netbsd.c:1.167
--- src/sys/compat/netbsd32/netbsd32_netbsd.c:1.166	Tue Mar  2 21:09:21 2010
+++ src/sys/compat/netbsd32/netbsd32_netbsd.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_netbsd.c,v 1.166 2010/03/02 21:09:21 pooka Exp $	*/
+/*	$NetBSD: netbsd32_netbsd.c,v 1.167 2010/04/23 15:19:20 rmind Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001, 2008 Matthew R. Green
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_netbsd.c,v 1.166 2010/03/02 21:09:21 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_netbsd.c,v 1.167 2010/04/23 15:19:20 rmind Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ddb.h"
@@ -50,7 +50,6 @@
 #include <sys/systm.h>
 #include <sys/kernel.h>
 //#define msg __msg /* Don't ask me! */
-#include <sys/malloc.h>
 #include <sys/mount.h>
 #include <sys/socket.h>
 #include <sys/sockio.h>
@@ -1234,24 +1233,28 @@
 	vp = nd.ni_vp;
 	error = copyin(SCARG_P32(uap, fh_size), &sz32,
 	    sizeof(netbsd32_size_t));
-	if (!error) {
-		fh = malloc(sz32, M_TEMP, M_WAITOK);
-		if (fh == NULL) 
-			return EINVAL;
-		sz = sz32;
-		error = vfs_composefh(vp, fh, &sz);
-		sz32 = sz;
+	if (error) {
+		vput(vp);
+		return error;
 	}
+	fh = kmem_alloc(sz32, KM_SLEEP);
+	if (fh == NULL) 
+		return EINVAL;
+	sz = sz32;
+	error = vfs_composefh(vp, fh, &sz);
 	vput(vp);
-	if (error == E2BIG)
-		copyout(&sz, SCARG_P32(uap, fh_size), sizeof(size_t));
+
 	if (error == 0) {
-		error = copyout(&sz32, SCARG_P32(uap, fh_size),
+		const netbsd32_size_t nsz32 = sz;
+		error = copyout(&nsz32, SCARG_P32(uap, fh_size),
 		    sizeof(netbsd32_size_t));
-		if (!error)
+		if (!error) {
 			error = copyout(fh, SCARG_P32(uap, fhp), sz);
+		}
+	} else if (error == E2BIG) {
+		error = copyout(&sz, SCARG_P32(uap, fh_size), sizeof(size_t));
 	}
-	free(fh, M_TEMP);
+	kmem_free(fh, sz32);
 	return (error);
 }
 

Index: src/sys/compat/netbsd32/netbsd32_select.c
diff -u src/sys/compat/netbsd32/netbsd32_select.c:1.18 src/sys/compat/netbsd32/netbsd32_select.c:1.19
--- src/sys/compat/netbsd32/netbsd32_select.c:1.18	Wed Nov 11 09:48:51 2009
+++ src/sys/compat/netbsd32/netbsd32_select.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_select.c,v 1.18 2009/11/11 09:48:51 rmind Exp $	*/
+/*	$NetBSD: netbsd32_select.c,v 1.19 2010/04/23 15:19:20 rmind Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,11 +27,10 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_select.c,v 1.18 2009/11/11 09:48:51 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_select.c,v 1.19 2010/04/23 15:19:20 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
-#include <sys/malloc.h>
 #include <sys/mount.h>
 #include <sys/time.h>
 #include <sys/vnode.h>

Index: src/sys/compat/netbsd32/netbsd32_signal.c
diff -u src/sys/compat/netbsd32/netbsd32_signal.c:1.33 src/sys/compat/netbsd32/netbsd32_signal.c:1.34
--- src/sys/compat/netbsd32/netbsd32_signal.c:1.33	Tue Jan 19 23:15:50 2010
+++ src/sys/compat/netbsd32/netbsd32_signal.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_signal.c,v 1.33 2010/01/19 23:15:50 pooka Exp $	*/
+/*	$NetBSD: netbsd32_signal.c,v 1.34 2010/04/23 15:19:20 rmind Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,11 +27,10 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_signal.c,v 1.33 2010/01/19 23:15:50 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_signal.c,v 1.34 2010/04/23 15:19:20 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
-#include <sys/malloc.h>
 #include <sys/mount.h>
 #include <sys/stat.h>
 #include <sys/time.h>

Index: src/sys/compat/netbsd32/netbsd32_socket.c
diff -u src/sys/compat/netbsd32/netbsd32_socket.c:1.36 src/sys/compat/netbsd32/netbsd32_socket.c:1.37
--- src/sys/compat/netbsd32/netbsd32_socket.c:1.36	Wed Jul 22 17:19:44 2009
+++ src/sys/compat/netbsd32/netbsd32_socket.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_socket.c,v 1.36 2009/07/22 17:19:44 njoly Exp $	*/
+/*	$NetBSD: netbsd32_socket.c,v 1.37 2010/04/23 15:19:20 rmind Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,12 +27,11 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_socket.c,v 1.36 2009/07/22 17:19:44 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_socket.c,v 1.37 2010/04/23 15:19:20 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #define msg __msg /* Don't ask me! */
-#include <sys/malloc.h>
 #include <sys/mount.h>
 #include <sys/socket.h>
 #include <sys/sockio.h>
@@ -49,9 +48,12 @@
 #include <compat/netbsd32/netbsd32_syscallargs.h>
 #include <compat/netbsd32/netbsd32_conv.h>
 
-/* note that the netbsd32_msghdr's iov really points to a struct iovec, not a netbsd32_iovec. */
-static int recvit32(struct lwp *, int, struct netbsd32_msghdr *, struct iovec *, void *,
-			 register_t *);
+/*
+ * Note that the netbsd32_msghdr's iov really points to a struct iovec,
+ * not a netbsd32_iovec.
+ */
+static int recvit32(struct lwp *, int, struct netbsd32_msghdr *,
+    struct iovec *, void *, register_t *);
 
 int
 netbsd32_recvmsg(struct lwp *l, const struct netbsd32_recvmsg_args *uap, register_t *retval)
@@ -64,18 +66,18 @@
 	struct netbsd32_msghdr msg;
 	struct iovec aiov[UIO_SMALLIOV], *iov;
 	struct netbsd32_iovec *iov32;
+	size_t iovsz;
 	int error;
 
 	error = copyin(SCARG_P32(uap, msg), &msg, sizeof(msg));
 		/* netbsd32_msghdr needs the iov pre-allocated */
 	if (error)
 		return (error);
+	iovsz = msg.msg_iovlen * sizeof(struct iovec);
 	if ((u_int)msg.msg_iovlen > UIO_SMALLIOV) {
 		if ((u_int)msg.msg_iovlen > IOV_MAX)
 			return (EMSGSIZE);
-		iov = (struct iovec *)malloc(
-		       sizeof(struct iovec) * (u_int)msg.msg_iovlen, M_IOV,
-		       M_WAITOK);
+		iov = kmem_alloc(iovsz, KM_SLEEP);
 	} else 
 		iov = aiov;
 	msg.msg_flags = SCARG(uap, flags);
@@ -89,7 +91,7 @@
 	}
 done:
 	if (iov != aiov)
-		free(iov, M_IOV);
+		kmem_free(iov, iovsz);
 	return (error);
 }
 
@@ -97,12 +99,11 @@
 recvit32(struct lwp *l, int s, struct netbsd32_msghdr *mp, struct iovec *iov, void *namelenp, register_t *retsize)
 {
 	struct uio auio;
-	int i, len, error, iovlen;
 	struct mbuf *from = 0, *control = 0;
 	struct socket *so;
-	struct proc *p;
 	struct iovec *ktriov = NULL;
-	p = l->l_proc;
+	size_t len, iovsz;
+	int i, error;
 
 	/* fd_getsock() will use the descriptor for us */
 	if ((error = fd_getsock(s, &so)) != 0)
@@ -114,13 +115,6 @@
 	auio.uio_offset = 0;			/* XXX */
 	auio.uio_resid = 0;
 	for (i = 0; i < mp->msg_iovlen; i++, iov++) {
-#if 0
-		/* cannot happen iov_len is unsigned */
-		if (iov->iov_len < 0) {
-			error = EINVAL;
-			goto out1;
-		}
-#endif
 		/*
 		 * Reads return ssize_t because -1 is returned on error.
 		 * Therefore we must restrict the length to SSIZE_MAX to
@@ -133,10 +127,10 @@
 		}
 	}
 
+	iovsz = mp->msg_iovlen * sizeof(struct iovec);
 	if (ktrpoint(KTR_GENIO)) {
-		iovlen = auio.uio_iovcnt * sizeof(struct iovec);
-		ktriov = (struct iovec *)malloc(iovlen, M_TEMP, M_WAITOK);
-		memcpy((void *)ktriov, (void *)auio.uio_iov, iovlen);
+		ktriov = kmem_alloc(iovsz, KM_SLEEP);
+		memcpy(ktriov, auio.uio_iov, iovsz);
 	}
 
 	len = auio.uio_resid;
@@ -151,7 +145,7 @@
 
 	if (ktriov != NULL) {
 		ktrgeniov(s, UIO_READ, ktriov, len - auio.uio_resid, error);
-		free(ktriov, M_TEMP);
+		kmem_free(ktriov, iovsz);
 	}
 
 	if (error)
@@ -225,6 +219,7 @@
 	struct netbsd32_msghdr msg32;
 	struct iovec aiov[UIO_SMALLIOV], *iov;
 	struct netbsd32_iovec *iov32;
+	size_t iovsz;
 	int error;
 
 	error = copyin(SCARG_P32(uap, msg), &msg32, sizeof(msg32));
@@ -232,12 +227,11 @@
 		return (error);
 	netbsd32_to_msghdr(&msg32, &msg);
 
+	iovsz = msg.msg_iovlen * sizeof(struct iovec);
 	if ((u_int)msg.msg_iovlen > UIO_SMALLIOV) {
 		if ((u_int)msg.msg_iovlen > IOV_MAX)
 			return (EMSGSIZE);
-		iov = (struct iovec *)malloc(
-		       sizeof(struct iovec) * (u_int)msg.msg_iovlen, M_IOV,
-		       M_WAITOK);
+		iov = kmem_alloc(iovsz, KM_SLEEP);
 	} else
 		iov = aiov;
 
@@ -253,7 +247,7 @@
 	error = do_sys_sendmsg(l, SCARG(uap, s), &msg, SCARG(uap, flags), retval);
 done:
 	if (iov != aiov)
-		free(iov, M_IOV);
+		kmem_free(iov, iovsz);
 	return (error);
 }
 

Index: src/sys/compat/netbsd32/netbsd32_sysctl.c
diff -u src/sys/compat/netbsd32/netbsd32_sysctl.c:1.30 src/sys/compat/netbsd32/netbsd32_sysctl.c:1.31
--- src/sys/compat/netbsd32/netbsd32_sysctl.c:1.30	Sun Jan 11 02:45:49 2009
+++ src/sys/compat/netbsd32/netbsd32_sysctl.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_sysctl.c,v 1.30 2009/01/11 02:45:49 christos Exp $	*/
+/*	$NetBSD: netbsd32_sysctl.c,v 1.31 2010/04/23 15:19:20 rmind Exp $	*/
 
 /*
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_sysctl.c,v 1.30 2009/01/11 02:45:49 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_sysctl.c,v 1.31 2010/04/23 15:19:20 rmind Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ddb.h"
@@ -41,7 +41,6 @@
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
 #include <sys/mount.h>
 #include <sys/stat.h>
 #include <sys/time.h>

Index: src/sys/compat/osf1/osf1_cvt.c
diff -u src/sys/compat/osf1/osf1_cvt.c:1.26 src/sys/compat/osf1/osf1_cvt.c:1.27
--- src/sys/compat/osf1/osf1_cvt.c:1.26	Sat Mar 14 21:04:18 2009
+++ src/sys/compat/osf1/osf1_cvt.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: osf1_cvt.c,v 1.26 2009/03/14 21:04:18 dsl Exp $ */
+/* $NetBSD: osf1_cvt.c,v 1.27 2010/04/23 15:19:20 rmind Exp $ */
 
 /*
  * Copyright (c) 1999 Christopher G. Demetriou.  All rights reserved.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: osf1_cvt.c,v 1.26 2009/03/14 21:04:18 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: osf1_cvt.c,v 1.27 2010/04/23 15:19:20 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -68,7 +68,6 @@
 #include <sys/stat.h>
 #include <sys/filedesc.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
 #include <sys/mman.h>
 #include <sys/mount.h>
 #include <sys/signal.h>

Index: src/sys/compat/osf1/osf1_descrip.c
diff -u src/sys/compat/osf1/osf1_descrip.c:1.28 src/sys/compat/osf1/osf1_descrip.c:1.29
--- src/sys/compat/osf1/osf1_descrip.c:1.28	Mon May 18 12:39:02 2009
+++ src/sys/compat/osf1/osf1_descrip.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: osf1_descrip.c,v 1.28 2009/05/18 12:39:02 njoly Exp $ */
+/* $NetBSD: osf1_descrip.c,v 1.29 2010/04/23 15:19:20 rmind Exp $ */
 
 /*
  * Copyright (c) 1999 Christopher G. Demetriou.  All rights reserved.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: osf1_descrip.c,v 1.28 2009/05/18 12:39:02 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: osf1_descrip.c,v 1.29 2010/04/23 15:19:20 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -68,7 +68,6 @@
 #include <sys/stat.h>
 #include <sys/filedesc.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
 #include <sys/mman.h>
 #include <sys/mount.h>
 #include <sys/signal.h>

Index: src/sys/compat/osf1/osf1_file.c
diff -u src/sys/compat/osf1/osf1_file.c:1.38 src/sys/compat/osf1/osf1_file.c:1.39
--- src/sys/compat/osf1/osf1_file.c:1.38	Wed Mar  3 08:20:38 2010
+++ src/sys/compat/osf1/osf1_file.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: osf1_file.c,v 1.38 2010/03/03 08:20:38 he Exp $ */
+/* $NetBSD: osf1_file.c,v 1.39 2010/04/23 15:19:20 rmind Exp $ */
 
 /*
  * Copyright (c) 1999 Christopher G. Demetriou.  All rights reserved.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: osf1_file.c,v 1.38 2010/03/03 08:20:38 he Exp $");
+__KERNEL_RCSID(0, "$NetBSD: osf1_file.c,v 1.39 2010/04/23 15:19:20 rmind Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_syscall_debug.h"
@@ -162,7 +162,7 @@
 	}
 
 	buflen = min(MAXBSIZE, SCARG(uap, nbytes));
-	buf = malloc(buflen, M_TEMP, M_WAITOK);
+	buf = kmem_alloc(buflen, KM_SLEEP);
 	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
 	off = off1 = fp->f_offset;
 again:
@@ -175,7 +175,7 @@
 	auio.uio_offset = off;
 	UIO_SETUP_SYSSPACE(&auio);
 	/*
-	 * First we read into the malloc'ed buffer, then
+	 * First we read into the allocated buffer, then
 	 * we massage it into user space, one record at a time.
 	 */
 	error = VOP_READDIR(vp, &auio, fp->f_cred, &eofflag, &cookiebuf,
@@ -246,7 +246,7 @@
 	VOP_UNLOCK(vp, 0);
 	if (cookiebuf)
 		free(cookiebuf, M_TEMP);
-	free(buf, M_TEMP);
+	kmem_free(buf, buflen);
 	if (SCARG(uap, basep) != NULL)
 		error = copyout(&off1, SCARG(uap, basep), sizeof(long));
 out1:

Index: src/sys/compat/osf1/osf1_generic.c
diff -u src/sys/compat/osf1/osf1_generic.c:1.16 src/sys/compat/osf1/osf1_generic.c:1.17
--- src/sys/compat/osf1/osf1_generic.c:1.16	Wed Nov 11 09:48:51 2009
+++ src/sys/compat/osf1/osf1_generic.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: osf1_generic.c,v 1.16 2009/11/11 09:48:51 rmind Exp $ */
+/* $NetBSD: osf1_generic.c,v 1.17 2010/04/23 15:19:20 rmind Exp $ */
 
 /*
  * Copyright (c) 1999 Christopher G. Demetriou.  All rights reserved.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: osf1_generic.c,v 1.16 2009/11/11 09:48:51 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: osf1_generic.c,v 1.17 2010/04/23 15:19:20 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -66,7 +66,6 @@
 #include <sys/proc.h>
 #include <sys/file.h>
 #include <sys/stat.h>
-#include <sys/malloc.h>
 #include <sys/mman.h>
 #include <sys/mount.h>
 #include <sys/select.h>
@@ -82,10 +81,7 @@
  * the other word of our iov_len is zero!
  */
 
-#if __GNUC_PREREQ__(3, 0)
-__attribute ((noinline))
-#endif  
-static int
+static int __noinline
 osf1_get_iov(struct osf1_iovec *uiov, unsigned int iovcnt, struct iovec **iovp)
 {
 	struct iovec *iov = *iovp;
@@ -96,7 +92,7 @@
 		return EINVAL;
 
 	if (iovcnt > UIO_SMALLIOV) {
-		iov = malloc(iovcnt * sizeof *iov, M_IOV, M_WAITOK);
+		iov = kmem_alloc(iovcnt * sizeof(*iov), KM_SLEEP);
 		*iovp = iov;
 		/* Caller must free - even if we return an error */
 	}
@@ -133,7 +129,7 @@
 	}
 
 	if (niov != aiov)
-		free(niov, M_IOV);
+		kmem_free(niov, SCARG(uap, iovcnt) * sizeof(*niov));
 
 	return error;
 }
@@ -153,7 +149,7 @@
 	}
 
 	if (niov != aiov)
-		free(niov, M_IOV);
+		kmem_free(niov, SCARG(uap, iovcnt) * sizeof(*niov));
 
 	return error;
 }

Index: src/sys/compat/osf1/osf1_misc.c
diff -u src/sys/compat/osf1/osf1_misc.c:1.84 src/sys/compat/osf1/osf1_misc.c:1.85
--- src/sys/compat/osf1/osf1_misc.c:1.84	Mon Nov 23 00:46:07 2009
+++ src/sys/compat/osf1/osf1_misc.c	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: osf1_misc.c,v 1.84 2009/11/23 00:46:07 rmind Exp $ */
+/* $NetBSD: osf1_misc.c,v 1.85 2010/04/23 15:19:20 rmind Exp $ */
 
 /*
  * Copyright (c) 1999 Christopher G. Demetriou.  All rights reserved.
@@ -58,7 +58,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: osf1_misc.c,v 1.84 2009/11/23 00:46:07 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: osf1_misc.c,v 1.85 2010/04/23 15:19:20 rmind Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_syscall_debug.h"
@@ -72,7 +72,6 @@
 #include <sys/stat.h>
 #include <sys/filedesc.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
 #include <sys/mman.h>
 #include <sys/mount.h>
 #include <sys/signal.h>

Index: src/sys/compat/osf1/osf1_signal.c
diff -u src/sys/compat/osf1/osf1_signal.c:1.35 src/sys/compat/osf1/osf1_signal.c:1.36
--- src/sys/compat/osf1/osf1_signal.c:1.35	Thu Apr 24 18:39:23 2008
+++ src/sys/compat/osf1/osf1_signal.c	Fri Apr 23 15:19:21 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: osf1_signal.c,v 1.35 2008/04/24 18:39:23 ad Exp $	*/
+/*	$NetBSD: osf1_signal.c,v 1.36 2010/04/23 15:19:21 rmind Exp $	*/
 
 /*
  * Copyright (c) 1999 Christopher G. Demetriou.  All rights reserved.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: osf1_signal.c,v 1.35 2008/04/24 18:39:23 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: osf1_signal.c,v 1.36 2010/04/23 15:19:21 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -43,7 +43,6 @@
 #include <sys/kernel.h>
 #include <sys/signal.h>
 #include <sys/signalvar.h>
-#include <sys/malloc.h>
 
 #include <sys/syscallargs.h>
 

Index: src/sys/compat/osf1/osf1_socket.c
diff -u src/sys/compat/osf1/osf1_socket.c:1.19 src/sys/compat/osf1/osf1_socket.c:1.20
--- src/sys/compat/osf1/osf1_socket.c:1.19	Thu Dec 20 23:03:03 2007
+++ src/sys/compat/osf1/osf1_socket.c	Fri Apr 23 15:19:21 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: osf1_socket.c,v 1.19 2007/12/20 23:03:03 dsl Exp $ */
+/* $NetBSD: osf1_socket.c,v 1.20 2010/04/23 15:19:21 rmind Exp $ */
 
 /*
  * Copyright (c) 1999 Christopher G. Demetriou.  All rights reserved.
@@ -58,14 +58,13 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: osf1_socket.c,v 1.19 2007/12/20 23:03:03 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: osf1_socket.c,v 1.20 2010/04/23 15:19:21 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/namei.h>
 #include <sys/proc.h>
 #include <sys/file.h>
-#include <sys/malloc.h>
 #include <sys/mount.h>
 #include <sys/syscallargs.h>
 #include <sys/socket.h>
@@ -114,30 +113,26 @@
 	flags = emul_flags_translate(osf1_sendrecv_msg_flags_xtab,
 	    SCARG(uap, flags), &leftovers);
 	if (leftovers != 0)
-{
-printf("sendmsg flags leftover: 0x%lx\n", leftovers);
 		return (EINVAL);
-}
 
 	iov_len = bsd_msghdr.msg_iovlen;
 	if (iov_len > IOV_MAX)
 		return EMSGSIZE;
-	bsd_iovec = malloc(iov_len * sizeof (struct iovec), M_IOV, M_WAITOK);
+	bsd_iovec = kmem_alloc(iov_len * sizeof(struct iovec), KM_SLEEP);
 	bsd_msghdr.msg_iov = bsd_iovec;
 
 	osf_iovec_ptr = osf_msghdr.msg_iov;
 	for (i = 0; i < iov_len; i++) {
 		error = copyin(&osf_iovec_ptr[i], &osf_iovec, sizeof osf_iovec);
-		if (error != 0) {
-			free(bsd_iovec, M_TEMP);
-			return (error);
-		}
+		if (error != 0)
+			goto err;
                 bsd_iovec[i].iov_base = osf_iovec.iov_base;
                 bsd_iovec[i].iov_len = osf_iovec.iov_len;
 	}
 
 	error = do_sys_sendmsg(l, SCARG(uap, s), &bsd_msghdr, flags, retval);
-	free(bsd_iovec, M_TEMP);
+err:
+	kmem_free(bsd_iovec, iov_len * sizeof(struct iovec));
 	return error;
 }
 

Index: src/sys/kern/uipc_syscalls.c
diff -u src/sys/kern/uipc_syscalls.c:1.140 src/sys/kern/uipc_syscalls.c:1.141
--- src/sys/kern/uipc_syscalls.c:1.140	Thu Jan 21 04:40:22 2010
+++ src/sys/kern/uipc_syscalls.c	Fri Apr 23 15:19:19 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: uipc_syscalls.c,v 1.140 2010/01/21 04:40:22 pgoyette Exp $	*/
+/*	$NetBSD: uipc_syscalls.c,v 1.141 2010/04/23 15:19:19 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls.c,v 1.140 2010/01/21 04:40:22 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_syscalls.c,v 1.141 2010/04/23 15:19:19 rmind Exp $");
 
 #include "opt_pipe.h"
 
@@ -463,26 +463,19 @@
 do_sys_sendmsg(struct lwp *l, int s, struct msghdr *mp, int flags,
 		register_t *retsize)
 {
-	struct uio	auio;
-	int		i, len, error, iovlen;
+	struct iovec	aiov[UIO_SMALLIOV], *iov = aiov, *tiov, *ktriov = NULL;
 	struct mbuf	*to, *control;
 	struct socket	*so;
-	struct iovec	*tiov;
-	struct iovec	aiov[UIO_SMALLIOV], *iov = aiov;
-	struct iovec	*ktriov = NULL;
+	struct uio	auio;
+	size_t		len, iovsz;
+	int		i, error;
 
 	ktrkuser("msghdr", mp, sizeof *mp);
 
-	/* If the caller passed us stuff in mbufs, we must free them */
-	if (mp->msg_flags & MSG_NAMEMBUF)
-		to = mp->msg_name;
-	else
-		to = NULL;
-
-	if (mp->msg_flags & MSG_CONTROLMBUF)
-		control = mp->msg_control;
-	else
-		control = NULL;
+	/* If the caller passed us stuff in mbufs, we must free them. */
+	to = (mp->msg_flags & MSG_NAMEMBUF) ? mp->msg_name : NULL;
+	control = (mp->msg_flags & MSG_CONTROLMBUF) ? mp->msg_control : NULL;
+	iovsz = mp->msg_iovlen * sizeof(struct iovec);
 
 	if (mp->msg_flags & MSG_IOVUSRSPACE) {
 		if ((unsigned int)mp->msg_iovlen > UIO_SMALLIOV) {
@@ -490,12 +483,10 @@
 				error = EMSGSIZE;
 				goto bad;
 			}
-			iov = malloc(sizeof(struct iovec) * mp->msg_iovlen,
-			    M_IOV, M_WAITOK);
+			iov = kmem_alloc(iovsz, KM_SLEEP);
 		}
 		if (mp->msg_iovlen != 0) {
-			error = copyin(mp->msg_iov, iov,
-			    (size_t)(mp->msg_iovlen * sizeof(struct iovec)));
+			error = copyin(mp->msg_iov, iov, iovsz);
 			if (error)
 				goto bad;
 		}
@@ -511,13 +502,6 @@
 	auio.uio_vmspace = l->l_proc->p_vmspace;
 
 	for (i = 0, tiov = mp->msg_iov; i < mp->msg_iovlen; i++, tiov++) {
-#if 0
-		/* cannot happen; iov_len is unsigned */
-		if (tiov->iov_len < 0) {
-			error = EINVAL;
-			goto bad;
-		}
-#endif
 		/*
 		 * Writes return ssize_t because -1 is returned on error.
 		 * Therefore, we must restrict the length to SSIZE_MAX to
@@ -551,9 +535,8 @@
 	}
 
 	if (ktrpoint(KTR_GENIO)) {
-		iovlen = auio.uio_iovcnt * sizeof(struct iovec);
-		ktriov = malloc(iovlen, M_TEMP, M_WAITOK);
-		memcpy(ktriov, auio.uio_iov, iovlen);
+		ktriov = kmem_alloc(iovsz, KM_SLEEP);
+		memcpy(ktriov, auio.uio_iov, iovsz);
 	}
 
 	if ((error = fd_getsock(s, &so)) != 0)
@@ -587,11 +570,11 @@
 bad:
 	if (ktriov != NULL) {
 		ktrgeniov(s, UIO_WRITE, ktriov, *retsize, error);
-		free(ktriov, M_TEMP);
+		kmem_free(ktriov, iovsz);
 	}
 
  	if (iov != aiov)
-		free(iov, M_IOV);
+ 		kmem_free(iov, iovsz);
 	if (to)
 		m_freem(to);
 	if (control)
@@ -771,12 +754,11 @@
 do_sys_recvmsg(struct lwp *l, int s, struct msghdr *mp, struct mbuf **from,
     struct mbuf **control, register_t *retsize)
 {
-	struct uio	auio;
-	struct iovec	aiov[UIO_SMALLIOV], *iov = aiov;
-	struct iovec	*tiov;
-	int		i, len, error, iovlen;
+	struct iovec	aiov[UIO_SMALLIOV], *iov = aiov, *tiov, *ktriov;
 	struct socket	*so;
-	struct iovec	*ktriov;
+	struct uio	auio;
+	size_t		len, iovsz;
+	int		i, error;
 
 	ktrkuser("msghdr", mp, sizeof *mp);
 
@@ -787,18 +769,18 @@
 	if ((error = fd_getsock(s, &so)) != 0)
 		return (error);
 
+	iovsz = mp->msg_iovlen * sizeof(struct iovec);
+
 	if (mp->msg_flags & MSG_IOVUSRSPACE) {
 		if ((unsigned int)mp->msg_iovlen > UIO_SMALLIOV) {
 			if ((unsigned int)mp->msg_iovlen > IOV_MAX) {
 				error = EMSGSIZE;
 				goto out;
 			}
-			iov = malloc(sizeof(struct iovec) * mp->msg_iovlen,
-			    M_IOV, M_WAITOK);
+			iov = kmem_alloc(iovsz, KM_SLEEP);
 		}
 		if (mp->msg_iovlen != 0) {
-			error = copyin(mp->msg_iov, iov,
-			    (size_t)(mp->msg_iovlen * sizeof(struct iovec)));
+			error = copyin(mp->msg_iov, iov, iovsz);
 			if (error)
 				goto out;
 		}
@@ -814,13 +796,6 @@
 
 	tiov = auio.uio_iov;
 	for (i = 0; i < mp->msg_iovlen; i++, tiov++) {
-#if 0
-		/* cannot happen iov_len is unsigned */
-		if (tiov->iov_len < 0) {
-			error = EINVAL;
-			goto out;
-		}
-#endif
 		/*
 		 * Reads return ssize_t because -1 is returned on error.
 		 * Therefore we must restrict the length to SSIZE_MAX to
@@ -835,9 +810,8 @@
 
 	ktriov = NULL;
 	if (ktrpoint(KTR_GENIO)) {
-		iovlen = auio.uio_iovcnt * sizeof(struct iovec);
-		ktriov = malloc(iovlen, M_TEMP, M_WAITOK);
-		memcpy(ktriov, auio.uio_iov, iovlen);
+		ktriov = kmem_alloc(iovsz, KM_SLEEP);
+		memcpy(ktriov, auio.uio_iov, iovsz);
 	}
 
 	len = auio.uio_resid;
@@ -853,7 +827,7 @@
 
 	if (ktriov != NULL) {
 		ktrgeniov(s, UIO_READ, ktriov, len, error);
-		free(ktriov, M_TEMP);
+		kmem_free(ktriov, iovsz);
 	}
 
 	if (error != 0) {
@@ -866,7 +840,7 @@
 	}
  out:
 	if (iov != aiov)
-		free(iov, M_TEMP);
+		kmem_free(iov, iovsz);
 	fd_putfile(s);
 	return (error);
 }

Index: src/sys/sys/uio.h
diff -u src/sys/sys/uio.h:1.34 src/sys/sys/uio.h:1.35
--- src/sys/sys/uio.h:1.34	Wed Mar  1 12:38:32 2006
+++ src/sys/sys/uio.h	Fri Apr 23 15:19:20 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: uio.h,v 1.34 2006/03/01 12:38:32 yamt Exp $	*/
+/*	$NetBSD: uio.h,v 1.35 2010/04/23 15:19:20 rmind Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1993, 1994
@@ -96,11 +96,9 @@
 #endif /* _NETBSD_SOURCE */
 
 #ifdef _KERNEL
-#include <sys/mallocvar.h>
 
-MALLOC_DECLARE(M_IOV);
-
-#define UIO_SMALLIOV	8		/* 8 on stack, else malloc */
+/* 8 on stack, more will be dynamically allocated. */
+#define UIO_SMALLIOV	8
 
 void uio_setup_sysspace(struct uio *);
 #endif

Reply via email to