summary refs log tree commit diff
path: root/elf/tst-env-setuid.c
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh@sourceware.org>2017-03-07 20:52:04 +0530
committerSiddhesh Poyarekar <siddhesh@sourceware.org>2017-03-07 20:52:04 +0530
commit1c1243b6fc33c029488add276e56570a07803bfd (patch)
treedc024978a5a16a4bd027a4f28508ab503983fa6c /elf/tst-env-setuid.c
parenta7055e5935f7ee63d622c66a7dde16ba0de674e0 (diff)
downloadglibc-1c1243b6fc33c029488add276e56570a07803bfd.tar.gz
glibc-1c1243b6fc33c029488add276e56570a07803bfd.tar.xz
glibc-1c1243b6fc33c029488add276e56570a07803bfd.zip
Ignore and remove LD_HWCAP_MASK for AT_SECURE programs (bug #21209)
The LD_HWCAP_MASK environment variable may alter the selection of
function variants for some architectures.  For AT_SECURE process it
means that if an outdated routine has a bug that would otherwise not
affect newer platforms by default, LD_HWCAP_MASK will allow that bug
to be exploited.

To be on the safe side, ignore and disable LD_HWCAP_MASK for setuid
binaries.

	[BZ #21209]
	* elf/rtld.c (process_envvars): Ignore LD_HWCAP_MASK for
	AT_SECURE processes.
	* sysdeps/generic/unsecvars.h: Add LD_HWCAP_MASK.
	* elf/tst-env-setuid.c (test_parent): Test LD_HWCAP_MASK.
	(test_child): Likewise.
	* elf/Makefile (tst-env-setuid-ENV): Add LD_HWCAP_MASK.
Diffstat (limited to 'elf/tst-env-setuid.c')
-rw-r--r--elf/tst-env-setuid.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/elf/tst-env-setuid.c b/elf/tst-env-setuid.c
index 6ec3fa5874..eec408eb5d 100644
--- a/elf/tst-env-setuid.c
+++ b/elf/tst-env-setuid.c
@@ -213,6 +213,12 @@ test_child (void)
       return 1;
     }
 
+  if (getenv ("LD_HWCAP_MASK") != NULL)
+    {
+      printf ("LD_HWCAP_MASK still set\n");
+      return 1;
+    }
+
   return 0;
 }
 #endif
@@ -233,6 +239,12 @@ test_parent (void)
       return 1;
     }
 
+  if (getenv ("LD_HWCAP_MASK") == NULL)
+    {
+      printf ("LD_HWCAP_MASK lost\n");
+      return 1;
+    }
+
   return 0;
 }
 #endif