diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | elf/Makefile | 2 | ||||
-rw-r--r-- | scripts/check-execstack.awk | 27 | ||||
-rw-r--r-- | sysdeps/mach/hurd/i386/Makefile | 6 |
4 files changed, 36 insertions, 6 deletions
@@ -6,6 +6,13 @@ hidden prototypes. * sysdeps/mach/include/mach-shortcuts-hidden.h [!_ISOMAC]: Likewise. * sysdeps/mach/include/mach/mach_traps.h [!_ISOMAC]: Likewise. + * scripts/check-execstack.awk: Consider `xfail' variable containing a + list of libraries whose stack executability is expected. + * elf/Makefile ($(objpfx)check-execstack.out): Pass + $(check-execstack-xfail) to check-execstack.awk through `xfail' + variable. + * sysdeps/mach/hurd/i386/Makefile (check-execstack-xfail): Set to ld.so + libc.so libpthread.so. 2018-07-20 Thomas Schwinge <tschwinge@gnu.org> diff --git a/elf/Makefile b/elf/Makefile index 84107f6..cd07713 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -1103,7 +1103,7 @@ common-generated += $(all-built-dso:$(common-objpfx)%=%.phdr) $(objpfx)check-execstack.out: $(..)scripts/check-execstack.awk \ $(objpfx)execstack-default \ $(all-built-dso:=.phdr) - LC_ALL=C $(AWK) -f $^ > $@; \ + LC_ALL=C $(AWK) -v "xfail=$(check-execstack-xfail)" -f $^ > $@; \ $(evaluate-test) generated += check-execstack.out diff --git a/scripts/check-execstack.awk b/scripts/check-execstack.awk index 21d37e9..cd6b30e 100644 --- a/scripts/check-execstack.awk +++ b/scripts/check-execstack.awk @@ -6,7 +6,12 @@ # It fails (1) if any did indicate executable stack. # It fails (2) if the input did not take the expected form. -BEGIN { result = sanity = 0; default_exec = -1 } +BEGIN { + result = sanity = 0; default_exec = -1; + split(xfail, xfails, " "); + for (x in xfails) + expected_fails[xfails[x] ".phdr"] = 1; +} /^execstack-no$/ { default_exec = 0; next } /^execstack-yes$/ { default_exec = 1; next } @@ -17,6 +22,10 @@ function check_one(name) { result = 2; } + n = split(name, parts, "/"); + basename = parts[n]; + expected_fail = basename in expected_fails; + if (!sanity) { print name ": *** input did not look like readelf -l output"; result = 2; @@ -24,12 +33,20 @@ function check_one(name) { if (stack_line ~ /^.*RW .*$/) { print name ": OK"; } else if (stack_line ~ /^.*E.*$/) { - print name ": *** executable stack signaled"; - result = result ? result : 1; + if (expected_fail) { + print name ": *** executable stack signaled, expected"; + } else { + print name ": *** executable stack signaled"; + result = result ? result : 1; + } } } else if (default_exec) { - print name ": *** no PT_GNU_STACK entry"; - result = result ? result : 1; + if (expected_fail) { + print name ": *** no PT_GNU_STACK entry, expected"; + } else { + print name ": *** no PT_GNU_STACK entry"; + result = result ? result : 1; + } } else { print name ": no PT_GNU_STACK but default is OK"; } diff --git a/sysdeps/mach/hurd/i386/Makefile b/sysdeps/mach/hurd/i386/Makefile index 0b509d9..9a824fa 100644 --- a/sysdeps/mach/hurd/i386/Makefile +++ b/sysdeps/mach/hurd/i386/Makefile @@ -96,3 +96,9 @@ endif ifeq ($(subdir),mach) test-xfail-check-abi-libmachuser = yes endif + +ifeq ($(subdir),elf) +# We do use nested functions involving creation of trampolines, notably for +# callbacks whose parameters don't permit to get the context parameters. +check-execstack-xfail += ld.so libc.so libpthread.so +endif |