@@ -142,15 +142,13 @@ __crypt_r (const char *key, const char *salt,
*/
_ufc_output_conversion_r (res[0], res[1], salt, data);
-#ifdef _LIBC
/*
* Erase key-dependent intermediate data. Data dependent only on
* the salt is not considered sensitive.
*/
- __explicit_bzero (ktab, sizeof (ktab));
- __explicit_bzero (data->keysched, sizeof (data->keysched));
- __explicit_bzero (res, sizeof (res));
-#endif
+ explicit_bzero (ktab, sizeof (ktab));
+ explicit_bzero (data->keysched, sizeof (data->keysched));
+ explicit_bzero (res, sizeof (res));
return data->crypt_3_buf;
}
@@ -288,13 +288,13 @@ __md5_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
#ifndef USE_NSS
__md5_init_ctx (&ctx);
__md5_finish_ctx (&ctx, alt_result);
- __explicit_bzero (&ctx, sizeof (ctx));
- __explicit_bzero (&alt_ctx, sizeof (alt_ctx));
+ explicit_bzero (&ctx, sizeof (ctx));
+ explicit_bzero (&alt_ctx, sizeof (alt_ctx));
#endif
if (copied_key != NULL)
- __explicit_bzero (copied_key, key_len);
+ explicit_bzero (copied_key, key_len);
if (copied_salt != NULL)
- __explicit_bzero (copied_salt, salt_len);
+ explicit_bzero (copied_salt, salt_len);
free (free_key);
return buffer;
@@ -371,16 +371,16 @@ __sha256_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
#ifndef USE_NSS
__sha256_init_ctx (&ctx);
__sha256_finish_ctx (&ctx, alt_result);
- __explicit_bzero (&ctx, sizeof (ctx));
- __explicit_bzero (&alt_ctx, sizeof (alt_ctx));
+ explicit_bzero (&ctx, sizeof (ctx));
+ explicit_bzero (&alt_ctx, sizeof (alt_ctx));
#endif
- __explicit_bzero (temp_result, sizeof (temp_result));
- __explicit_bzero (p_bytes, key_len);
- __explicit_bzero (s_bytes, salt_len);
+ explicit_bzero (temp_result, sizeof (temp_result));
+ explicit_bzero (p_bytes, key_len);
+ explicit_bzero (s_bytes, salt_len);
if (copied_key != NULL)
- __explicit_bzero (copied_key, key_len);
+ explicit_bzero (copied_key, key_len);
if (copied_salt != NULL)
- __explicit_bzero (copied_salt, salt_len);
+ explicit_bzero (copied_salt, salt_len);
free (free_key);
free (free_pbytes);
@@ -393,16 +393,16 @@ __sha512_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
#ifndef USE_NSS
__sha512_init_ctx (&ctx);
__sha512_finish_ctx (&ctx, alt_result);
- __explicit_bzero (&ctx, sizeof (ctx));
- __explicit_bzero (&alt_ctx, sizeof (alt_ctx));
+ explicit_bzero (&ctx, sizeof (ctx));
+ explicit_bzero (&alt_ctx, sizeof (alt_ctx));
#endif
- __explicit_bzero (temp_result, sizeof (temp_result));
- __explicit_bzero (p_bytes, key_len);
- __explicit_bzero (s_bytes, salt_len);
+ explicit_bzero (temp_result, sizeof (temp_result));
+ explicit_bzero (p_bytes, key_len);
+ explicit_bzero (s_bytes, salt_len);
if (copied_key != NULL)
- __explicit_bzero (copied_key, key_len);
+ explicit_bzero (copied_key, key_len);
if (copied_salt != NULL)
- __explicit_bzero (copied_salt, salt_len);
+ explicit_bzero (copied_salt, salt_len);
free (free_key);
free (free_pbytes);
@@ -48,6 +48,7 @@ routines = backtrace backtracesyms backtracesymsfd noophooks \
vdprintf_chk obprintf_chk \
longjmp_chk ____longjmp_chk \
fdelt_chk poll_chk ppoll_chk \
+ explicit_bzero_chk \
stack_chk_fail fortify_fail \
$(static-only-routines)
static-only-routines := warning-nop stack_chk_fail_local
@@ -55,6 +55,9 @@ libc {
GLIBC_2.16 {
__poll_chk; __ppoll_chk;
}
+ GLIBC_2.25 {
+ __explicit_bzero_chk;
+ }
GLIBC_PRIVATE {
__fortify_fail;
}
new file mode 100644
@@ -0,0 +1,44 @@
+/* Generic implementation of __explicit_bzero_chk.
+ Copyright (C) 1991-2016 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Torbjorn Granlund (tege@sics.se).
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+/* This is the generic definition of __explicit_bzero_chk. The
+ __explicit_bzero_chk symbol is used as the implementation of
+ explicit_bzero throughout glibc. If this file is overriden by an
+ architecture, both __explicit_bzero_chk and
+ __explicit_bzero_chk_internal have to be defined (the latter not as
+ an IFUNC). */
+
+#include <string.h>
+
+void
+__explicit_bzero_chk (void *dst, size_t len, size_t dstlen)
+{
+ /* Inline __memset_chk to avoid a PLT reference to __memset_chk. */
+ if (__glibc_unlikely (dstlen < len))
+ __chk_fail ();
+ memset (dst, '\0', len);
+ /* Compiler barrier. */
+ asm volatile ("" ::: "memory");
+}
+
+/* libc-internal references use the hidden
+ __explicit_bzero_chk_internal symbol. This is necessary if
+ __explicit_bzero_chk is implemented as an IFUNC because some
+ targets do not support hidden references to IFUNC symbols. */
+strong_alias (__explicit_bzero_chk, __explicit_bzero_chk_internal)
@@ -100,20 +100,15 @@ extern __typeof (memmem) __memmem;
libc_hidden_proto (__memmem)
libc_hidden_proto (__ffs)
-/* explicit_bzero is used in libcrypt. */
-extern __typeof (explicit_bzero) __explicit_bzero;
-extern __typeof (explicit_bzero) __internal_explicit_bzero;
-libc_hidden_proto (__internal_explicit_bzero)
-extern __typeof (__glibc_read_memory) __internal_glibc_read_memory;
-libc_hidden_proto (__internal_glibc_read_memory)
-/* Honor string.h inlines when present. */
-#if __GNUC_PREREQ (3,4) \
- && ((defined __extern_always_inline \
- && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ \
- && !defined __NO_INLINE__ && !defined __NO_STRING_INLINES) \
- || (__USE_FORTIFY_LEVEL > 0 && defined __fortify_function))
-# define __explicit_bzero(s,n) explicit_bzero (s,n)
-# define __internal_explicit_bzero(s,n) explicit_bzero (s,n)
+#if IS_IN (libc)
+/* Avoid hidden reference to IFUNC symbol __explicit_bzero_chk. */
+void __explicit_bzero_chk_internal (void *, size_t, size_t)
+ __THROW __nonnull ((1)) attribute_hidden;
+# define explicit_bzero(buf, len) \
+ __explicit_bzero_chk_internal (buf, len, __bos0 (buf))
+#elif !IS_IN (nonlib)
+void __explicit_bzero_chk (void *, size_t, size_t) __THROW __nonnull ((1));
+# define explicit_bzero(buf, len) __explicit_bzero_chk (buf, len, __bos0 (buf))
#endif
libc_hidden_builtin_proto (memchr)
@@ -43,11 +43,6 @@ routines := strcat strchr strcmp strcoll strcpy strcspn \
strcoll_l strxfrm_l string-inlines memrchr \
xpg-strerror strerror_l explicit_bzero
-# Attention future hackers trying to enable link-time optimization for
-# glibc: this file *must not* be subject to LTO. It is added separately
-# to 'routines' to document this. See comments in this file for details.
-routines += read_memory
-
strop-tests := memchr memcmp memcpy memmove mempcpy memset memccpy \
stpcpy stpncpy strcat strchr strcmp strcpy strcspn \
strlen strncmp strncpy strpbrk strrchr strspn memmem \
@@ -83,14 +83,6 @@ libc {
GLIBC_2.24 {
}
GLIBC_2.25 {
- # used by inlines in string.h and bits/string3.h
- __glibc_read_memory;
-
- # e*
explicit_bzero;
}
- GLIBC_PRIVATE {
- # used by libcrypt
- __explicit_bzero;
- }
}
@@ -103,11 +103,13 @@ __NTH (bzero (void *__dest, size_t __len))
(void) __builtin___memset_chk (__dest, '\0', __len, __bos0 (__dest));
}
+void __explicit_bzero_chk (void *__dest, size_t __len, size_t __destlen)
+ __THROW __nonnull ((1));
+
__fortify_function void
__NTH (explicit_bzero (void *__dest, size_t __len))
{
- (void) __builtin___memset_chk (__dest, '\0', __len, __bos0 (__dest));
- __glibc_read_memory (__dest, __len);
+ __explicit_bzero_chk (__dest, __len, __bos0 (__dest));
}
#endif
@@ -1,4 +1,4 @@
-/* Erasure of sensitive data.
+/* Erasure of sensitive data, generic implementation.
Copyright (C) 2016 Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -16,19 +16,23 @@
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
-#include <features.h>
-#undef __USE_STRING_INLINES
-#define __NO_STRING_INLINES
+/* An assembler implementation of explicit_bzero can be created as an
+ assembler alias of an optimized bzero implementation.
+ Architecture-specific implementations also need to define
+ __explicit_bzero_chk. */
+
#include <string.h>
+/* glibc-internal users use __explicit_bzero_chk, and explicit_bzero
+ redirects to that. */
+#undef explicit_bzero
+
/* Set LEN bytes of S to 0. The compiler will not delete a call to
this function, even if S is dead after the call. */
void
-__internal_explicit_bzero (void *s, size_t len)
+explicit_bzero (void *s, size_t len)
{
memset (s, '\0', len);
- __internal_glibc_read_memory (s, len);
+ /* Compiler barrier. */
+ asm volatile ("" ::: "memory");
}
-libc_hidden_def (__internal_explicit_bzero)
-strong_alias (__internal_explicit_bzero, __explicit_bzero)
-weak_alias (__internal_explicit_bzero, explicit_bzero)
deleted file mode 100644
@@ -1,47 +0,0 @@
-/* "Read" a range of memory, from the caller's perspective.
- Copyright (C) 2016 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
-
-#include <string.h>
-
-/* This function is an optimization fence. It doesn't do anything,
- but the compiler doesn't know that, and must assume that it reads
- the block of memory pointed to by S and extending for LEN bytes.
- This prevents any earlier write to that memory from being optimized
- away. For instance, explicit_bzero uses this function to ensure
- that its erasure of a piece of sensitive data is preserved.
-
- In order to achieve the desired effect, this function must never,
- under any circumstances, be inlined or subjected to inter-
- procedural optimization. string.h declares this function with
- attributes that, in conjunction with the no-op asm insert, are
- sufficient to prevent problems in the current (2016) generation of
- compilers, but *only if* this file is *not* compiled with -flto.
- At present, this is not an issue since glibc is never compiled with
- -flto, but should that ever change, this file must be excepted.
-
- The 'volatile' below is technically not necessary but is included
- for explicitness. */
-
-void
-internal_function
-__internal_glibc_read_memory(const void *s, size_t len)
-{
- asm volatile ("");
-}
-libc_hidden_def (__internal_glibc_read_memory)
-strong_alias (__internal_glibc_read_memory, __glibc_read_memory)
@@ -457,24 +457,6 @@ extern void bzero (void *__s, size_t __n) __THROW __nonnull ((1));
function, even if S is dead after the call. */
extern void explicit_bzero (void *__s, size_t __n) __THROW __nonnull ((1));
-/* Optimization fence, used by the inline versions of explicit_bzero
- below and in bits/string3.h. */
-extern void __glibc_read_memory (const void *__s, size_t __n)
- __THROW __nonnull ((1)) __attribute_noinline__;
-
-# if __GNUC_PREREQ (3,4) && defined __extern_always_inline \
- && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ \
- && !defined __NO_INLINE__ && !defined __NO_STRING_INLINES \
- && (__USE_FORTIFY_LEVEL == 0 || !defined __fortify_function)
-
-__extern_always_inline void
-__NTH (explicit_bzero (void *__s, size_t __n))
-{
- memset (__s, '\0', __n);
- __glibc_read_memory (__s, __n);
-}
-# endif
-
/* Compare N bytes of S1 and S2 (same as memcmp). */
extern int bcmp (const void *__s1, const void *__s2, size_t __n)
__THROW __attribute_pure__ __nonnull ((1, 2));
@@ -36,10 +36,7 @@
This implementation instead uses the <ucontext.h> coroutine
interface. The coroutine stack is still too small to safely use
printf, but we know the OS won't erase it, so we can do all the
- checks and printing from the normal stack.
-
- If this test begins to fail with a new compiler, investigate
- whether __glibc_read_memory is still doing its job. */
+ checks and printing from the normal stack. */
#define _GNU_SOURCE 1
@@ -1843,7 +1843,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -2090,7 +2090,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -2001,7 +2001,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -91,7 +91,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1855,7 +1855,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -2013,7 +2013,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1877,7 +1877,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -92,7 +92,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1969,7 +1969,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -2090,7 +2090,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1944,7 +1944,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1942,7 +1942,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1940,7 +1940,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1935,7 +1935,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -2131,7 +2131,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1973,7 +1973,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1978,7 +1978,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -2178,7 +2178,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -92,7 +92,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1973,7 +1973,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1874,7 +1874,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1859,7 +1859,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1965,7 +1965,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1903,7 +1903,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -2097,7 +2097,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -2097,7 +2097,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -2097,7 +2097,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -1854,7 +1854,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F
@@ -2097,7 +2097,7 @@ GLIBC_2.23 fts64_set F
GLIBC_2.24 GLIBC_2.24 A
GLIBC_2.24 quick_exit F
GLIBC_2.25 GLIBC_2.25 A
-GLIBC_2.25 __glibc_read_memory F
+GLIBC_2.25 __explicit_bzero_chk F
GLIBC_2.25 explicit_bzero F
GLIBC_2.25 getentropy F
GLIBC_2.25 getrandom F