]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Implement C23 memset_explicit (bug 32378)
authorJoseph Myers <josmyers@redhat.com>
Wed, 1 Oct 2025 15:14:09 +0000 (15:14 +0000)
committerJoseph Myers <josmyers@redhat.com>
Wed, 1 Oct 2025 15:14:09 +0000 (15:14 +0000)
Add the C23 memset_explicit function to glibc.  Everything here is
closely based on the approach taken for explicit_bzero.  This includes
the bits that relate to internal uses of explicit_bzero within glibc
(although we don't currently have any such internal uses of
memset_explicit), and also includes the nonnull attribute (when we
move to nonnull_if_nonzero for various functions following C2y, this
function should be included in that change).

The function is declared both for __USE_MISC and for __GLIBC_USE (ISOC23)
(so by default not just for compilers defaulting to C23 mode).

Tested for x86_64 and x86.

51 files changed:
NEWS
debug/Makefile
debug/Versions
debug/memset_explicit_chk.c [new file with mode: 0644]
debug/tst-fortify.c
include/string.h
manual/maint.texi
manual/string.texi
string/Makefile
string/Versions
string/bits/string_fortified.h
string/memset_explicit.c [new file with mode: 0644]
string/string.h
string/test-memset.c
string/test-memset_explicit.c [new file with mode: 0644]
string/tst-xbzero-opt.c
string/tst-xmemset-opt.c [new file with mode: 0644]
sysdeps/mach/hurd/i386/libc.abilist
sysdeps/mach/hurd/x86_64/libc.abilist
sysdeps/unix/sysv/linux/aarch64/libc.abilist
sysdeps/unix/sysv/linux/alpha/libc.abilist
sysdeps/unix/sysv/linux/arc/libc.abilist
sysdeps/unix/sysv/linux/arm/be/libc.abilist
sysdeps/unix/sysv/linux/arm/le/libc.abilist
sysdeps/unix/sysv/linux/csky/libc.abilist
sysdeps/unix/sysv/linux/hppa/libc.abilist
sysdeps/unix/sysv/linux/i386/libc.abilist
sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
sysdeps/unix/sysv/linux/or1k/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
sysdeps/unix/sysv/linux/sh/be/libc.abilist
sysdeps/unix/sysv/linux/sh/le/libc.abilist
sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist

diff --git a/NEWS b/NEWS
index 9831f7f5d460f53773b4b25512c38c7b883e889f..8a5c197d42e8fcf90e0ffc1e64226b288d7ae925 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -9,7 +9,7 @@ Version 2.43
 
 Major new features:
 
-  [Add new features here]
+* The ISO C23 memset_explicit function has been added.
 
 Deprecated and removed features, and other changes affecting compatibility:
 
index 4f7ac04ffac0fefd21f7db3320d64fd660c3964e..dbb8c53890f39547c821639cb1e58ec333fbd293 100644 (file)
@@ -65,6 +65,7 @@ routines = \
   memmove_chk \
   mempcpy_chk \
   memset_chk \
+  memset_explicit_chk \
   noophooks \
   obprintf_chk \
   poll_chk \
index 6b9ec1eb463c7db457132afbe2054a79d2fb4e59..fc818d29aa75c2f79504e8603c4616132586d82d 100644 (file)
@@ -68,6 +68,9 @@ libc {
     __inet_ntop_chk;
     __inet_pton_chk;
   }
+  GLIBC_2.43 {
+    __memset_explicit_chk;
+  }
   GLIBC_PRIVATE {
     __fortify_fail;
   }
