On Thu, Oct 13, 2011 at 04:20:10PM +0000, Marcel Moolenaar wrote:
> Author: marcel
> Date: Thu Oct 13 16:20:10 2011
> New Revision: 226343
> URL: http://svn.freebsd.org/changeset/base/226343
> 
> Log:
>   In sys_obreak() and when compiling for amd64 or ia64, when the process
>   is ILP32 (i.e. i386) grant execute permissions by default. The JDK 1.4.x
>   depends on being able to execute from the heap on i386.
> 
> Modified:
>   head/sys/vm/vm_unix.c
> 
> Modified: head/sys/vm/vm_unix.c
> ==============================================================================
> --- head/sys/vm/vm_unix.c     Thu Oct 13 16:16:46 2011        (r226342)
> +++ head/sys/vm/vm_unix.c     Thu Oct 13 16:20:10 2011        (r226343)
> @@ -36,6 +36,8 @@
>   *   @(#)vm_unix.c   8.1 (Berkeley) 6/11/93
>   */
>  
> +#include "opt_compat.h"
> +
>  /*
>   * Traditional sbrk/grow interface to VM
>   */
> @@ -49,6 +51,7 @@ __FBSDID("$FreeBSD$");
>  #include <sys/proc.h>
>  #include <sys/racct.h>
>  #include <sys/resourcevar.h>
> +#include <sys/sysent.h>
>  #include <sys/sysproto.h>
>  #include <sys/systm.h>
>  
> @@ -75,7 +78,7 @@ sys_obreak(td, uap)
>       struct vmspace *vm = td->td_proc->p_vmspace;
>       vm_offset_t new, old, base;
>       rlim_t datalim, vmemlim;
> -     int rv;
> +     int prot, rv;
>       int error = 0;
>       boolean_t do_map_wirefuture;
>  
> @@ -135,8 +138,15 @@ sys_obreak(td, uap)
>               }
>               PROC_UNLOCK(td->td_proc);
>  #endif
> +             prot = VM_PROT_RW;
> +#ifdef COMPAT_FREEBSD32
> +#if defined(__amd64__) || defined(__ia64__)
> +             if (SV_PROC_FLAG(td->td_proc, SV_ILP32))
> +                     prot |= VM_PROT_EXECUTE;
> +#endif
> +#endif
>               rv = vm_map_insert(&vm->vm_map, NULL, 0, old, new,
> -                 VM_PROT_RW, VM_PROT_ALL, 0);
> +                 prot, VM_PROT_ALL, 0);
>               if (rv != KERN_SUCCESS) {
>  #ifdef RACCT
>                       PROC_LOCK(td->td_proc);
The two commits removed NX support for .data/.bss for 32bit binaries on amd64.
This is too unfortunate. Can we claim that only old binaries need this hack ?

If yes, could you, please, conditionalize the hack on curproc->p_osrel
being, say, 4.x ?

Attachment: pgpJQZj87yPZz.pgp
Description: PGP signature

Reply via email to