Date: Sun, 19 Mar 2017 15:32:12 +0000 (UTC) From: Edward Tomasz Napierala <trasz@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r315556 - stable/11/sys/compat/linux Message-ID: <201703191532.v2JFWCpH093003@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: trasz Date: Sun Mar 19 15:32:12 2017 New Revision: 315556 URL: https://svnweb.freebsd.org/changeset/base/315556 Log: MFC r313947: There are some Linux binaries that expect the system to obey the "addr" parameter to mmap(2), even if MAP_FIXED is not explicitly specified. Android ART is one example. Implement bug compatibility for this case in linuxulator. Sponsored by: DARPA, AFRL Modified: stable/11/sys/compat/linux/linux_mmap.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/compat/linux/linux_mmap.c ============================================================================== --- stable/11/sys/compat/linux/linux_mmap.c Sun Mar 19 15:15:34 2017 (r315555) +++ stable/11/sys/compat/linux/linux_mmap.c Sun Mar 19 15:32:12 2017 (r315556) @@ -203,8 +203,23 @@ linux_mmap_common(struct thread *td, uin } } - error = kern_mmap(td, addr, len, prot, bsd_flags, fd, pos); + /* + * FreeBSD is free to ignore the address hint if MAP_FIXED wasn't + * passed. However, some Linux applications, like the ART runtime, + * depend on the hint. If the MAP_FIXED wasn't passed, but the + * address is not zero, try with MAP_FIXED and MAP_EXCL first, + * and fall back to the normal behaviour if that fails. + */ + if (addr != 0 && (bsd_flags & MAP_FIXED) == 0 && + (bsd_flags & MAP_EXCL) == 0) { + error = kern_mmap(td, addr, len, prot, + bsd_flags | MAP_FIXED | MAP_EXCL, fd, pos); + if (error == 0) + goto out; + } + error = kern_mmap(td, addr, len, prot, bsd_flags, fd, pos); +out: LINUX_CTR2(mmap2, "return: %d (%p)", error, td->td_retval[0]); return (error);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201703191532.v2JFWCpH093003>