diff --git a/debug/memset_explicit_chk.c b/debug/memset_explicit_chk.c
new file mode 100644 (file)
index 0000000..0ffbf2b
--- /dev/null
@@ -0,0 +1,44 @@
+/* Generic implementation of __memset_explicit_chk.
+   Copyright (C) 1991-2025 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
+   <https://www.gnu.org/licenses/>.  */
+
+/* This is the generic definition of __memset_explicit_chk.  The
+   __memset_explicit_chk symbol is used as the implementation of
+   memset_explicit throughout glibc.  If this file is overridden by an
+   architecture, both __memset_explicit_chk and
+   __memset_explicit_chk_internal have to be defined (the latter not as
+   an IFUNC).  */
+
+#include <string.h>
+
+void *
+__memset_explicit_chk (void *dst, int c, 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, c, len);
+  /* Compiler barrier.  */
+  asm volatile ("" ::: "memory");
+  return dst;
+}
+
+/* libc-internal references use the hidden
+   __memset_explicit_chk_internal symbol.  This is necessary if
+   __memset_explicit_chk is implemented as an IFUNC because some
+   targets do not support hidden references to IFUNC symbols.  */
+strong_alias (__memset_explicit_chk, __memset_explicit_chk_internal)
index c4c28e6e1313742d3b854aa9ffdf9c5488ef09e1..fd06b296764f341effa73d07798d5196220c3013 100644 (file)
@@ -201,6 +201,10 @@ do_test (void)
   if (memcmp (buf, "aabcda\0\0\0\0", 10))
     FAIL ();
 
+  memset_explicit (buf + 5, 0x1234, 3);
+  if (memcmp (buf, "aabcd444\0\0", 10))
+    FAIL ();
+
   strcpy (buf + 4, "EDCBA");
   if (memcmp (buf, "aabcEDCBA", 10))
     FAIL ();
@@ -246,6 +250,10 @@ do_test (void)
   if (memcmp (buf, "aabcda\0\0\0\0", 10))
     FAIL ();
 
+  memset_explicit (buf + 5, 0x1234, l0 + 3);
+  if (memcmp (buf, "aabcd444\0\0", 10))
+    FAIL ();
+
   strcpy (buf + 4, str1 + 5);
   if (memcmp (buf, "aabcEDCBA", 10))
     FAIL ();
@@ -306,6 +314,10 @@ do_test (void)
   if (memcmp (a.buf1, "aabcda\0\0\0\0", 10))
     FAIL ();
 
