diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-05-06 06:34:21 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-05-06 06:34:21 +0000 |
commit | be4d80380a87ab758aecb4e25695b264d36156da (patch) | |
tree | 1eff92d850952d6f9ff8e6e9a1aea83022783092 /elf | |
parent | 9946f75ad4b3183a09c3f3ff1c3554613fb4f485 (diff) | |
download | glibc-be4d80380a87ab758aecb4e25695b264d36156da.tar.gz |
Update.
* sysdeps/generic/enbl-secure.c (__libc_enable_secure_decided): New
variable.
(__libc_init_secure): Don't do anything if __libc_enable_secure_decided
is nonzero.
* include/unistd.h: Declare __libc_enable_secure_decided.
* elf/dl-support.c (_dl_aux_init): Recognize AT_UID, AT_EUID, AT_GID,
and AT_EGID. If all found, set __libc_enable_secure and
__libc_enable_secure_decided.
Diffstat (limited to 'elf')
-rw-r--r-- | elf/dl-support.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/elf/dl-support.c b/elf/dl-support.c index 2ff3d2f905..0d6ce6a12b 100644 --- a/elf/dl-support.c +++ b/elf/dl-support.c @@ -148,6 +148,10 @@ void internal_function _dl_aux_init (ElfW(auxv_t) *av) { + int seen = 0; + uid_t uid = 0; + gid_t gid = 0; + for (; av->a_type != AT_NULL; ++av) switch (av->a_type) { @@ -168,7 +172,28 @@ _dl_aux_init (ElfW(auxv_t) *av) GL(dl_sysinfo) = av->a_un.a_val; break; #endif + case AT_UID: + uid ^= av->a_un.a_val; + seen |= 1; + break; + case AT_EUID: + uid ^= av->a_un.a_val; + seen |= 2; + break; + case AT_GID: + gid ^= av->a_un.a_val; + seen |= 4; + break; + case AT_EGID: + gid ^= av->a_un.a_val; + seen |= 8; + break; } + if (seen == 0xf) + { + __libc_enable_secure = uid != 0 || gid != 0; + __libc_enable_secure_decided = 1; + } } #endif |