diff options
author | Florian Weimer <fweimer@redhat.com> | 2015-10-15 09:23:07 +0200 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2015-10-16 11:40:14 -0400 |
commit | dc22a1ec157d02529a0b17986679d3f1c122985e (patch) | |
tree | d367887d4c12854d778502d0460eae04b47dd545 | |
parent | 2b529a82afc15a76185fca16ba7bcc8fbd82d15d (diff) | |
download | glibc-dc22a1ec157d02529a0b17986679d3f1c122985e.tar.gz glibc-dc22a1ec157d02529a0b17986679d3f1c122985e.tar.xz glibc-dc22a1ec157d02529a0b17986679d3f1c122985e.zip |
Always enable pointer guard [BZ #18928]
Honoring the LD_POINTER_GUARD environment variable in AT_SECURE mode has security implications. This commit enables pointer guard unconditionally, and the environment variable is now ignored. [BZ #18928] * sysdeps/generic/ldsodefs.h (struct rtld_global_ro): Remove _dl_pointer_guard member. * elf/rtld.c (_rtld_global_ro): Remove _dl_pointer_guard initializer. (security_init): Always set up pointer guard. (process_envvars): Do not process LD_POINTER_GUARD. (cherry picked from commit a014cecd82b71b70a6a843e250e06b541ad524f7)
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | elf/rtld.c | 15 | ||||
-rw-r--r-- | sysdeps/generic/ldsodefs.h | 3 |
4 files changed, 18 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog index 491d5c7634..d0d2f56bf8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2015-10-15 Florian Weimer <fweimer@redhat.com> + + [BZ #18928] + * sysdeps/generic/ldsodefs.h (struct rtld_global_ro): Remove + _dl_pointer_guard member. + * elf/rtld.c (_rtld_global_ro): Remove _dl_pointer_guard + initializer. + (security_init): Always set up pointer guard. + (process_envvars): Do not process LD_POINTER_GUARD. + 2015-10-09 Carlos O'Donell <carlos@redhat.com> [BZ #18589] diff --git a/NEWS b/NEWS index 9b10bffa9a..fa6f58d17e 100644 --- a/NEWS +++ b/NEWS @@ -9,7 +9,10 @@ Version 2.22.1 * The following bugs are resolved with this release: - 18589, 18778, 18781, 18787, 18796, 18870, 18887, 18921, 18969. + 18589, 18778, 18781, 18787, 18796, 18870, 18887, 18921, 18928, 18969. + +* The LD_POINTER_GUARD environment variable can no longer be used to + disable the pointer guard feature. It is always enabled. Version 2.22 diff --git a/elf/rtld.c b/elf/rtld.c index 69873c2368..07e741cfa7 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -162,7 +162,6 @@ struct rtld_global_ro _rtld_global_ro attribute_relro = ._dl_hwcap_mask = HWCAP_IMPORTANT, ._dl_lazy = 1, ._dl_fpu_control = _FPU_DEFAULT, - ._dl_pointer_guard = 1, ._dl_pagesize = EXEC_PAGESIZE, ._dl_inhibit_cache = 0, @@ -709,15 +708,12 @@ security_init (void) #endif /* Set up the pointer guard as well, if necessary. */ - if (GLRO(dl_pointer_guard)) - { - uintptr_t pointer_chk_guard = _dl_setup_pointer_guard (_dl_random, - stack_chk_guard); + uintptr_t pointer_chk_guard + = _dl_setup_pointer_guard (_dl_random, stack_chk_guard); #ifdef THREAD_SET_POINTER_GUARD - THREAD_SET_POINTER_GUARD (pointer_chk_guard); + THREAD_SET_POINTER_GUARD (pointer_chk_guard); #endif - __pointer_chk_guard_local = pointer_chk_guard; - } + __pointer_chk_guard_local = pointer_chk_guard; /* We do not need the _dl_random value anymore. The less information we leave behind, the better, so clear the @@ -2471,9 +2467,6 @@ process_envvars (enum mode *modep) GLRO(dl_use_load_bias) = envline[14] == '1' ? -1 : 0; break; } - - if (memcmp (envline, "POINTER_GUARD", 13) == 0) - GLRO(dl_pointer_guard) = envline[14] != '0'; break; case 14: diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 7a0fe8dbe4..78e3a97c06 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -592,9 +592,6 @@ struct rtld_global_ro /* List of auditing interfaces. */ struct audit_ifaces *_dl_audit; unsigned int _dl_naudit; - - /* 0 if internal pointer values should not be guarded, 1 if they should. */ - EXTERN int _dl_pointer_guard; }; # define __rtld_global_attribute__ # if IS_IN (rtld) |