Module Name:    src
Committed By:   martin
Date:           Tue Jan 21 19:19:17 UTC 2020

Modified Files:
        src/sys/compat/common [netbsd-7]: kern_sig_43.c
        src/sys/compat/linux/arch/amd64 [netbsd-7]: linux_machdep.c
        src/sys/compat/linux/common [netbsd-7]: linux_fcntl.h linux_file64.c
            linux_ipc.c linux_misc.c linux_signal.c linux_socket.c
            linux_socket.h linux_statfs.h linux_termios.c linux_termios.h
        src/sys/compat/linux32/common [netbsd-7]: linux32_dirent.c
            linux32_ioctl.c linux32_misc.c linux32_signal.c linux32_sysinfo.c
            linux32_termios.c linux32_utsname.c
        src/sys/compat/netbsd32 [netbsd-7]: netbsd32_compat_20.c
            netbsd32_compat_43.c netbsd32_compat_50.c
        src/sys/compat/ossaudio [netbsd-7]: ossaudio.c
        src/sys/kern [netbsd-7]: sysv_shm.c
        src/sys/miscfs/procfs [netbsd-7]: procfs_linux.c
        src/sys/sys [netbsd-7]: shm.h

Log Message:
Pull up the following, requested by christos in ticket #1720:

        sys/compat/common/kern_sig_43.c                         1.36
        sys/compat/linux/arch/amd64/linux_machdep.c             1.59
        sys/compat/linux/common/linux_fcntl.h                   1.18
        sys/compat/linux/common/linux_file64.c                  1.62
        sys/compat/linux/common/linux_ipc.c                     1.57
        sys/compat/linux/common/linux_misc.c                    1.243
        sys/compat/linux/common/linux_signal.c                  1.81
        sys/compat/linux/common/linux_socket.c                  1.149 (patch)
        sys/compat/linux/common/linux_socket.h                  1.24
        sys/compat/linux/common/linux_statfs.h                  1.7
        sys/compat/linux/common/linux_termios.c                 1.38
        sys/compat/linux/common/linux_termios.h                 1.22
        sys/compat/linux32/common/linux32_dirent.c              1.20
        sys/compat/linux32/common/linux32_ioctl.c               1.14
        sys/compat/linux32/common/linux32_misc.c                1.27
        sys/compat/linux32/common/linux32_signal.c              1.20
        sys/compat/linux32/common/linux32_sysinfo.c             1.8
        sys/compat/linux32/common/linux32_termios.c             1.15
        sys/compat/linux32/common/linux32_utsname.c             1.10
        sys/compat/netbsd32/netbsd32_compat_20.c                1.39
        sys/compat/netbsd32/netbsd32_compat_43.c                1.59
        sys/compat/netbsd32/netbsd32_compat_50.c                1.44
        sys/compat/ossaudio/ossaudio.c                          1.75
        sys/kern/sysv_shm.c                                     1.138
        sys/miscfs/procfs/procfs_linux.c                        1.75 (patch)
        sys/sys/shm.h                                           1.54 (patch)

Fix various info leaks, out of bound access, usage of uninitialized
values and direct access to userland variables from kernel space
and memory leaks in system calls implemented for the compatibility
subsystems.


To generate a diff of this commit:
cvs rdiff -u -r1.34 -r1.34.32.1 src/sys/compat/common/kern_sig_43.c
cvs rdiff -u -r1.48.4.1 -r1.48.4.2 \
    src/sys/compat/linux/arch/amd64/linux_machdep.c
cvs rdiff -u -r1.16 -r1.16.2.1 src/sys/compat/linux/common/linux_fcntl.h
cvs rdiff -u -r1.55.4.1 -r1.55.4.2 src/sys/compat/linux/common/linux_file64.c
cvs rdiff -u -r1.55.30.1 -r1.55.30.2 src/sys/compat/linux/common/linux_ipc.c
cvs rdiff -u -r1.229.2.2 -r1.229.2.3 src/sys/compat/linux/common/linux_misc.c
cvs rdiff -u -r1.75.26.1 -r1.75.26.2 \
    src/sys/compat/linux/common/linux_signal.c
cvs rdiff -u -r1.119.2.2 -r1.119.2.3 \
    src/sys/compat/linux/common/linux_socket.c
cvs rdiff -u -r1.22 -r1.22.4.1 src/sys/compat/linux/common/linux_socket.h
cvs rdiff -u -r1.6 -r1.6.12.1 src/sys/compat/linux/common/linux_statfs.h
cvs rdiff -u -r1.37 -r1.37.4.1 src/sys/compat/linux/common/linux_termios.c
cvs rdiff -u -r1.21 -r1.21.28.1 src/sys/compat/linux/common/linux_termios.h
cvs rdiff -u -r1.13.28.1 -r1.13.28.2 \
    src/sys/compat/linux32/common/linux32_dirent.c
cvs rdiff -u -r1.13 -r1.13.38.1 src/sys/compat/linux32/common/linux32_ioctl.c
cvs rdiff -u -r1.23.4.1 -r1.23.4.2 \
    src/sys/compat/linux32/common/linux32_misc.c
cvs rdiff -u -r1.17 -r1.17.4.1 src/sys/compat/linux32/common/linux32_signal.c
cvs rdiff -u -r1.7 -r1.7.42.1 src/sys/compat/linux32/common/linux32_sysinfo.c
cvs rdiff -u -r1.14 -r1.14.42.1 \
    src/sys/compat/linux32/common/linux32_termios.c
cvs rdiff -u -r1.9 -r1.9.42.1 src/sys/compat/linux32/common/linux32_utsname.c
cvs rdiff -u -r1.33 -r1.33.4.1 src/sys/compat/netbsd32/netbsd32_compat_20.c
cvs rdiff -u -r1.53 -r1.53.34.1 src/sys/compat/netbsd32/netbsd32_compat_43.c
cvs rdiff -u -r1.24.2.1 -r1.24.2.2 \
    src/sys/compat/netbsd32/netbsd32_compat_50.c
