diff options
author | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2017-07-17 09:58:29 +0100 |
---|---|---|
committer | Szabolcs Nagy <szabolcs.nagy@arm.com> | 2017-07-18 10:34:20 +0100 |
commit | 00d7a3777369bac3d8d44152dde2bb7381984ef6 (patch) | |
tree | 40f88f33767e3ca382f3aa5800de8cd7bc155fb5 | |
parent | 91ac3a7d8474480685632cd25f844d3154c69fdf (diff) | |
download | glibc-00d7a3777369bac3d8d44152dde2bb7381984ef6.tar.gz glibc-00d7a3777369bac3d8d44152dde2bb7381984ef6.tar.xz glibc-00d7a3777369bac3d8d44152dde2bb7381984ef6.zip |
[AArch64] Fix out of bound array access regression
Partially revert ea01a4da219011f4a4db97eef3c5bfc2f6e8fc6b "aarch64: Add hwcap string routines" because _dl_procinfo cannot be future proof and avoid oob access in _dl_hwcap_string.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h | 38 |
2 files changed, 13 insertions, 30 deletions
diff --git a/ChangeLog b/ChangeLog index baf85432cb..5944df03fc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-07-18 Szabolcs Nagy <szabolcs.nagy@arm.com> + + * sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h (_dl_procinfo): Revert. + (_dl_hwcap_string): Check range. + 2017-07-17 Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com> [BZ #21707] diff --git a/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h b/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h index 04fc6be0a3..44dc296d3e 100644 --- a/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h +++ b/sysdeps/unix/sysv/linux/aarch64/dl-procinfo.h @@ -25,36 +25,7 @@ #include <sysdep.h> /* We cannot provide a general printing function. */ -static inline int -__attribute__ ((unused)) -_dl_procinfo (unsigned int type, unsigned long int word) -{ - /* This table should match the information from arch/arm64/kernel/cpuinfo.c - in the kernel sources. */ - int i; - - /* Fallback to unknown output mechanism. */ - if (type == AT_HWCAP2) - return -1; - - _dl_printf ("AT_HWCAP: "); - - for (i = 0; i < 32; ++i) - if ((word >> i) & 1) - _dl_printf (" %s", GLRO(dl_aarch64_cap_flags)[i]); - - _dl_printf ("\n"); - - return 0; -} - -static inline const char * -__attribute__ ((unused)) -_dl_hwcap_string (int idx) -{ - return GLRO(dl_aarch64_cap_flags)[idx]; -}; - +#define _dl_procinfo(type, word) -1 /* Number of HWCAP bits set. */ #define _DL_HWCAP_COUNT 13 @@ -66,6 +37,13 @@ _dl_hwcap_string (int idx) library search. */ #define HWCAP_IMPORTANT HWCAP_CPUID +static inline const char * +__attribute__ ((unused)) +_dl_hwcap_string (int idx) +{ + return (unsigned)idx < _DL_HWCAP_COUNT ? GLRO(dl_aarch64_cap_flags)[idx] : ""; +}; + static inline int __attribute__ ((unused)) _dl_string_hwcap (const char *str) |