diff options
author | kan <kan@FreeBSD.org> | 2010-06-10 17:59:47 +0000 |
---|---|---|
committer | kan <kan@FreeBSD.org> | 2010-06-10 17:59:47 +0000 |
commit | 46bba0ff8197340b7456ab1725382d7ed4976fdd (patch) | |
tree | a27f219b4fe9b91b5326d1e4d5543fd788bd3fda /sys/amd64 | |
parent | e35649401c75190bf4d017b6e4ff7b55c8804f60 (diff) | |
download | FreeBSD-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/amd64')
-rw-r--r-- | sys/amd64/linux32/linux32_machdep.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/amd64/linux32/linux32_machdep.c b/sys/amd64/linux32/linux32_machdep.c index 46119b6..22ca3cb 100644 --- a/sys/amd64/linux32/linux32_machdep.c +++ b/sys/amd64/linux32/linux32_machdep.c @@ -835,9 +835,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; |