svn commit: r239592 - stable/8/sys/vm
Konstantin Belousov
kib at FreeBSD.org
Wed Aug 22 20:34:24 UTC 2012
Author: kib
Date: Wed Aug 22 20:34:23 2012
New Revision: 239592
URL: http://svn.freebsd.org/changeset/base/239592
Log:
MFC r239247:
Adjust the r205536, by allowing a non-zero offset for anonymous
mappings for a.out binaries. Apparently, a.out ld.so from FreeBSD
1.1.5.1 can issue such requests.
Modified:
stable/8/sys/vm/vm_mmap.c
Directory Properties:
stable/8/sys/ (props changed)
Modified: stable/8/sys/vm/vm_mmap.c
==============================================================================
--- stable/8/sys/vm/vm_mmap.c Wed Aug 22 20:22:55 2012 (r239591)
+++ stable/8/sys/vm/vm_mmap.c Wed Aug 22 20:34:23 2012 (r239592)
@@ -202,11 +202,24 @@ mmap(td, uap)
pos = uap->pos;
fp = NULL;
- /* make sure mapping fits into numeric range etc */
- if ((uap->len == 0 && !SV_CURPROC_FLAG(SV_AOUT) &&
- curproc->p_osrel >= P_OSREL_MAP_ANON) ||
- ((flags & MAP_ANON) && (uap->fd != -1 || pos != 0)))
- return (EINVAL);
+
+ /*
+ * Enforce the constraints.
+ * Mapping of length 0 is only allowed for old binaries.
+ * Anonymous mapping shall specify -1 as filedescriptor and
+ * zero position for new code. Be nice to ancient a.out
+ * binaries and correct pos for anonymous mapping, since old
+ * ld.so sometimes issues anonymous map requests with non-zero
+ * pos.
+ */
+ if (!SV_CURPROC_FLAG(SV_AOUT)) {
+ if ((uap->len == 0 && curproc->p_osrel >= P_OSREL_MAP_ANON) ||
+ ((flags & MAP_ANON) != 0 && (uap->fd != -1 || pos != 0)))
+ return (EINVAL);
+ } else {
+ if ((flags & MAP_ANON) != 0)
+ pos = 0;
+ }
if (flags & MAP_STACK) {
if ((uap->fd != -1) ||
More information about the svn-src-stable
mailing list