Module Name:    src
Committed By:   christos
Date:           Sat Apr 29 01:15:40 UTC 2017

Modified Files:
        src/sys/compat/common: vm_43.c
        src/sys/compat/netbsd32: netbsd32_netbsd.c
        src/sys/compat/sys: mman.h

Log Message:
move MAP_COPY in compat


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sys/compat/common/vm_43.c
cvs rdiff -u -r1.205 -r1.206 src/sys/compat/netbsd32/netbsd32_netbsd.c
cvs rdiff -u -r1.2 -r1.3 src/sys/compat/sys/mman.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/vm_43.c
diff -u src/sys/compat/common/vm_43.c:1.18 src/sys/compat/common/vm_43.c:1.19
--- src/sys/compat/common/vm_43.c:1.18	Tue Feb  8 15:20:26 2011
+++ src/sys/compat/common/vm_43.c	Fri Apr 28 21:15:40 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: vm_43.c,v 1.18 2011/02/08 20:20:26 rmind Exp $	*/
+/*	$NetBSD: vm_43.c,v 1.19 2017/04/29 01:15:40 christos Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -43,7 +43,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vm_43.c,v 1.18 2011/02/08 20:20:26 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm_43.c,v 1.19 2017/04/29 01:15:40 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -110,12 +110,21 @@ compat_43_sys_mmap(struct lwp *l, const 
 	SCARG(&nargs, flags) = 0;
 	if (SCARG(uap, flags) & OMAP_ANON)
 		SCARG(&nargs, flags) |= MAP_ANON;
-	if (SCARG(uap, flags) & OMAP_COPY)
-		SCARG(&nargs, flags) |= MAP_COPY;
 	if (SCARG(uap, flags) & OMAP_SHARED)
 		SCARG(&nargs, flags) |= MAP_SHARED;
 	else
 		SCARG(&nargs, flags) |= MAP_PRIVATE;
+	if (SCARG(uap, flags) & OMAP_COPY) {
+		SCARG(&nargs, flags) |= MAP_PRIVATE;
+#if defined(COMPAT_10) && defined(__i386__)
+		/*
+		 * Ancient kernel on x86 did not obey PROT_EXEC on i386 at least
+		 * and ld.so did not turn it on. We take care of this on amd64
+		 * in compat32.
+		 */
+		SCARGS(&nargs, prot) |= PROT_EXEC;
+#endif
+	}
 	if (SCARG(uap, flags) & OMAP_FIXED)
 		SCARG(&nargs, flags) |= MAP_FIXED;
 	if (SCARG(uap, flags) & OMAP_INHERIT)

Index: src/sys/compat/netbsd32/netbsd32_netbsd.c
diff -u src/sys/compat/netbsd32/netbsd32_netbsd.c:1.205 src/sys/compat/netbsd32/netbsd32_netbsd.c:1.206
--- src/sys/compat/netbsd32/netbsd32_netbsd.c:1.205	Wed Oct 19 05:44:01 2016
+++ src/sys/compat/netbsd32/netbsd32_netbsd.c	Fri Apr 28 21:15:40 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_netbsd.c,v 1.205 2016/10/19 09:44:01 skrll Exp $	*/
+/*	$NetBSD: netbsd32_netbsd.c,v 1.206 2017/04/29 01:15:40 christos 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.205 2016/10/19 09:44:01 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_netbsd.c,v 1.206 2017/04/29 01:15:40 christos Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ddb.h"
@@ -90,6 +90,8 @@ __KERNEL_RCSID(0, "$NetBSD: netbsd32_net
 #include <compat/netbsd32/netbsd32_syscallargs.h>
 #include <compat/netbsd32/netbsd32_conv.h>
 
+#include <compat/sys/mman.h>
+
 #if defined(DDB)
 #include <ddb/ddbvar.h>
 #endif
@@ -1521,8 +1523,11 @@ netbsd32_mmap(struct lwp *l, const struc
 	 * Ancient kernel on x86 did not obey PROT_EXEC on i386 at least
 	 * and ld.so did not turn it on!
 	 */
-	if (SCARG(&ua, flags) & MAP_COPY)
+	if (SCARG(&ua, flags) & COMPAT_MAP_COPY) {
+		SCARG(&ua, flags) = MAP_PRIVATE
+		    | (SCARG(&ua, flags) & ~COMPAT_MAP_COPY);
 		SCARG(&ua, prot) |= PROT_EXEC;
+	}
 #endif
 	NETBSD32TO64_UAP(fd);
 	NETBSD32TOX_UAP(PAD, long);

Index: src/sys/compat/sys/mman.h
diff -u src/sys/compat/sys/mman.h:1.2 src/sys/compat/sys/mman.h:1.3
--- src/sys/compat/sys/mman.h:1.2	Sun Dec 11 07:20:29 2005
+++ src/sys/compat/sys/mman.h	Fri Apr 28 21:15:40 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: mman.h,v 1.2 2005/12/11 12:20:29 christos Exp $	*/
+/*	$NetBSD: mman.h,v 1.3 2017/04/29 01:15:40 christos Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1986, 1993
@@ -34,6 +34,12 @@
 #ifndef _COMPAT_SYS_MMAN_H_
 #define _COMPAT_SYS_MMAN_H_
 
+/*
+ * Deprecated flag; these are treated as MAP_PRIVATE internally by
+ * the kernel. 
+ */
+#define	COMPAT_MAP_COPY	0x0004	/* "copy" region at mmap time */
+
 __BEGIN_DECLS
 int	msync(void *, size_t);
 int	__msync13(void *, size_t, int);

Reply via email to