diff --git a/src/ldso/dynlink.c b/src/ldso/dynlink.c index 390f50ba..57a5ba46 100644 --- a/src/ldso/dynlink.c +++ b/src/ldso/dynlink.c @@ -482,13 +482,6 @@ void *__dynlink(int argc, char **argv, size_t *got) decode_vec(auxv, aux, AUX_CNT); - for (i=0; auxv[i]; i+=2) { - if (auxv[i]==AT_SYSINFO_EHDR) { - vdso_base = auxv[i+1]; - break; - } - } - /* Only trust user/env if kernel says we're not suid/sgid */ if ((aux[0]&0x7800)!=0x7800 || aux[AT_UID]!=aux[AT_EUID] || aux[AT_GID]!=aux[AT_EGID] || aux[AT_SECURE]) { @@ -496,6 +489,13 @@ void *__dynlink(int argc, char **argv, size_t *got) env_preload = 0; } + for (i=0; auxv[i]; i+=2) { + if (auxv[i]==AT_SYSINFO_EHDR) { + vdso_base = auxv[i+1]; + break; + } + } + /* Relocate ldso's DYNAMIC pointer and load vector */ decode_vec((void *)(got[0] += aux[AT_BASE]), lib_dyn, DYN_CNT);