+  memset_explicit (a.buf1 + 5, 0x1234, l0 + 3);
+  if (memcmp (a.buf1, "aabcd444\0\0", 10))
+    FAIL ();
+
 #if __USE_FORTIFY_LEVEL < 2
   /* The following tests are supposed to crash with -D_FORTIFY_SOURCE=2
      and sufficient GCC support, as the string operations overflow
@@ -405,6 +417,14 @@ do_test (void)
   explicit_bzero (buf + 9, l0 + 2);
   CHK_FAIL_END
 
+  CHK_FAIL_START
+  memset_explicit (buf + 9, 1, 2);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  memset_explicit (buf + 9, 4, l0 + 2);
+  CHK_FAIL_END
+
   CHK_FAIL_START
   strcpy (buf + 5, str1 + 5);
   CHK_FAIL_END
@@ -522,6 +542,14 @@ do_test (void)
   explicit_bzero (a.buf1 + 9, l0 + 2);
   CHK_FAIL_END
 
+  CHK_FAIL_START
+  memset_explicit (a.buf1 + 9, 0, 2);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  memset_explicit (a.buf1 + 9, 128, l0 + 2);
+  CHK_FAIL_END
+
 # if __USE_FORTIFY_LEVEL >= 2
 #  define O 0
 # else
index b9c41b0eea8c86e8ab4ca35f9ccb732d36575e59..c26ca0927ca7b5dcda935f6e5bce5a495ed78e96 100644 (file)
@@ -128,10 +128,19 @@ 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, __glibc_objsize0 (buf))
+/* Avoid hidden reference to IFUNC symbol __memset_explicit_chk.  */
+void *__memset_explicit_chk_internal (void *, int, size_t, size_t)
+  __THROW __nonnull ((1)) attribute_hidden;
+# define memset_explicit(buf, c, len)                                  \
+  __memset_explicit_chk_internal (buf, c, len, __glibc_objsize0 (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,            \
                                                        __glibc_objsize0 (buf))
+void *__memset_explicit_chk (void *, int, size_t, size_t)
+  __THROW __nonnull ((1));
+# define memset_explicit(buf, c, len)                          \
+  __memset_explicit_chk (buf, c, len, __glibc_objsize0 (buf))
 #endif
 
 libc_hidden_builtin_proto (memchr)
index 58479ec723d6828007c3a601a62342624f1672e1..2d540ced9b691dfecbc0d105bf171f4473264f10 100644 (file)
@@ -323,6 +323,8 @@ The following functions and macros are fortified in @theglibc{}:
 
 @item @code{memset}
 
+@item @code{memset_explicit}
+
 @item @code{mq_open}
 
 @item @code{obstack_printf}
index feba0b7ae38791312a21e140dda848ee08e22050..85318973d88f17bb7d57204e2757e839d566750c 100644 (file)
@@ -2436,8 +2436,8 @@ heap object containing the sensitive data after it's deallocated.
 Since erasure is a precaution against bugs, this optimization is
 inappropriate.
 
-The function @code{explicit_bzero} erases a block of memory, and
-guarantees that the compiler will not remove the erasure as
+The functions @code{explicit_bzero} and @code{memset_explicit} erase a
+block of memory, and guarantee that the compiler will not remove the erasure as
 ``unnecessary.''
 
 @smallexample
@@ -2463,16 +2463,18 @@ void encrypt_with_phrase (const char *phrase, const char *in,
 In this example, if @code{memset}, @code{bzero}, or a hand-written
 loop had been used, the compiler might remove them as ``unnecessary.''
 
-@strong{Warning:} @code{explicit_bzero} does not guarantee that
+@strong{Warning:} @code{explicit_bzero} and @code{memset_explicit} do
+not guarantee that
 sensitive data is @emph{completely} erased from the computer's memory.
 There may be copies in temporary storage areas, such as registers and
 ``scratch'' stack space; since these are invisible to the source code,
 a library function cannot erase them.
 
-Also, @code{explicit_bzero} only operates on RAM.  If a sensitive data
-object never needs to have its address taken other than to call
-@code{explicit_bzero}, it might be stored entirely in CPU registers
-@emph{until} the call to @code{explicit_bzero}.  Then it will be
+Also, @code{explicit_bzero} and @code{memset_explicit} only operate on
+RAM.  If a sensitive data object never needs to have its address taken
+other than to call @code{explicit_bzero} or @code{memset_explicit}, it
+might be stored entirely in CPU registers @emph{until} the call to
+@code{explicit_bzero} or @code{memset_explicit}.  Then it will be
 copied into RAM, the copy will be erased, and the original will remain
 intact.  Data in RAM is more likely to be exposed by a bug than data
 in registers, so this creates a brief window where the data is at
@@ -2489,10 +2491,12 @@ variable itself is not @code{volatile}, some compilers will ignore the
 qualification on the pointer and remove the erasure anyway.
 
 Having said all that, in most situations, using @code{explicit_bzero}
+or @code{memset_explicit}
 is better than not using it.  At present, the only way to do a more
 thorough job is to write the entire sensitive operation in assembly
 language.  We anticipate that future compilers will recognize calls to
-@code{explicit_bzero} and take appropriate steps to erase all the
+@code{explicit_bzero} or @code{memset_explicit} and take appropriate
+steps to erase all the
 copies of the affected data, wherever they may be.
 
 @deftypefun void explicit_bzero (void *@var{block}, size_t @var{len})
@@ -2520,6 +2524,25 @@ functionality under a different name, such as @code{explicit_memset},
 systems it may be in @file{strings.h} instead.
 @end deftypefun
 
+@deftypefun {void *} memset_explicit (void *@var{block}, int @var{c}, size_t @var{size})
+@standards{C23, string.h}
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+
+This function copies the value of @var{c} (converted to an
+@code{unsigned char}) into each of the first @var{size} bytes of the
+object beginning at @var{block}, just as @code{memset} would.  It
+returns the value of @var{block}.  The bytes are always written, even
+if the compiler could determine that this is ``unnecessary'' because
+no correct program could read them back.
+
+@strong{Note:} The @emph{only} optimization that @code{memset_explicit}
+disables is removal of ``unnecessary'' writes to memory.  The compiler
+can perform all the other optimizations that it could for a call to
+@code{memset}.  For instance, it may replace the function call with
+inline memory writes, and it may assume that @var{block} cannot be a
+null pointer.
+@end deftypefun
+
 
 @node Shuffling Bytes
 @section Shuffling Bytes
index c83b195e2ec104948ed0a9f56a576f41401e749d..d842ae04570b88750c7f898b1c9bad04e1c41796 100644 (file)
@@ -69,6 +69,7 @@ routines := \
   mempcpy \
   memrchr \
   memset \
+  memset_explicit \
   rawmemchr \
   sigabbrev_np \
   sigdescr_np \
@@ -125,6 +126,7 @@ routines_no_fortify += \
   memmove \
   mempcpy \
   memset \
+  memset_explicit \
   stpcpy \
   stpncpy \
   strcat \
@@ -164,6 +166,7 @@ tests := \
   test-mempcpy \
   test-memrchr \
   test-memset \
+  test-memset_explicit \
   test-rawmemchr \
   test-sig_np \
   test-stpcpy \
@@ -210,6 +213,7 @@ tests := \
   tst-svc \
   tst-svc2 \
   tst-xbzero-opt \
+  tst-xmemset-opt \
 # tests
 
 tests-static-internal := \
@@ -262,6 +266,7 @@ CFLAGS-stratcliff.c += -fno-builtin
 CFLAGS-test-ffs.c += -fno-builtin
 CFLAGS-tst-inlcall.c += -fno-builtin
 CFLAGS-tst-xbzero-opt.c += -O3
+CFLAGS-tst-xmemset-opt.c += -O3
 CFLAGS-test-endian-sign-conversion.c += -Werror -Wsign-conversion
 # BZ 21006: Resolve all functions but at least explicit_bzero at startup.
 # Otherwise the test fails on s390x as the memcpy in prepare_test_buffer is
@@ -271,6 +276,7 @@ CFLAGS-test-endian-sign-conversion.c += -Werror -Wsign-conversion
 # and the call to memmem in count_test_patterns will find a hit of the
 # test_pattern on the stack.
 LDFLAGS-tst-xbzero-opt = -z now
+LDFLAGS-tst-xmemset-opt = -z now
 
 # Called during TLS initialization.
 CFLAGS-memcpy.c += $(no-stack-protector)
index c56e372a3c845010bc9db077d1f28fa78d0c1c1a..5a63f5ced3077fb8e6d1b41736db590a4500bc15 100644 (file)
@@ -96,4 +96,7 @@ libc {
     strlcat;
     strlcpy;
   }
+  GLIBC_2.43 {
+    memset_explicit;
+  }
 }
index ae14cfbab0a716f804026d1485ea429f87336046..9916e17aa0acc3ce287b317984de0894aa1d0270 100644 (file)
@@ -60,6 +60,18 @@ __NTH (memset (void *__dest, int __ch, size_t __len))
                                 __glibc_objsize0 (__dest));
 }
 
