mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-03 08:11:08 +00:00
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.
This commit is contained in:
parent
a7055e5935
commit
1c1243b6fc
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
||||
2017-03-07 Siddhesh Poyarekar <siddhesh@sourceware.org>
|
||||
|
||||
[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.
|
||||
|
||||
2017-03-07 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
|
||||
* sysdeps/unix/sysv/linux/hppa/ipc_priv.h: New file.
|
||||
|
@ -1398,6 +1398,7 @@ $(objpfx)tst-nodelete-dlclose: $(objpfx)tst-nodelete-dlclose-dso.so
|
||||
$(objpfx)tst-nodelete-dlclose.out: $(objpfx)tst-nodelete-dlclose-dso.so \
|
||||
$(objpfx)tst-nodelete-dlclose-plugin.so
|
||||
|
||||
tst-env-setuid-ENV = MALLOC_CHECK_=2 MALLOC_MMAP_THRESHOLD_=4096
|
||||
tst-env-setuid-ENV = MALLOC_CHECK_=2 MALLOC_MMAP_THRESHOLD_=4096 \
|
||||
LD_HWCAP_MASK=0xffffffff
|
||||
tst-env-setuid-tunables-ENV = \
|
||||
GLIBC_TUNABLES=glibc.malloc.check=2:glibc.malloc.mmap_threshold=4096
|
||||
|
@ -2404,7 +2404,8 @@ process_envvars (enum mode *modep)
|
||||
|
||||
case 10:
|
||||
/* Mask for the important hardware capabilities. */
|
||||
if (memcmp (envline, "HWCAP_MASK", 10) == 0)
|
||||
if (!__libc_enable_secure
|
||||
&& memcmp (envline, "HWCAP_MASK", 10) == 0)
|
||||
GLRO(dl_hwcap_mask) = __strtoul_internal (&envline[11], NULL,
|
||||
0, 0);
|
||||
break;
|
||||
|
@ -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
|
||||
|
@ -16,6 +16,7 @@
|
||||
"LD_DEBUG\0" \
|
||||
"LD_DEBUG_OUTPUT\0" \
|
||||
"LD_DYNAMIC_WEAK\0" \
|
||||
"LD_HWCAP_MASK\0" \
|
||||
"LD_LIBRARY_PATH\0" \
|
||||
"LD_ORIGIN_PATH\0" \
|
||||
"LD_PRELOAD\0" \
|
||||
|
Loading…
Reference in New Issue
Block a user