patches/glibc/2.9/380-2.3.6-dl_execstack-PaX-support.patch
author Cody Schafer <dev@codyps.com>
Fri May 09 19:13:49 2014 -0700 (2014-05-09)
changeset 3312 4876ff97e039
parent 1201 c9967a6e3b25
permissions -rw-r--r--
cc/gcc: allow CC_EXTRA_CONFIG_ARRAY on baremetal

The final bare-metal compiler is built using the core backend.
Currently the core uses the CC_CORE_EXTRA_CONFIG_ARRAY variable.

While this works as supposed to, this can leave the user puzzled
in the menuconfig, since all he can see is the core options, not
the final options.

Only show the core options if any of the core passes are needed,
and use the final options in the core-backend if we're issuing
the bare-metal compiler.

Signed-off-by: Cody P Schafer <dev@codyps.com>
[yann.morin.1998@free.fr: hide core options if no core pass needed;
use final option in core backend if issuing the bare-metal compiler]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Message-Id: <22181e546ba746202489.1399688067@localhost>
Patchwork-Id: 347586
     1 Original patch from: gentoo/src/patchsets/glibc/2.9/3000_all_2.3.6-dl_execstack-PaX-support.patch
     2 
     3 -= BEGIN original header =-
     4 	With latest versions of glibc, a lot of apps failed on a PaX enabled
     5 	system with:
     6 		 cannot enable executable stack as shared object requires: Permission denied
     7 	
     8 	This is due to PaX 'exec-protecting' the stack, and ld.so then trying
     9 	to make the stack executable due to some libraries not containing the
    10 	PT_GNU_STACK section.  Bug #32960.  <azarah@gentoo.org> (12 Nov 2003).
    11 
    12 	Patch also NPTL. Bug #116086. <kevquinn@gentoo.org> (20 Dec 2005).
    13 
    14 -= END original header =-
    15 
    16 diff -durN glibc-2_9.orig/nptl/allocatestack.c glibc-2_9/nptl/allocatestack.c
    17 --- glibc-2_9.orig/nptl/allocatestack.c	2008-08-16 00:35:27.000000000 +0200
    18 +++ glibc-2_9/nptl/allocatestack.c	2009-02-02 22:01:20.000000000 +0100
    19 @@ -299,7 +299,8 @@
    20  # error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP"
    21  #endif
    22    if (mprotect (stack, len, PROT_READ | PROT_WRITE | PROT_EXEC) != 0)
    23 -    return errno;
    24 +    if (errno != EACCES) /* PAX is enabled */
    25 +    	return errno;
    26  
    27    return 0;
    28  }
    29 diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/dl-execstack.c glibc-2_9/sysdeps/unix/sysv/linux/dl-execstack.c
    30 --- glibc-2_9.orig/sysdeps/unix/sysv/linux/dl-execstack.c	2006-01-08 09:21:15.000000000 +0100
    31 +++ glibc-2_9/sysdeps/unix/sysv/linux/dl-execstack.c	2009-02-02 22:01:20.000000000 +0100
    32 @@ -63,7 +63,10 @@
    33        else
    34  # endif
    35  	{
    36 -	  result = errno;
    37 +	  if (errno == EACCES)  /* PAX is enabled */
    38 +	    result = 0;
    39 +	  else
    40 +	    result = errno;
    41  	  goto out;
    42  	}
    43      }
    44 @@ -89,7 +92,12 @@
    45  	page -= size;
    46        else
    47  	{
    48 -	  if (errno != ENOMEM)	/* Unexpected failure mode.  */
    49 +	  if (errno == EACCES)		/* PAX is enabled */
    50 +	    {
    51 +	      result = 0;
    52 +	      goto out;
    53 +	    }
    54 +	  else if (errno != ENOMEM)	/* Unexpected failure mode.  */
    55  	    {
    56  	      result = errno;
    57  	      goto out;
    58 @@ -115,7 +123,12 @@
    59  	page += size;
    60        else
    61  	{
    62 -	  if (errno != ENOMEM)	/* Unexpected failure mode.  */
    63 +	  if (errno == EACCES)		/* PAX is enabled */
    64 +	    {
    65 +	      result = 0;
    66 +	      goto out;
    67 +	    }
    68 +	  else if (errno != ENOMEM)	/* Unexpected failure mode.  */
    69  	    {
    70  	      result = errno;
    71  	      goto out;