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