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);