+#if defined __USE_MISC || __GLIBC_USE (ISOC23)
+void *__memset_explicit_chk (void *__s, int __c, size_t __n, size_t __destlen)
+     __THROW __nonnull ((1)) __fortified_attr_access (__write_only__, 1, 3);
+
+__fortify_function void *
+__NTH (memset_explicit (void *__dest, int __ch, size_t __len))
+{
+  return __memset_explicit_chk (__dest, __ch, __len,
+                               __glibc_objsize0 (__dest));
+}
+#endif
+
 #ifdef __USE_MISC
 # include <bits/strings_fortified.h>
 
diff --git a/string/memset_explicit.c b/string/memset_explicit.c
new file mode 100644 (file)
index 0000000..29fec30
--- /dev/null
@@ -0,0 +1,39 @@
+/* Erasure of sensitive data, generic implementation.
+   Copyright (C) 2016-2025 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
+   <https://www.gnu.org/licenses/>.  */
+
+/* An assembler implementation of memset_explicit can be created as an
+   assembler alias of an optimized memset implementation.
+   Architecture-specific implementations also need to define
+   __memset_explicit_chk.  */
+
+#include <string.h>
+
+/* glibc-internal users use __memset_explicit_chk, and memset_explicit
+   redirects to that.  */
+#undef memset_explicit
+
+/* Set LEN bytes of S to C.  The compiler will not delete a call to
+   this function, even if S is dead after the call.  */
+void *
+memset_explicit (void *s, int c, size_t len)
+{
+  memset (s, c, len);
+  /* Compiler barrier.  */
+  asm volatile ("" ::: "memory");
+  return s;
+}
index df4d489556ed1dbff30f7485b003915bf269eb49..81f0b7fd21141bf89dba878f585ad76b92d762b0 100644 (file)
@@ -60,6 +60,13 @@ extern void *memccpy (void *__restrict __dest, const void *__restrict __src,
 /* Set N bytes of S to C.  */
 extern void *memset (void *__s, int __c, size_t __n) __THROW __nonnull ((1));
 
+#if defined __USE_MISC || __GLIBC_USE (ISOC23)
+/* Like memset, but the compiler will not delete a call to this
+   function, even if S is dead after the call.  */
+extern void *memset_explicit (void *__s, int __c, size_t __n)
+     __THROW __nonnull ((1)) __fortified_attr_access (__write_only__, 1, 3);
+#endif
+
 /* Compare N bytes of S1 and S2.  */
 extern int memcmp (const void *__s1, const void *__s2, size_t __n)
      __THROW __attribute_pure__ __nonnull ((1, 2));
index 19c613899b5de83855cb85271da3be888a391dd1..00664004da3c65f56fa34bbd5481323a663226b2 100644 (file)
 # endif
 #else
 # ifndef WIDE
-#  define TEST_NAME "memset"
+#  ifdef TEST_MEMSET_EXPLICIT
+#   define TEST_NAME "memset_explicit"
+#  else
+#   define TEST_NAME "memset"
+#  endif
 # else
 #  define TEST_NAME "wmemset"
 # endif /* WIDE */
 #include "test-string.h"
 
 #ifndef WIDE
-# define MEMSET memset
+# ifdef TEST_MEMSET_EXPLICIT
+#  define MEMSET memset_explicit
+# else
+#  define MEMSET memset
+# endif
 # define CHAR char
 # define UCHAR unsigned char
 # define SIMPLE_MEMSET simple_memset
diff --git a/string/test-memset_explicit.c b/string/test-memset_explicit.c
new file mode 100644 (file)
index 0000000..b02954c
--- /dev/null
@@ -0,0 +1,19 @@
+/* Test and measure memset_explicit.
+   Copyright (C) 2025 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
+   <https://www.gnu.org/licenses/>.  */
+#define TEST_MEMSET_EXPLICIT
+#include "test-memset.c"
index 7f5fbc7ffc5dcd412a1e5813518ed581aec9cdc0..b6e07055d38da0cfb8f1dbb25518e867b6582645 100644 (file)
@@ -153,7 +153,11 @@ setup_explicit_clear (void)
 {
   unsigned char buf[TEST_BUFFER_SIZE];
   prepare_test_buffer (buf);
+#ifdef TEST_MEMSET_EXPLICIT
+  memset_explicit (buf, 0, TEST_BUFFER_SIZE);
+#else
   explicit_bzero (buf, TEST_BUFFER_SIZE);
+#endif
 }
 
 enum test_expectation
diff --git a/string/tst-xmemset-opt.c b/string/tst-xmemset-opt.c
new file mode 100644 (file)
index 0000000..ce71a6c
--- /dev/null
@@ -0,0 +1,2 @@
+#define TEST_MEMSET_EXPLICIT 1
+#include "tst-xbzero-opt.c"
index b3fe424501229a28dab8fb1640ab7aecb837ce78..e0dc8aea2894a6405cfbcd49e3138b2725968505 100644 (file)
@@ -2662,6 +2662,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.43 pthread_cancel F
 GLIBC_2.43 pthread_clockjoin_np F
 GLIBC_2.43 pthread_detach F
index 56da3c562b367ea1782a24977eceaedb0d4a92e1..c0cac6d5076a1ec90219a4783d8fcc142540a5be 100644 (file)
@@ -2343,6 +2343,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.43 pthread_cancel F
 GLIBC_2.43 pthread_clockjoin_np F
 GLIBC_2.43 pthread_detach F
index a22e65143209b74ea8e9b77e7a8bac8966fa7cd2..bde5e66ce02de103dc860c42c6a00b9fd47dfaad 100644 (file)
@@ -2767,3 +2767,5 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
index 4b5736a3b6d3e54438767d24ff48a3dbf172727b..0060616d206e452013a97f7a0916fef98d0db4b4 100644 (file)
@@ -3114,6 +3114,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index b8a44784bdc97d1d63701479b618323bce96aae9..79895b9b374bf360c3fdf9383c8e5b869e18a8df 100644 (file)
@@ -2528,3 +2528,5 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
index 959e44672f2a7c12508852982bdf8be4c7ab9030..3426d99f1e09f8b33f0897fe4abba2df8747221f 100644 (file)
@@ -2820,6 +2820,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index a930d1a52bbfb8f97d4ac4badd7a6f7f56f0953a..eca31a2e27cb09cbff310e69fae82a320232deb7 100644 (file)
@@ -2817,6 +2817,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index 6325fc12c4b441d0bc407628e435993191def64c..7c5ebdf3ba46058cfcebe6f132b6762b391ec4e3 100644 (file)
@@ -2804,3 +2804,5 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
index 86b3fbdeec149d33f29a8e33558571779562e372..742118e65ed119cdb8dbe5466117a1ba32d0ae91 100644 (file)
@@ -2841,6 +2841,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index 6555592d86d94fb4e4657d24221bf0d4b67dc3b3..8a8ff34e35b0cbcf05799339027f5c130c4d4cbf 100644 (file)
@@ -3024,6 +3024,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index a6cab9612a4cef459c121a5101bf1da01f8b5f55..86b0246ad1b254d831f885e329799423f1dc4913 100644 (file)
@@ -2288,3 +2288,5 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
index 7b7b72aa50f8578ba150b160b2e098cca7c60244..92cef27d98254d3e4bfcccdbad3e7f44fc94241f 100644 (file)
@@ -2800,6 +2800,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index df398e43c62d65631a2c794a4f23a3982d529bfa..3b7457456035c44a6a49e80a93e477cd887dad5e 100644 (file)
@@ -2967,6 +2967,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index ca8df6f4b0c1fb56d306d0bd2c4e1f53e7d507ae..ae2d13ad8f5d846b7ad150e0478f3241189f6d86 100644 (file)
@@ -2853,3 +2853,5 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
index 950815484752bc1461fbbc234befb7fd4f4a4a46..1b0264df273b520dfb4508079520fa11ee4e6428 100644 (file)
@@ -2850,3 +2850,5 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
index 4d51cc428f15ec435b32ff14862b946e7339eb22..892322809096799d22a3bfcf7267ad9339399709 100644 (file)
@@ -2930,6 +2930,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index 7f90fadc76ec25cf73743e46d292f63f548f823a..9ce80245f6cb06343f904ae8bc06b50b12550b5e 100644 (file)
@@ -2928,6 +2928,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index fc366d1bd0de4745ed94d676c595b7402f806e00..e3c971367d6cb77f2aa6b8fc7111c70e954b7765 100644 (file)
@@ -2936,6 +2936,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index debd5c37c9af534d7e7947d4b72c9ab24c71f611..db707fad52d26d5f180f6957d415238a62edcd81 100644 (file)
@@ -2838,6 +2838,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index b62d59f1afe9c7030e1ecff7f00afd8c3c89996c..0780d53978e6ad1ca0f1cf0313cf5ddbe78563c9 100644 (file)
@@ -2278,3 +2278,5 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
index 883e66f3ae6af9fa298bdf37763028c658bf163b..f4f15510545529bef03508ee02adf4032d90a5e8 100644 (file)
@@ -3157,6 +3157,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index 84cd9e0e18c7712ee1925d995705d4717a4df72a..34ec11f6853ce814aaae29c4340320485fda937e 100644 (file)
@@ -3202,6 +3202,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index 8832568ab3bf0a4cfbff3e5a1a21c7ab1a10db0b..b790b43f4b3c86d6c270903f48a1e2e9dd897239 100644 (file)
@@ -2911,6 +2911,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index b6ff8016e4b396498d9be34c77931988c2aa382b..b7de3f95a8d03d55750933fa55dbdba8f67d29e6 100644 (file)
@@ -2987,3 +2987,5 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
index 1771a2370c5a9bc54af33d47350971c988abacd8..2680eabc7cbacac4a1f397365b159c3f223c30ac 100644 (file)
@@ -2531,3 +2531,5 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
index 4b48352fd99b4db201988b297460cad9db55d890..074ca2f28027d29d8ca6d417b92b80badb089c60 100644 (file)
@@ -2731,3 +2731,5 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
index f0decc787bab9420351e6a059108f22ba78d6718..0573db9f500672286880772d233610e6d1ae023b 100644 (file)
@@ -3155,6 +3155,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index da8a2bfb74aafa5858de2e1b7a879023b4dc18e2..55760b901f43ad84953cda0dca6df2ad4313f2e7 100644 (file)
@@ -2948,6 +2948,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index fb303418946b0829098a2576946148878b640455..a15b4df221fcaa2ee39357b9ba7758500978be49 100644 (file)
@@ -2847,6 +2847,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index d716673432786fc84d8c4173918b30527bc28918..b490e1064c308c44319bc5f896fbeb393e90dadd 100644 (file)
@@ -2844,6 +2844,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index 6deedf216dbeea810301deacd99b368fd66f697d..8fd42d21d06e97f2114229616c536313d1f39787 100644 (file)
@@ -3178,6 +3178,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index 1ce22bf036b7f1f4fe2f3f362be2f76f453ee801..b62dec6a6353e0979eb7ed26c27a07bbcf54e6eb 100644 (file)
@@ -2814,6 +2814,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index 564877250b25050d00872cf0299cf4454d06d3a9..fe23ac668221e44ef959215e89fc0f68c64c3522 100644 (file)
@@ -2763,6 +2763,8 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
 GLIBC_2.5 inet6_opt_find F
index 25a39d094342cedbfdf88d8af522a022bc297927..986dfcca2a0f3fedc226f24ad400d3a296962208 100644 (file)
@@ -2782,3 +2782,5 @@ GLIBC_2.42 uabs F
 GLIBC_2.42 uimaxabs F
 GLIBC_2.42 ulabs F
 GLIBC_2.42 ullabs F
+GLIBC_2.43 __memset_explicit_chk F
+GLIBC_2.43 memset_explicit F