svn commit: r357076 - head/sys/compat/linux
Edward Tomasz Napierala
trasz at FreeBSD.org
Fri Jan 24 12:08:24 UTC 2020
Author: trasz
Date: Fri Jan 24 12:08:23 2020
New Revision: 357076
URL: https://svnweb.freebsd.org/changeset/base/357076
Log:
Make linux(4) handle MAP_32BIT.
This unbreaks Mono (mono-devel-4.6.2.7+dfsg-1ubuntu1 from Ubuntu Bionic);
previously would crash on "amd64_is_imm32" assert.
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D23306
Modified:
head/sys/compat/linux/linux_mmap.c
head/sys/compat/linux/linux_mmap.h
Modified: head/sys/compat/linux/linux_mmap.c
==============================================================================
--- head/sys/compat/linux/linux_mmap.c Fri Jan 24 11:57:55 2020 (r357075)
+++ head/sys/compat/linux/linux_mmap.c Fri Jan 24 12:08:23 2020 (r357076)
@@ -113,7 +113,15 @@ linux_mmap_common(struct thread *td, uintptr_t addr, s
if (flags & LINUX_MAP_GROWSDOWN)
bsd_flags |= MAP_STACK;
+#if defined(__amd64__)
/*
+ * According to the Linux mmap(2) man page, "MAP_32BIT flag
+ * is ignored when MAP_FIXED is set."
+ */
+ if ((flags & LINUX_MAP_32BIT) && (flags & LINUX_MAP_FIXED) == 0)
+ bsd_flags |= MAP_32BIT;
+
+ /*
* PROT_READ, PROT_WRITE, or PROT_EXEC implies PROT_READ and PROT_EXEC
* on Linux/i386 if the binary requires executable stack.
* We do this only for IA32 emulation as on native i386 this is does not
@@ -121,7 +129,6 @@ linux_mmap_common(struct thread *td, uintptr_t addr, s
*
* XXX. Linux checks that the file system is not mounted with noexec.
*/
-#if defined(__amd64__)
linux_fixup_prot(td, &prot);
#endif
Modified: head/sys/compat/linux/linux_mmap.h
==============================================================================
--- head/sys/compat/linux/linux_mmap.h Fri Jan 24 11:57:55 2020 (r357075)
+++ head/sys/compat/linux/linux_mmap.h Fri Jan 24 12:08:23 2020 (r357076)
@@ -39,6 +39,7 @@
#define LINUX_MAP_PRIVATE 0x0002
#define LINUX_MAP_FIXED 0x0010
#define LINUX_MAP_ANON 0x0020
+#define LINUX_MAP_32BIT 0x0040
#define LINUX_MAP_GROWSDOWN 0x0100
#define LINUX_PROT_GROWSDOWN 0x01000000
More information about the svn-src-all
mailing list