Implement C23 memset_explicit (bug 32378)

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.
This commit is contained in:
Joseph Myers 2025-10-01 15:14:09 +00:00
parent a8ad2e9e43
commit 0f201f4a81
51 changed files with 289 additions and 11 deletions

2
NEWS
View File

@ -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:

View File

@ -65,6 +65,7 @@ routines = \
memmove_chk \
mempcpy_chk \
memset_chk \
memset_explicit_chk \
noophooks \
obprintf_chk \
poll_chk \

View File

@ -68,6 +68,9 @@ libc {
__inet_ntop_chk;
__inet_pton_chk;
}
GLIBC_2.43 {
__memset_explicit_chk;
}
GLIBC_PRIVATE {
__fortify_fail;
}

View File

@ -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)

View 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

View 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)

View 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}

View 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

View 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)

View File

@ -96,4 +96,7 @@ libc {
strlcat;
strlcpy;
}
GLIBC_2.43 {
memset_explicit;
}
}

View 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>

39
string/memset_explicit.c Normal file
View File

@ -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;
}

View 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));

View File

@ -25,7 +25,11 @@
# 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 */
@ -34,7 +38,11 @@
#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

View File

@ -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"

View 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

2
string/tst-xmemset-opt.c Normal file
View File

@ -0,0 +1,2 @@
#define TEST_MEMSET_EXPLICIT 1
#include "tst-xbzero-opt.c"

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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