This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH committed][AArch64] Fix out of bound array access regression
- From: Szabolcs Nagy <szabolcs dot nagy at arm dot com>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Cc: nd at arm dot com
- Date: Tue, 18 Jul 2017 10:37:23 +0100
- Subject: [PATCH committed][AArch64] Fix out of bound array access regression
- Authentication-results: sourceware.org; auth=none
- Authentication-results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=arm.com;
- Nodisclaimer: True
- Spamdiagnosticmetadata: NSPM
- Spamdiagnosticoutput: 1:99
Partially revert ea01a4da219011f4a4db97eef3c5bfc2f6e8fc6b
"aarch64: Add hwcap string routines" because _dl_procinfo cannot
be future proof and avoid oob access in _dl_hwcap_string.
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.
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)