summaryrefslogtreecommitdiffstats
path: root/sys/i386
diff options
context:
space:
mode:
authorkan <kan@FreeBSD.org>2010-06-10 17:59:47 +0000
committerkan <kan@FreeBSD.org>2010-06-10 17:59:47 +0000
commit46bba0ff8197340b7456ab1725382d7ed4976fdd (patch)
treea27f219b4fe9b91b5326d1e4d5543fd788bd3fda /sys/i386
parente35649401c75190bf4d017b6e4ff7b55c8804f60 (diff)
downloadFreeBSD-src-46bba0ff8197340b7456ab1725382d7ed4976fdd.zip
FreeBSD-src-46bba0ff8197340b7456ab1725382d7ed4976fdd.tar.gz
Do not require pos parameter to be zero in MAP_ANONYMOUS mmap requests
in Linux emulation layer. Linux seems to only require that pos is page-aligned, but otherwise ignores it. Default FreeBSD mmap parameter checking is too strict to allow some Linux binaries to run. tsMuxeR is one example of such a binary. Discussed with: jhb MFC after: 1 week
Diffstat (limited to 'sys/i386')
-rw-r--r--sys/i386/linux/linux_machdep.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/i386/linux/linux_machdep.c b/sys/i386/linux/linux_machdep.c
index 4e119d8..d26504f 100644
--- a/sys/i386/linux/linux_machdep.c
+++ b/sys/i386/linux/linux_machdep.c
@@ -667,9 +667,13 @@ linux_mmap_common(struct thread *td, l_uintptr_t addr, l_size_t len, l_int prot,
bsd_args.flags |= MAP_PRIVATE;
if (flags & LINUX_MAP_FIXED)
bsd_args.flags |= MAP_FIXED;
- if (flags & LINUX_MAP_ANON)
+ if (flags & LINUX_MAP_ANON) {
+ /* Enforce pos to be on page boundary, then ignore. */
+ if ((pos & PAGE_MASK) != 0)
+ return (EINVAL);
+ pos = 0;
bsd_args.flags |= MAP_ANON;
- else
+ } else
bsd_args.flags |= MAP_NOSYNC;
if (flags & LINUX_MAP_GROWSDOWN)
bsd_args.flags |= MAP_STACK;
OpenPOWER on IntegriCloud