cvs rdiff -u -r1.68 -r1.68.4.1 src/sys/compat/ossaudio/ossaudio.c
cvs rdiff -u -r1.125.2.1 -r1.125.2.2 src/sys/kern/sysv_shm.c
cvs rdiff -u -r1.70 -r1.70.2.1 src/sys/miscfs/procfs/procfs_linux.c
cvs rdiff -u -r1.48 -r1.48.40.1 src/sys/sys/shm.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/common/kern_sig_43.c
diff -u src/sys/compat/common/kern_sig_43.c:1.34 src/sys/compat/common/kern_sig_43.c:1.34.32.1
--- src/sys/compat/common/kern_sig_43.c:1.34	Wed Jan 19 10:21:16 2011
+++ src/sys/compat/common/kern_sig_43.c	Tue Jan 21 19:19:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_sig_43.c,v 1.34 2011/01/19 10:21:16 tsutsui Exp $	*/
+/*	$NetBSD: kern_sig_43.c,v 1.34.32.1 2020/01/21 19:19:16 martin Exp $	*/
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_sig_43.c,v 1.34 2011/01/19 10:21:16 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_sig_43.c,v 1.34.32.1 2020/01/21 19:19:16 martin Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -115,6 +115,7 @@ compat_43_sigstack_to_sigaltstack(const 
 void
 compat_43_sigaltstack_to_sigstack(const struct sigaltstack *sa, struct sigstack *ss)
 {
+	memset(ss, 0, sizeof(*ss));
 	ss->ss_sp = sa->ss_sp;
 	if (sa->ss_flags & SS_ONSTACK)
 		ss->ss_onstack = 1;

Index: src/sys/compat/linux/arch/amd64/linux_machdep.c
diff -u src/sys/compat/linux/arch/amd64/linux_machdep.c:1.48.4.1 src/sys/compat/linux/arch/amd64/linux_machdep.c:1.48.4.2
--- src/sys/compat/linux/arch/amd64/linux_machdep.c:1.48.4.1	Tue Feb 14 16:54:24 2017
+++ src/sys/compat/linux/arch/amd64/linux_machdep.c	Tue Jan 21 19:19:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_machdep.c,v 1.48.4.1 2017/02/14 16:54:24 snj Exp $ */
+/*	$NetBSD: linux_machdep.c,v 1.48.4.2 2020/01/21 19:19:16 martin Exp $ */
 
 /*-
  * Copyright (c) 2005 Emmanuel Dreyfus, all rights reserved.
@@ -33,7 +33,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.48.4.1 2017/02/14 16:54:24 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.48.4.2 2020/01/21 19:19:16 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -254,7 +254,6 @@ linux_sendsig(const ksiginfo_t *ksi, con
 int
 linux_sys_modify_ldt(struct lwp *l, const struct linux_sys_modify_ldt_args *v, register_t *retval)
 {
-	printf("linux_sys_modify_ldt\n");
 	return 0;
 }
 

Index: src/sys/compat/linux/common/linux_fcntl.h
diff -u src/sys/compat/linux/common/linux_fcntl.h:1.16 src/sys/compat/linux/common/linux_fcntl.h:1.16.2.1
--- src/sys/compat/linux/common/linux_fcntl.h:1.16	Sun Jun  1 13:42:12 2014
+++ src/sys/compat/linux/common/linux_fcntl.h	Tue Jan 21 19:19:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_fcntl.h,v 1.16 2014/06/01 13:42:12 njoly Exp $	*/
+/*	$NetBSD: linux_fcntl.h,v 1.16.2.1 2020/01/21 19:19:16 martin Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998 The NetBSD Foundation, Inc.
@@ -122,6 +122,9 @@ LINUX##_to_bsd_##FLOCK(struct flock *bfp
 	case src_f##_WRLCK: \
 		dst->l_type = dst_f##_WRLCK; \
 		break; \
+	default: \
+		dst->l_type = -1; \
+		break; \
 	} \
     }
 

Index: src/sys/compat/linux/common/linux_file64.c
diff -u src/sys/compat/linux/common/linux_file64.c:1.55.4.1 src/sys/compat/linux/common/linux_file64.c:1.55.4.2
--- src/sys/compat/linux/common/linux_file64.c:1.55.4.1	Sat Aug 12 04:18:10 2017
+++ src/sys/compat/linux/common/linux_file64.c	Tue Jan 21 19:19:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_file64.c,v 1.55.4.1 2017/08/12 04:18:10 snj Exp $	*/
+/*	$NetBSD: linux_file64.c,v 1.55.4.2 2020/01/21 19:19:16 martin Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998, 2000, 2008 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_file64.c,v 1.55.4.1 2017/08/12 04:18:10 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_file64.c,v 1.55.4.2 2020/01/21 19:19:16 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -80,6 +80,7 @@ static void bsd_to_linux_stat(struct sta
 static void
 bsd_to_linux_stat(struct stat *bsp, struct linux_stat64 *lsp)
 {
+	memset(lsp, 0, sizeof(*lsp));
 	lsp->lst_dev     = linux_fakedev(bsp->st_dev, 0);
 	lsp->lst_ino     = bsp->st_ino;
 	lsp->lst_mode    = (linux_mode_t)bsp->st_mode;
@@ -352,6 +353,7 @@ again:
 		 * we have to worry about touching user memory outside of
 		 * the copyout() call).
 		 */
+		memset(&idb, 0, sizeof(idb));
 		idb.d_ino = bdp->d_fileno;
 		idb.d_type = bdp->d_type;
 		idb.d_off = off;

Index: src/sys/compat/linux/common/linux_ipc.c
diff -u src/sys/compat/linux/common/linux_ipc.c:1.55.30.1 src/sys/compat/linux/common/linux_ipc.c:1.55.30.2
--- src/sys/compat/linux/common/linux_ipc.c:1.55.30.1	Sat Feb 23 07:02:20 2019
+++ src/sys/compat/linux/common/linux_ipc.c	Tue Jan 21 19:19:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_ipc.c,v 1.55.30.1 2019/02/23 07:02:20 martin Exp $	*/
+/*	$NetBSD: linux_ipc.c,v 1.55.30.2 2020/01/21 19:19:16 martin Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_ipc.c,v 1.55.30.1 2019/02/23 07:02:20 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_ipc.c,v 1.55.30.2 2020/01/21 19:19:16 martin Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_sysv.h"
@@ -568,6 +568,7 @@ linux_sys_shmctl(struct lwp *l, const st
 		syscallarg(struct linux_shmid_ds *) buf;
 	} */
 	struct shmid_ds bs;
+	struct ipc_perm perm;
 	struct linux_shmid_ds ls;
 	struct linux_shmid64_ds ls64;
 	struct linux_shminfo64 lsi64;
@@ -582,7 +583,10 @@ linux_sys_shmctl(struct lwp *l, const st
 
 	switch (cmd & ~LINUX_IPC_64) {
 	case LINUX_SHM_STAT:
-		shmid = IXSEQ_TO_IPCID(shmid, shmsegs[shmid].shm_perm);
+		error = shm_find_segment_perm_by_index(shmid, &perm);
+		if (error)
+			return error;
+		shmid = IXSEQ_TO_IPCID(shmid, perm);
 		retval[0] = shmid;
 		/*FALLTHROUGH*/
 

Index: src/sys/compat/linux/common/linux_misc.c
diff -u src/sys/compat/linux/common/linux_misc.c:1.229.2.2 src/sys/compat/linux/common/linux_misc.c:1.229.2.3
--- src/sys/compat/linux/common/linux_misc.c:1.229.2.2	Sat Aug 12 04:18:10 2017
+++ src/sys/compat/linux/common/linux_misc.c	Tue Jan 21 19:19:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_misc.c,v 1.229.2.2 2017/08/12 04:18:10 snj Exp $	*/
+/*	$NetBSD: linux_misc.c,v 1.229.2.3 2020/01/21 19:19:16 martin Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998, 1999, 2008 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.229.2.2 2017/08/12 04:18:10 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.229.2.3 2020/01/21 19:19:16 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -349,6 +349,7 @@ linux_sys_uname(struct lwp *l, const str
 	} */
 	struct linux_utsname luts;
 
+	memset(&luts, 0, sizeof(luts));
 	strlcpy(luts.l_sysname, linux_sysname, sizeof(luts.l_sysname));
 	strlcpy(luts.l_nodename, hostname, sizeof(luts.l_nodename));
 	strlcpy(luts.l_release, linux_release, sizeof(luts.l_release));
@@ -768,6 +769,7 @@ again:
 		 * we have to worry about touching user memory outside of
 		 * the copyout() call).
 		 */
+		memset(&idb, 0, sizeof(idb));
 		idb.d_ino = bdp->d_fileno;
 		/*
 		 * The old readdir() call misuses the offset and reclen fields.
@@ -1341,6 +1343,7 @@ linux_sys_sysinfo(struct lwp *l, const s
 	struct linux_sysinfo si;
 	struct loadavg *la;
 
+	memset(&si, 0, sizeof(si));
 	si.uptime = time_uptime;
 	la = &averunnable;
 	si.loads[0] = la->ldavg[0] * LINUX_SYSINFO_LOADS_SCALE / la->fscale;

Index: src/sys/compat/linux/common/linux_signal.c
diff -u src/sys/compat/linux/common/linux_signal.c:1.75.26.1 src/sys/compat/linux/common/linux_signal.c:1.75.26.2
--- src/sys/compat/linux/common/linux_signal.c:1.75.26.1	Sat Jan 17 12:10:54 2015
+++ src/sys/compat/linux/common/linux_signal.c	Tue Jan 21 19:19:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_signal.c,v 1.75.26.1 2015/01/17 12:10:54 martin Exp $	*/
+/*	$NetBSD: linux_signal.c,v 1.75.26.2 2020/01/21 19:19:16 martin Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998 The NetBSD Foundation, Inc.
@@ -48,7 +48,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_signal.c,v 1.75.26.1 2015/01/17 12:10:54 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_signal.c,v 1.75.26.2 2020/01/21 19:19:16 martin Exp $");
 
 #define COMPAT_LINUX 1
 
@@ -674,6 +674,7 @@ linux_to_native_sigaltstack(struct sigal
 void
 native_to_linux_sigaltstack(struct linux_sigaltstack *lss, const struct sigaltstack *bss)
 {
+	memset(lss, 0, sizeof(*lss));
 	lss->ss_sp = bss->ss_sp;
 	lss->ss_size = bss->ss_size;
 	if (bss->ss_flags & SS_ONSTACK)

Index: src/sys/compat/linux/common/linux_socket.c
diff -u src/sys/compat/linux/common/linux_socket.c:1.119.2.2 src/sys/compat/linux/common/linux_socket.c:1.119.2.3
--- src/sys/compat/linux/common/linux_socket.c:1.119.2.2	Fri Apr 19 16:01:34 2019
+++ src/sys/compat/linux/common/linux_socket.c	Tue Jan 21 19:19:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_socket.c,v 1.119.2.2 2019/04/19 16:01:34 martin Exp $	*/
+/*	$NetBSD: linux_socket.c,v 1.119.2.3 2020/01/21 19:19:16 martin Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998, 2008 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.119.2.2 2019/04/19 16:01:34 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_socket.c,v 1.119.2.3 2020/01/21 19:19:16 martin Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_inet.h"
@@ -542,6 +542,8 @@ linux_sys_sendmsg(struct lwp *l, const s
 
 				case LINUX_SCM_CREDENTIALS:
 					/* no native equivalent, just drop it */
+					if (control != mtod(ctl_mbuf, void *))
+						free(control, M_MBUF);
 					m_free(ctl_mbuf);
 					ctl_mbuf = NULL;
 					msg.msg_control = NULL;
@@ -564,14 +566,15 @@ linux_sys_sendmsg(struct lwp *l, const s
 			/* Check the buffer is big enough */
 			if (__predict_false(cidx + cspace > clen)) {
 				u_int8_t *nc;
+				size_t nclen;
 
-				clen = cidx + cspace;
-				if (clen >= PAGE_SIZE) {
+				nclen = cidx + cspace;
+				if (nclen >= PAGE_SIZE) {
 					error = EINVAL;
 					goto done;
 				}
 				nc = realloc(clen <= MLEN ? NULL : control,
-						clen, M_TEMP, M_WAITOK);
+						nclen, M_TEMP, M_WAITOK);
 				if (!nc) {
 					error = ENOMEM;
 					goto done;
@@ -580,6 +583,7 @@ linux_sys_sendmsg(struct lwp *l, const s
 					/* Old buffer was in mbuf... */
 					memcpy(nc, control, cidx);
 				control = nc;
+				clen = nclen;
 			}
 
 			/* Copy header */
@@ -601,7 +605,7 @@ linux_sys_sendmsg(struct lwp *l, const s
 
 			resid -= LINUX_CMSG_ALIGN(l_cmsg.cmsg_len);
 			cidx += cspace;
-		} while ((l_cc = LINUX_CMSG_NXTHDR(&msg, l_cc)) && resid > 0);
+		} while ((l_cc = LINUX_CMSG_NXTHDR(&msg, l_cc, &l_cmsg)) && resid > 0);
 
 		/* If we allocated a buffer, attach to mbuf */
 		if (cidx > MLEN) {

Index: src/sys/compat/linux/common/linux_socket.h
diff -u src/sys/compat/linux/common/linux_socket.h:1.22 src/sys/compat/linux/common/linux_socket.h:1.22.4.1
--- src/sys/compat/linux/common/linux_socket.h:1.22	Mon Jan 27 19:19:15 2014
+++ src/sys/compat/linux/common/linux_socket.h	Tue Jan 21 19:19:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_socket.h,v 1.22 2014/01/27 19:19:15 njoly Exp $	*/
+/*	$NetBSD: linux_socket.h,v 1.22.4.1 2020/01/21 19:19:16 martin Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998 The NetBSD Foundation, Inc.
@@ -181,13 +181,13 @@ struct linux_cmsghdr {
 /* Linux either uses this, or  &((cmsg)->__cmsg_data) */
 #define LINUX_CMSG_DATA(cmsg)	\
 	((u_char *)((struct linux_cmsghdr *)(cmsg) + 1))
-#define	LINUX_CMSG_NXTHDR(mhdr, cmsg)	\
-	((((char *)(cmsg) + LINUX_CMSG_ALIGN((cmsg)->cmsg_len) + \
-			    sizeof(*(cmsg))) > \
+#define LINUX_CMSG_NXTHDR(mhdr, ucmsg, kcmsg)	\
+	((((char *)(ucmsg) + LINUX_CMSG_ALIGN((kcmsg)->cmsg_len) + \
+			    sizeof(*(ucmsg))) > \
 	    (((char *)(mhdr)->msg_control) + (mhdr)->msg_controllen)) ? \
 	    (struct linux_cmsghdr *)NULL : \
-	    (struct linux_cmsghdr *)((char *)(cmsg) + \
-	        LINUX_CMSG_ALIGN((cmsg)->cmsg_len)))
+	    (struct linux_cmsghdr *)((char *)(ucmsg) + \
+	        LINUX_CMSG_ALIGN((kcmsg)->cmsg_len)))
 /* This the number of bytes removed from each item (excl. final padding) */
 #define LINUX_CMSG_ALIGN_DELTA	\
 	(CMSG_ALIGN(sizeof(struct cmsghdr)) - sizeof(struct linux_cmsghdr))

Index: src/sys/compat/linux/common/linux_statfs.h
diff -u src/sys/compat/linux/common/linux_statfs.h:1.6 src/sys/compat/linux/common/linux_statfs.h:1.6.12.1
--- src/sys/compat/linux/common/linux_statfs.h:1.6	Thu Sep 13 13:59:33 2012
+++ src/sys/compat/linux/common/linux_statfs.h	Tue Jan 21 19:19:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_statfs.h,v 1.6 2012/09/13 13:59:33 pooka Exp $	*/
+/*	$NetBSD: linux_statfs.h,v 1.6.12.1 2020/01/21 19:19:16 martin Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998, 1999 The NetBSD Foundation, Inc.
@@ -48,6 +48,8 @@ bsd_to_linux_statfs(const struct statvfs
 {
 	int i;
 
+	memset(lsp, 0, sizeof(*lsp));
+
 	for (i = 0; i < linux_fstypes_cnt; i++) {
 		if (strcmp(bsp->f_fstypename, linux_fstypes[i].mty_bsd) == 0) {
 			lsp->l_ftype = linux_fstypes[i].mty_linux;
@@ -82,7 +84,6 @@ bsd_to_linux_statfs(const struct statvfs
 	lsp->l_ffsid.val[0] = bsp->f_fsidx.__fsid_val[0];
 	lsp->l_ffsid.val[1] = bsp->f_fsidx.__fsid_val[1];
 	lsp->l_fnamelen = bsp->f_namemax;
-	(void)memset(lsp->l_fspare, 0, sizeof(lsp->l_fspare));
 }
 
 /*
@@ -96,6 +97,8 @@ bsd_to_linux_statfs64(const struct statv
 {
 	int i, div;
 
+	memset(lsp, 0, sizeof(*lsp));
+
 	for (i = 0; i < linux_fstypes_cnt; i++) {
 		if (strcmp(bsp->f_fstypename, linux_fstypes[i].mty_bsd) == 0) {
 			lsp->l_ftype = linux_fstypes[i].mty_linux;
@@ -121,7 +124,6 @@ bsd_to_linux_statfs64(const struct statv
 	lsp->l_ffsid.val[0] = bsp->f_fsidx.__fsid_val[0];
 	lsp->l_ffsid.val[1] = bsp->f_fsidx.__fsid_val[1];
 	lsp->l_fnamelen = bsp->f_namemax;
-	(void)memset(lsp->l_fspare, 0, sizeof(lsp->l_fspare));
 }
 
 #endif /* !_LINUX_STATFS_H */

Index: src/sys/compat/linux/common/linux_termios.c
diff -u src/sys/compat/linux/common/linux_termios.c:1.37 src/sys/compat/linux/common/linux_termios.c:1.37.4.1
--- src/sys/compat/linux/common/linux_termios.c:1.37	Fri Dec 27 16:58:50 2013
+++ src/sys/compat/linux/common/linux_termios.c	Tue Jan 21 19:19:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_termios.c,v 1.37 2013/12/27 16:58:50 njoly Exp $	*/
+/*	$NetBSD: linux_termios.c,v 1.37.4.1 2020/01/21 19:19:16 martin Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_termios.c,v 1.37 2013/12/27 16:58:50 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_termios.c,v 1.37.4.1 2020/01/21 19:19:16 martin Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ptm.h"
@@ -259,6 +259,7 @@ linux_ioctl_termios(struct lwp *l, const
 		case LINUX_TIOCLINUX_READMOUSE:
 		case LINUX_TIOCLINUX_VESABLANK:
 		case LINUX_TIOCLINUX_CURCONS:	/* could use VT_GETACTIVE */
+		default:
 			error = EINVAL;
 			goto out;
 		}

Index: src/sys/compat/linux/common/linux_termios.h
diff -u src/sys/compat/linux/common/linux_termios.h:1.21 src/sys/compat/linux/common/linux_termios.h:1.21.28.1
--- src/sys/compat/linux/common/linux_termios.h:1.21	Sun Sep 25 13:40:07 2011
+++ src/sys/compat/linux/common/linux_termios.h	Tue Jan 21 19:19:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_termios.h,v 1.21 2011/09/25 13:40:07 chs Exp $	*/
+/*	$NetBSD: linux_termios.h,v 1.21.28.1 2020/01/21 19:19:16 martin Exp $	*/
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -279,6 +279,7 @@ bsd_termios_to_linux_termio(struct termi
 {
 	int i, mask;
 
+	memset(lt, 0, sizeof(*lt));
 	lt->c_iflag = 0;
 	lt->c_iflag |= cvtto_linux_mask(bts->c_iflag, IGNBRK, LINUX_IGNBRK);
 	lt->c_iflag |= cvtto_linux_mask(bts->c_iflag, BRKINT, LINUX_BRKINT);
@@ -466,6 +467,7 @@ bsd_termios_to_linux_termios(struct term
 {
 	int i, mask;
 
+	memset(lts, 0, sizeof(*lts));
 	lts->c_iflag = 0;
 	lts->c_iflag |= cvtto_linux_mask(bts->c_iflag, IGNBRK, LINUX_IGNBRK);
 	lts->c_iflag |= cvtto_linux_mask(bts->c_iflag, BRKINT, LINUX_BRKINT);

Index: src/sys/compat/linux32/common/linux32_dirent.c
diff -u src/sys/compat/linux32/common/linux32_dirent.c:1.13.28.1 src/sys/compat/linux32/common/linux32_dirent.c:1.13.28.2
--- src/sys/compat/linux32/common/linux32_dirent.c:1.13.28.1	Sat Aug 12 04:18:10 2017
+++ src/sys/compat/linux32/common/linux32_dirent.c	Tue Jan 21 19:19:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux32_dirent.c,v 1.13.28.1 2017/08/12 04:18:10 snj Exp $ */
+/*	$NetBSD: linux32_dirent.c,v 1.13.28.2 2020/01/21 19:19:17 martin Exp $ */
 
 /*-
  * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved.
@@ -33,7 +33,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: linux32_dirent.c,v 1.13.28.1 2017/08/12 04:18:10 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux32_dirent.c,v 1.13.28.2 2020/01/21 19:19:17 martin Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -201,6 +201,7 @@ again:
 		 * we have to worry about touching user memory outside of
 		 * the copyout() call).
 		 */
+		memset(&idb, 0, sizeof(idb));
 		idb.d_ino = bdp->d_fileno;
 		/*
 		 * The old readdir() call misuses the offset and reclen fields.

Index: src/sys/compat/linux32/common/linux32_ioctl.c
diff -u src/sys/compat/linux32/common/linux32_ioctl.c:1.13 src/sys/compat/linux32/common/linux32_ioctl.c:1.13.38.1
--- src/sys/compat/linux32/common/linux32_ioctl.c:1.13	Tue Aug 18 02:02:58 2009
+++ src/sys/compat/linux32/common/linux32_ioctl.c	Tue Jan 21 19:19:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux32_ioctl.c,v 1.13 2009/08/18 02:02:58 christos Exp $ */
+/*	$NetBSD: linux32_ioctl.c,v 1.13.38.1 2020/01/21 19:19:17 martin Exp $ */
 
 /*-
  * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux32_ioctl.c,v 1.13 2009/08/18 02:02:58 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux32_ioctl.c,v 1.13.38.1 2020/01/21 19:19:17 martin Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -124,7 +124,9 @@ linux32_sys_ioctl(struct lwp *l, const s
 		error = linux32_ioctl_socket(l, uap, retval);
 		break;
 	default:
+#ifdef DEBUG_LINUX
 		printf("Not yet implemented ioctl group \'%c\'\n", group);
+#endif
 		error = EINVAL;
 		break;
 	}

Index: src/sys/compat/linux32/common/linux32_misc.c
diff -u src/sys/compat/linux32/common/linux32_misc.c:1.23.4.1 src/sys/compat/linux32/common/linux32_misc.c:1.23.4.2
--- src/sys/compat/linux32/common/linux32_misc.c:1.23.4.1	Sat Jan 17 12:10:55 2015
+++ src/sys/compat/linux32/common/linux32_misc.c	Tue Jan 21 19:19:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux32_misc.c,v 1.23.4.1 2015/01/17 12:10:55 martin Exp $	*/
+/*	$NetBSD: linux32_misc.c,v 1.23.4.2 2020/01/21 19:19:17 martin Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998, 1999 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux32_misc.c,v 1.23.4.1 2015/01/17 12:10:55 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux32_misc.c,v 1.23.4.2 2020/01/21 19:19:17 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -292,11 +292,13 @@ linux32_sys_get_robust_list(struct lwp *
     const struct linux32_sys_get_robust_list_args *uap, register_t *retval)
 {
 	/* {
+		syscallarg(linux32_pid_t) pid;
 		syscallarg(linux32_robust_list_headpp_t) head;
 		syscallarg(linux32_sizep_t) len;
 	} */
 	struct linux_sys_get_robust_list_args ua;
 
+	NETBSD32TOX_UAP(pid, int);
 	NETBSD32TOP_UAP(head, struct robust_list_head *);
 	NETBSD32TOP_UAP(len, size_t *);
 	return linux_sys_get_robust_list(l, &ua, retval);

Index: src/sys/compat/linux32/common/linux32_signal.c
diff -u src/sys/compat/linux32/common/linux32_signal.c:1.17 src/sys/compat/linux32/common/linux32_signal.c:1.17.4.1
--- src/sys/compat/linux32/common/linux32_signal.c:1.17	Mon Nov 18 01:32:52 2013
+++ src/sys/compat/linux32/common/linux32_signal.c	Tue Jan 21 19:19:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux32_signal.c,v 1.17 2013/11/18 01:32:52 chs Exp $ */
+/*	$NetBSD: linux32_signal.c,v 1.17.4.1 2020/01/21 19:19:17 martin Exp $ */
 
 /*-
  * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux32_signal.c,v 1.17 2013/11/18 01:32:52 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux32_signal.c,v 1.17.4.1 2020/01/21 19:19:17 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/ucred.h>
@@ -232,6 +232,7 @@ native_to_linux32_sigaction(struct linux
 void
 native_to_linux32_sigaltstack(struct linux32_sigaltstack *lss, const struct sigaltstack *bss)
 {
+	memset(lss, 0, sizeof(*lss));
 	NETBSD32PTR32(lss->ss_sp, bss->ss_sp);
 	lss->ss_size = bss->ss_size;
 	if (bss->ss_flags & SS_ONSTACK)

Index: src/sys/compat/linux32/common/linux32_sysinfo.c
diff -u src/sys/compat/linux32/common/linux32_sysinfo.c:1.7 src/sys/compat/linux32/common/linux32_sysinfo.c:1.7.42.1
--- src/sys/compat/linux32/common/linux32_sysinfo.c:1.7	Wed Nov 19 18:36:04 2008
+++ src/sys/compat/linux32/common/linux32_sysinfo.c	Tue Jan 21 19:19:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux32_sysinfo.c,v 1.7 2008/11/19 18:36:04 ad Exp $ */
+/*	$NetBSD: linux32_sysinfo.c,v 1.7.42.1 2020/01/21 19:19:17 martin Exp $ */
 
 /*-
  * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved.
@@ -33,7 +33,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: linux32_sysinfo.c,v 1.7 2008/11/19 18:36:04 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux32_sysinfo.c,v 1.7.42.1 2020/01/21 19:19:17 martin Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -70,6 +70,7 @@ linux32_sys_sysinfo(struct lwp *l, const
 	struct linux32_sysinfo si;
 	struct loadavg *la;
 
+	memset(&si, 0, sizeof(si));
 	si.uptime = time_uptime;
 	la = &averunnable;
 	si.loads[0] = la->ldavg[0] * LINUX_SYSINFO_LOADS_SCALE / la->fscale;

Index: src/sys/compat/linux32/common/linux32_termios.c
diff -u src/sys/compat/linux32/common/linux32_termios.c:1.14 src/sys/compat/linux32/common/linux32_termios.c:1.14.42.1
--- src/sys/compat/linux32/common/linux32_termios.c:1.14	Wed Nov 19 18:36:04 2008
+++ src/sys/compat/linux32/common/linux32_termios.c	Tue Jan 21 19:19:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux32_termios.c,v 1.14 2008/11/19 18:36:04 ad Exp $ */
+/*	$NetBSD: linux32_termios.c,v 1.14.42.1 2020/01/21 19:19:17 martin Exp $ */
 
 /*-
  * Copyright (c) 1995-2006, 2008  The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux32_termios.c,v 1.14 2008/11/19 18:36:04 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux32_termios.c,v 1.14.42.1 2020/01/21 19:19:17 martin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_linux32.h"
@@ -262,6 +262,7 @@ linux32_ioctl_termios(struct lwp *l, con
 		case LINUX_TIOCLINUX_READMOUSE:
 		case LINUX_TIOCLINUX_VESABLANK:
 		case LINUX_TIOCLINUX_CURCONS:	/* could use VT_GETACTIVE */
+		default:
 			error = EINVAL;
 			goto out;
 		}

Index: src/sys/compat/linux32/common/linux32_utsname.c
diff -u src/sys/compat/linux32/common/linux32_utsname.c:1.9 src/sys/compat/linux32/common/linux32_utsname.c:1.9.42.1
--- src/sys/compat/linux32/common/linux32_utsname.c:1.9	Wed Nov 19 18:36:04 2008
+++ src/sys/compat/linux32/common/linux32_utsname.c	Tue Jan 21 19:19:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux32_utsname.c,v 1.9 2008/11/19 18:36:04 ad Exp $ */
+/*	$NetBSD: linux32_utsname.c,v 1.9.42.1 2020/01/21 19:19:17 martin Exp $ */
 
 /*-
  * Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved.
@@ -33,7 +33,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: linux32_utsname.c,v 1.9 2008/11/19 18:36:04 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux32_utsname.c,v 1.9.42.1 2020/01/21 19:19:17 martin Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -81,6 +81,7 @@ linux32_sys_uname(struct lwp *l, const s
 	struct linux_utsname luts;
 	struct linux_utsname *lp;
 
+	memset(&luts, 0, sizeof(luts));
 	strlcpy(luts.l_sysname, linux32_sysname, sizeof(luts.l_sysname));
 	strlcpy(luts.l_nodename, hostname, sizeof(luts.l_nodename));
 	strlcpy(luts.l_release, linux32_release, sizeof(luts.l_release));
@@ -101,6 +102,7 @@ linux32_sys_olduname(struct lwp *l, cons
 	} */
 	struct linux_oldutsname luts;
 
+	memset(&luts, 0, sizeof(luts));
 	strlcpy(luts.l_sysname, linux32_sysname, sizeof(luts.l_sysname));
 	strlcpy(luts.l_nodename, hostname, sizeof(luts.l_nodename));
 	strlcpy(luts.l_release, linux32_release, sizeof(luts.l_release));
@@ -118,6 +120,7 @@ linux32_sys_oldolduname(struct lwp *l, c
         } */
         struct linux_oldoldutsname luts;
  
+	memset(&luts, 0, sizeof(luts));
         strlcpy(luts.l_sysname, linux32_sysname, sizeof(luts.l_sysname));
         strlcpy(luts.l_nodename, hostname, sizeof(luts.l_nodename));
         strlcpy(luts.l_release, linux32_release, sizeof(luts.l_release));

Index: src/sys/compat/netbsd32/netbsd32_compat_20.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_20.c:1.33 src/sys/compat/netbsd32/netbsd32_compat_20.c:1.33.4.1
--- src/sys/compat/netbsd32/netbsd32_compat_20.c:1.33	Fri Jan 24 23:20:33 2014
+++ src/sys/compat/netbsd32/netbsd32_compat_20.c	Tue Jan 21 19:19:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_compat_20.c,v 1.33 2014/01/24 23:20:33 christos Exp $	*/
+/*	$NetBSD: netbsd32_compat_20.c,v 1.33.4.1 2020/01/21 19:19:17 martin Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_20.c,v 1.33 2014/01/24 23:20:33 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_20.c,v 1.33.4.1 2020/01/21 19:19:17 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -53,6 +53,7 @@ static inline void compat_20_netbsd32_fr
 static inline void
 compat_20_netbsd32_from_statvfs(struct statvfs *sbp, struct netbsd32_statfs *sb32p)
 {
+	sb32p->f_type = 0; /* XXX Put an actual value? */
 	sb32p->f_flags = sbp->f_flag;
 	sb32p->f_bsize = (netbsd32_long)sbp->f_bsize;
 	sb32p->f_iosize = (netbsd32_long)sbp->f_iosize;

Index: src/sys/compat/netbsd32/netbsd32_compat_43.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_43.c:1.53 src/sys/compat/netbsd32/netbsd32_compat_43.c:1.53.34.1
--- src/sys/compat/netbsd32/netbsd32_compat_43.c:1.53	Fri Apr 23 23:05:40 2010
+++ src/sys/compat/netbsd32/netbsd32_compat_43.c	Tue Jan 21 19:19:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_compat_43.c,v 1.53 2010/04/23 23:05:40 joerg Exp $	*/
+/*	$NetBSD: netbsd32_compat_43.c,v 1.53.34.1 2020/01/21 19:19:17 martin 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.53 2010/04/23 23:05:40 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_43.c,v 1.53.34.1 2020/01/21 19:19:17 martin Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_43.h"
@@ -75,6 +75,7 @@ static void
 netbsd32_from_stat(const struct stat *sb, struct netbsd32_stat43 *sp32)
 {
 
+	memset(sp32, 0, sizeof(*sp32));
 	sp32->st_dev = sb->st_dev;
 	sp32->st_ino = sb->st_ino;
 	sp32->st_mode = sb->st_mode;
@@ -430,7 +431,7 @@ compat_43_netbsd32_orecvmsg(struct lwp *
 	struct iovec *iov, aiov[UIO_SMALLIOV];
 	int error;
 
-	error = copyin(SCARG_P32(uap, msg), &omsg, sizeof (struct omsghdr));
+	error = copyin(SCARG_P32(uap, msg), &omsg, sizeof(omsg));
 	if (error)
 		return (error);
 
@@ -515,7 +516,7 @@ compat_43_netbsd32_osendmsg(struct lwp *
 	struct sockaddr *sa;
 	int error;
 
-	error = copyin(SCARG_P32(uap, msg), &omsg, sizeof (struct omsghdr));
+	error = copyin(SCARG_P32(uap, msg), &omsg, sizeof(omsg));
 	if (error != 0)
 		return (error);
 

Index: src/sys/compat/netbsd32/netbsd32_compat_50.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_50.c:1.24.2.1 src/sys/compat/netbsd32/netbsd32_compat_50.c:1.24.2.2
--- src/sys/compat/netbsd32/netbsd32_compat_50.c:1.24.2.1	Thu Oct 30 12:18:56 2014
+++ src/sys/compat/netbsd32/netbsd32_compat_50.c	Tue Jan 21 19:19:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_compat_50.c,v 1.24.2.1 2014/10/30 12:18:56 martin Exp $	*/
+/*	$NetBSD: netbsd32_compat_50.c,v 1.24.2.2 2020/01/21 19:19:17 martin 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.24.2.1 2014/10/30 12:18:56 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.24.2.2 2020/01/21 19:19:17 martin Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_sysv.h"
@@ -797,9 +797,9 @@ compat_50_netbsd32___fhstat40(struct lwp
 	int error;
 
 	error = do_fhstat(l, SCARG_P32(uap, fhp), SCARG(uap, fh_size), &sb);
-	if (error != 0) {
+	if (error == 0) {
 		netbsd32_from___stat50(&sb, &sb32);
-		error = copyout(&sb32, SCARG_P32(uap, sb), sizeof(sb));
+		error = copyout(&sb32, SCARG_P32(uap, sb), sizeof(sb32));
 	}
 	return error;
 }

Index: src/sys/compat/ossaudio/ossaudio.c
diff -u src/sys/compat/ossaudio/ossaudio.c:1.68 src/sys/compat/ossaudio/ossaudio.c:1.68.4.1
--- src/sys/compat/ossaudio/ossaudio.c:1.68	Thu Sep 19 18:50:36 2013
+++ src/sys/compat/ossaudio/ossaudio.c	Tue Jan 21 19:19:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: ossaudio.c,v 1.68 2013/09/19 18:50:36 christos Exp $	*/
+/*	$NetBSD: ossaudio.c,v 1.68.4.1 2020/01/21 19:19:17 martin Exp $	*/
 
 /*-
  * Copyright (c) 1997, 2008 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ossaudio.c,v 1.68 2013/09/19 18:50:36 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ossaudio.c,v 1.68.4.1 2020/01/21 19:19:17 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -968,7 +968,7 @@ getdevinfo(file_t *fp)
 	}
 	for(i = 0; i < NETBSD_MAXDEVS; i++) {
 		mi.index = i;
-		if (ioctlf(fp, AUDIO_MIXER_DEVINFO, &mi) < 0)
+		if (ioctlf(fp, AUDIO_MIXER_DEVINFO, &mi) != 0)
 			break;
 		switch(mi.type) {
 		case AUDIO_MIXER_VALUE:
@@ -996,7 +996,7 @@ getdevinfo(file_t *fp)
 	}
 	for(i = 0; i < NETBSD_MAXDEVS; i++) {
 		mi.index = i;
-		if (ioctlf(fp, AUDIO_MIXER_DEVINFO, &mi) < 0)
+		if (ioctlf(fp, AUDIO_MIXER_DEVINFO, &mi) != 0)
 			break;
 		if (strcmp(mi.label.name, AudioNsource) != 0)
 			continue;

Index: src/sys/kern/sysv_shm.c
diff -u src/sys/kern/sysv_shm.c:1.125.2.1 src/sys/kern/sysv_shm.c:1.125.2.2
--- src/sys/kern/sysv_shm.c:1.125.2.1	Sat Feb 23 07:02:20 2019
+++ src/sys/kern/sysv_shm.c	Tue Jan 21 19:19:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: sysv_shm.c,v 1.125.2.1 2019/02/23 07:02:20 martin Exp $	*/
+/*	$NetBSD: sysv_shm.c,v 1.125.2.2 2020/01/21 19:19:17 martin Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2007 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysv_shm.c,v 1.125.2.1 2019/02/23 07:02:20 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysv_shm.c,v 1.125.2.2 2020/01/21 19:19:17 martin Exp $");
 
 #define SYSVSHM
 
@@ -115,6 +115,26 @@ struct shmmap_state {
 static int shmrealloc(int);
 
 /*
+ * Find the shared memory segment permission by the index. Only used by
+ * compat_linux to implement SHM_STAT.
+ */
+int
+shm_find_segment_perm_by_index(int index, struct ipc_perm *perm)
+{
+	struct shmid_ds *shmseg;
+
+	mutex_enter(&shm_lock);
+	if (index < 0 || index >= shminfo.shmmni) {
+		mutex_exit(&shm_lock);
+		return EINVAL;
+	}
+	shmseg = &shmsegs[index];
+	memcpy(perm, &shmseg->shm_perm, sizeof(*perm));
+	mutex_exit(&shm_lock);
+	return 0;
+}
+
+/*
  * Find the shared memory segment by the identifier.
  *  => must be called with shm_lock held;
  */

Index: src/sys/miscfs/procfs/procfs_linux.c
diff -u src/sys/miscfs/procfs/procfs_linux.c:1.70 src/sys/miscfs/procfs/procfs_linux.c:1.70.2.1
--- src/sys/miscfs/procfs/procfs_linux.c:1.70	Sun Aug 10 06:22:06 2014
+++ src/sys/miscfs/procfs/procfs_linux.c	Tue Jan 21 19:19:17 2020
@@ -1,4 +1,4 @@
-/*      $NetBSD: procfs_linux.c,v 1.70 2014/08/10 06:22:06 matt Exp $      */
+/*      $NetBSD: procfs_linux.c,v 1.70.2.1 2020/01/21 19:19:17 martin Exp $      */
 
 /*
  * Copyright (c) 2001 Wasabi Systems, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: procfs_linux.c,v 1.70 2014/08/10 06:22:06 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: procfs_linux.c,v 1.70.2.1 2020/01/21 19:19:17 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -432,6 +432,7 @@ procfs_do_pid_stat(struct lwp *curl, str
 	mutex_enter(proc_lock);
 	mutex_enter(p->p_lock);
 
+	memset(&ki, 0, sizeof(ki));
 	fill_kproc2(p, &ki, false);
 	calcru(p, NULL, NULL, NULL, &rt);
 

Index: src/sys/sys/shm.h
diff -u src/sys/sys/shm.h:1.48 src/sys/sys/shm.h:1.48.40.1
--- src/sys/sys/shm.h:1.48	Mon Jan 19 19:39:41 2009
+++ src/sys/sys/shm.h	Tue Jan 21 19:19:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: shm.h,v 1.48 2009/01/19 19:39:41 christos Exp $	*/
+/*	$NetBSD: shm.h,v 1.48.40.1 2020/01/21 19:19:17 martin Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -176,6 +176,7 @@ void	shminit(void);
 void	shmfork(struct vmspace *, struct vmspace *);
 void	shmexit(struct vmspace *);
 int	shmctl1(struct lwp *, int, int, struct shmid_ds *);
+int	shm_find_segment_perm_by_index(int, struct ipc_perm *);
 
 #define SYSCTL_FILL_SHM(src, dst) do { \
 	SYSCTL_FILL_PERM((src).shm_perm, (dst).shm_perm); \

Reply via email to