From: Joseph Myers Date: Wed, 1 Oct 2025 15:14:09 +0000 (+0000) Subject: Implement C23 memset_explicit (bug 32378) X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0f201f4a817e39c01c502f523d4ea3c91f242767;p=thirdparty%2Fglibc.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. --- diff --git a/NEWS b/NEWS index 9831f7f5d4..8a5c197d42 100644 --- 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: diff --git a/debug/Makefile b/debug/Makefile index 4f7ac04ffa..dbb8c53890 100644 --- a/debug/Makefile +++ b/debug/Makefile @@ -65,6 +65,7 @@ routines = \ memmove_chk \ mempcpy_chk \ memset_chk \ + memset_explicit_chk \ noophooks \ obprintf_chk \ poll_chk \ diff --git a/debug/Versions b/debug/Versions index 6b9ec1eb46..fc818d29aa 100644 --- a/debug/Versions +++ b/debug/Versions @@ -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 index 0000000000..0ffbf2b339 --- /dev/null +++ b/debug/memset_explicit_chk.c @@ -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 + . */ + +/* 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 + +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) diff --git a/debug/tst-fortify.c b/debug/tst-fortify.c index c4c28e6e13..fd06b29676 100644 --- a/debug/tst-fortify.c +++ b/debug/tst-fortify.c @@ -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 diff --git a/include/string.h b/include/string.h index b9c41b0eea..c26ca0927c 100644 --- a/include/string.h +++ b/include/string.h @@ -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) diff --git a/manual/maint.texi b/manual/maint.texi index 58479ec723..2d540ced9b 100644 --- a/manual/maint.texi +++ b/manual/maint.texi @@ -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} diff --git a/manual/string.texi b/manual/string.texi index feba0b7ae3..85318973d8 100644 --- a/manual/string.texi +++ b/manual/string.texi @@ -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 diff --git a/string/Makefile b/string/Makefile index c83b195e2e..d842ae0457 100644 --- a/string/Makefile +++ b/string/Makefile @@ -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) diff --git a/string/Versions b/string/Versions index c56e372a3c..5a63f5ced3 100644 --- a/string/Versions +++ b/string/Versions @@ -96,4 +96,7 @@ libc { strlcat; strlcpy; } + GLIBC_2.43 { + memset_explicit; + } } diff --git a/string/bits/string_fortified.h b/string/bits/string_fortified.h index ae14cfbab0..9916e17aa0 100644 --- a/string/bits/string_fortified.h +++ b/string/bits/string_fortified.h @@ -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 diff --git a/string/memset_explicit.c b/string/memset_explicit.c new file mode 100644 index 0000000000..29fec30bd9 --- /dev/null +++ b/string/memset_explicit.c @@ -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 + . */ + +/* 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 + +/* 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; +} diff --git a/string/string.h b/string/string.h index df4d489556..81f0b7fd21 100644 --- a/string/string.h +++ b/string/string.h @@ -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)); diff --git a/string/test-memset.c b/string/test-memset.c index 19c613899b..00664004da 100644 --- a/string/test-memset.c +++ b/string/test-memset.c @@ -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 diff --git a/string/test-memset_explicit.c b/string/test-memset_explicit.c new file mode 100644 index 0000000000..b02954c6b0 --- /dev/null +++ b/string/test-memset_explicit.c @@ -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 + . */ +#define TEST_MEMSET_EXPLICIT +#include "test-memset.c" diff --git a/string/tst-xbzero-opt.c b/string/tst-xbzero-opt.c index 7f5fbc7ffc..b6e07055d3 100644 --- a/string/tst-xbzero-opt.c +++ b/string/tst-xbzero-opt.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 diff --git a/string/tst-xmemset-opt.c b/string/tst-xmemset-opt.c new file mode 100644 index 0000000000..ce71a6cea1 --- /dev/null +++ b/string/tst-xmemset-opt.c @@ -0,0 +1,2 @@ +#define TEST_MEMSET_EXPLICIT 1 +#include "tst-xbzero-opt.c" diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist index b3fe424501..e0dc8aea28 100644 --- a/sysdeps/mach/hurd/i386/libc.abilist +++ b/sysdeps/mach/hurd/i386/libc.abilist @@ -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 diff --git a/sysdeps/mach/hurd/x86_64/libc.abilist b/sysdeps/mach/hurd/x86_64/libc.abilist index 56da3c562b..c0cac6d507 100644 --- a/sysdeps/mach/hurd/x86_64/libc.abilist +++ b/sysdeps/mach/hurd/x86_64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist index a22e651432..bde5e66ce0 100644 --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist index 4b5736a3b6..0060616d20 100644 --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist index b8a44784bd..79895b9b37 100644 --- a/sysdeps/unix/sysv/linux/arc/libc.abilist +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist index 959e44672f..3426d99f1e 100644 --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist index a930d1a52b..eca31a2e27 100644 --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist index 6325fc12c4..7c5ebdf3ba 100644 --- a/sysdeps/unix/sysv/linux/csky/libc.abilist +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist index 86b3fbdeec..742118e65e 100644 --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist index 6555592d86..8a8ff34e35 100644 --- a/sysdeps/unix/sysv/linux/i386/libc.abilist +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist index a6cab9612a..86b0246ad1 100644 --- a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist index 7b7b72aa50..92cef27d98 100644 --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist index df398e43c6..3b74574560 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist index ca8df6f4b0..ae2d13ad8f 100644 --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist index 9508154847..1b0264df27 100644 --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist index 4d51cc428f..8923228090 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist index 7f90fadc76..9ce80245f6 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist index fc366d1bd0..e3c971367d 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist index debd5c37c9..db707fad52 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist index b62d59f1af..0780d53978 100644 --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist index 883e66f3ae..f4f1551054 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist index 84cd9e0e18..34ec11f685 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist index 8832568ab3..b790b43f4b 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist index b6ff8016e4..b7de3f95a8 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist index 1771a2370c..2680eabc7c 100644 --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist index 4b48352fd9..074ca2f280 100644 --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist index f0decc787b..0573db9f50 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist index da8a2bfb74..55760b901f 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist index fb30341894..a15b4df221 100644 --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist index d716673432..b490e1064c 100644 --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist index 6deedf216d..8fd42d21d0 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist index 1ce22bf036..b62dec6a63 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist index 564877250b..fe23ac6682 100644 --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist @@ -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 diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist index 25a39d0943..986dfcca2a 100644 --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist @@ -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