From 0cdc5e930a95ca2ec3f2fd9327da93a2fbaf8e97 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 10 Apr 2016 23:58:43 +0200 Subject: [PATCH] Fix crash on getauxval call without HAVE_AUX_VECTOR * sysdeps/generic/ldsodefs.h (struct rtld_global_ro) [!HAVE_AUX_VECTOR]: Do not define _dl_auxv field. * misc/getauxval.c (__getauxval) [!HAVE_AUX_VECTOR]: Do not go through GLRO(dl_auxv) list. --- ChangeLog | 7 +++++++ misc/getauxval.c | 2 ++ sysdeps/generic/ldsodefs.h | 2 ++ 3 files changed, 11 insertions(+) diff --git a/ChangeLog b/ChangeLog index 7a20eb3e51..fc5ffd832d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2016-04-10 Samuel Thibault + + * sysdeps/generic/ldsodefs.h (struct rtld_global_ro) + [!HAVE_AUX_VECTOR]: Do not define _dl_auxv field. + * misc/getauxval.c (__getauxval) [!HAVE_AUX_VECTOR]: Do not go through + GLRO(dl_auxv) list. + 2016-04-09 Nick Alcock * elf/rtld-Rules (rtld-compile-command.c): Add $(rtld-CFLAGS). diff --git a/misc/getauxval.c b/misc/getauxval.c index e48f40f66d..61113766da 100644 --- a/misc/getauxval.c +++ b/misc/getauxval.c @@ -30,9 +30,11 @@ __getauxval (unsigned long int type) else if (type == AT_HWCAP2) return GLRO(dl_hwcap2); +#ifdef HAVE_AUX_VECTOR for (p = GLRO(dl_auxv); p->a_type != AT_NULL; p++) if (p->a_type == type) return p->a_un.a_val; +#endif __set_errno (ENOENT); return 0; diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 2733ac8268..ddec0be12c 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -509,8 +509,10 @@ struct rtld_global_ro /* Mask for important hardware capabilities we honour. */ EXTERN uint64_t _dl_hwcap_mask; +#ifdef HAVE_AUX_VECTOR /* Pointer to the auxv list supplied to the program at startup. */ EXTERN ElfW(auxv_t) *_dl_auxv; +#endif /* Get architecture specific definitions. */ #define PROCINFO_DECL -- 2.43.5