aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/s390
diff options
context:
space:
mode:
authorWilco Dijkstra <wilco.dijkstra@arm.com>2022-06-10 17:13:29 +0100
committerWilco Dijkstra <wdijkstr@arm.com>2022-06-10 17:13:29 +0100
commitfdaf78656fb6cc7caeb7b4e37068e8a8bf4dc639 (patch)
tree05302f7351e2b505af1d50d165bbbe371123d15d /sysdeps/s390
parentf107b7b30d815f191181617e2c14f21e6af4ddcf (diff)
downloadglibc-fdaf78656fb6cc7caeb7b4e37068e8a8bf4dc639.zip
glibc-fdaf78656fb6cc7caeb7b4e37068e8a8bf4dc639.tar.gz
glibc-fdaf78656fb6cc7caeb7b4e37068e8a8bf4dc639.tar.bz2
Add bounds check to __libc_ifunc_impl_list
Add a proper bounds check to __libc_ifunc_impl_list. This makes MAX_IFUNC redundant and fixes several targets that will write outside the array. To avoid unnecessary large diffs, pass the maximum in the argument 'i' to IFUNC_IMPL_ADD - 'max' can be used in new ifunc definitions and existing ones can be updated if desired. Passes buildmanyglibc. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Diffstat (limited to 'sysdeps/s390')
-rw-r--r--sysdeps/s390/multiarch/ifunc-impl-list.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/sysdeps/s390/multiarch/ifunc-impl-list.c b/sysdeps/s390/multiarch/ifunc-impl-list.c
index c1902b2..5d0c730 100644
--- a/sysdeps/s390/multiarch/ifunc-impl-list.c
+++ b/sysdeps/s390/multiarch/ifunc-impl-list.c
@@ -66,9 +66,6 @@
#include <ifunc-wmemset.h>
#include <ifunc-wmemcmp.h>
-/* Maximum number of IFUNC implementations. */
-#define MAX_IFUNC 3
-
/* Fill ARRAY of MAX elements with IFUNC implementations for function
NAME supported on target machine and return the number of valid
entries. */
@@ -76,9 +73,7 @@ size_t
__libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
size_t max)
{
- assert (max >= MAX_IFUNC);
-
- size_t i = 0;
+ size_t i = max;
/* Get hardware information. */
unsigned long int dl_hwcap = GLRO (dl_hwcap);
@@ -670,5 +665,5 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
)
#endif /* HAVE_WMEMCMP_IFUNC */
- return i;
+ return 0;
}