Fix for errno 2 - expected 14 (EFAULT) problems

Marcin Cieslak saper at SYSTEM.PL
Sat Sep 16 07:37:24 PDT 2006


LTP tests illegal memory by mmaping one-byte area region with PROT_NONE.
Old FreeBSD (before 1.333 version of /sys/vm/vm_map.c) always silently allowed
reada access - see http://www.freebsd.org/cgi/query-pr.cgi?pr=64573.
Linux emulation (initial version of linux_machdep.c) always added PROT_READ
to match FreeBSD behaviour, I think this is no longer necessary.

The fix for i386 is easy:

--- /usr/home/saper/b/src/sys/i386/linux/linux_machdep.c        Fri Aug  5 
01:25:32 2005
+++ /sys/i386/linux/linux_machdep.c     Sat Sep 16 15:13:47 2006
@@ -549,7 +549,7 @@
                 bsd_args.len  = linux_args->len;
         }

-       bsd_args.prot = linux_args->prot | PROT_READ;   /* always required */
+       bsd_args.prot = linux_args->prot;
         if (linux_args->flags & LINUX_MAP_ANON)
                 bsd_args.fd = -1;
         else

However comment in the amd64 file indicates that for some Java applications 
PROT_EXEC should be added as well. I think we can remove PROT_READ also from 
amd64 part anyway.

This fixes access03, chdir04, chmod06, chown04, chroot03 and many others.

-- 
               << Marcin Cieslak // saper at system.pl >>


More information about the freebsd-emulation mailing list