mirror of git://sourceware.org/git/glibc.git
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:
parent
a8ad2e9e43
commit
0f201f4a81
2
NEWS
2
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:
|
||||
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ routines = \
|
|||
memmove_chk \
|
||||
mempcpy_chk \
|
||||
memset_chk \
|
||||
memset_explicit_chk \
|
||||
noophooks \
|
||||
obprintf_chk \
|
||||
poll_chk \
|
||||
|
|
|
|||
|
|
@ -68,6 +68,9 @@ libc {
|
|||
__inet_ntop_chk;
|
||||
__inet_pton_chk;
|
||||
}
|
||||
GLIBC_2.43 {
|
||||
__memset_explicit_chk;
|
||||
}
|
||||
GLIBC_PRIVATE {
|
||||
__fortify_fail;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -96,4 +96,7 @@ libc {
|
|||
strlcat;
|
||||
strlcpy;
|
||||
}
|
||||
GLIBC_2.43 {
|
||||
memset_explicit;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
#define TEST_MEMSET_EXPLICIT 1
|
||||
#include "tst-xbzero-opt.c"
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue