1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-28 00:21:52 +03:00

Add reallocarray function

The reallocarray function is an extension from OpenBSD.  It is an
integer-overflow-safe replacement for realloc(p, X*Y) and
malloc(X*Y) (realloc(NULL, X*Y)).  It can therefore help in preventing
certain security issues in code.

This is an updated version of a patch originally submitted by Rüdiger
Sonderfeld in May 2014 [1].

Checked on i686-linux-gnu and x86_64-linux-gnu.

[1] <https://sourceware.org/ml/libc-alpha/2014-05/msg00481.html>.

2017-05-30  Dennis Wölfing  <denniswoelfing@gmx.de>
            Rüdiger Sonderfeld  <ruediger@c-plusplus.de>

	* include/stdlib.h (__libc_reallocarray): New declaration.
	* malloc/Makefile (routines): Add reallocarray.
	(tests): Add tst-reallocarray.c.
	* malloc/Versions: Add reallocarray and __libc_reallocarray.
	* malloc/malloc-internal.h (check_mul_overflow_size_t): New inline
	function.
	* malloc/malloc.h (reallocarray): New declaration.
	* stdlib/stdlib.h (reallocarray): Likewise.
	* malloc/reallocarray.c: New file.
	* malloc/tst-reallocarray.c: New test file.
	* manual/memory.texi: Document reallocarray.
	* sysdeps/unix/sysv/linux/aarch64/libc.abilist: Add reallocarray.
	* sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/arm/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/nios2/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/tilepro/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.
This commit is contained in:
Dennis Wölfing
2017-05-30 18:26:19 -03:00
committed by Adhemerval Zanella
parent 4f26ef1b67
commit 2e0bbbfbf9
39 changed files with 344 additions and 12 deletions

View File

@ -1,3 +1,48 @@
2017-05-30 Dennis Wölfing <denniswoelfing@gmx.de>
Rüdiger Sonderfeld <ruediger@c-plusplus.de>
* include/stdlib.h (__libc_reallocarray): New declaration.
* malloc/Makefile (routines): Add reallocarray.
(tests): Add tst-reallocarray.c.
* malloc/Versions: Add reallocarray and __libc_reallocarray.
* malloc/malloc-internal.h (check_mul_overflow_size_t): New inline
function.
* malloc/malloc.h (reallocarray): New declaration.
* stdlib/stdlib.h (reallocarray): Likewise.
* malloc/reallocarray.c: New file.
* malloc/tst-reallocarray.c: New test file.
* manual/memory.texi: Document reallocarray.
* sysdeps/unix/sysv/linux/aarch64/libc.abilist: Add reallocarray.
* sysdeps/unix/sysv/linux/alpha/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/arm/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/hppa/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/i386/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/ia64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/microblaze/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/nios2/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc-le.abilist: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/sh/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/tilepro/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.
2017-05-30 H.J. Lu <hongjiu.lu@intel.com> 2017-05-30 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/x86_64/memchr.S (memchr): Use 32-bit registers for * sysdeps/x86_64/memchr.S (memchr): Use 32-bit registers for

4
NEWS
View File

@ -66,6 +66,10 @@ Version 2.26
* The port to Native Client running on ARMv7-A (--host=arm-nacl) has been * The port to Native Client running on ARMv7-A (--host=arm-nacl) has been
removed. removed.
* The reallocarray function has been added to libc. It is a realloc
replacement with a check for integer overflow when calculating total
allocation size.
Security related changes: Security related changes:
* The DNS stub resolver limits the advertised UDP buffer size to 1200 bytes, * The DNS stub resolver limits the advertised UDP buffer size to 1200 bytes,

View File

@ -110,6 +110,10 @@ extern int __posix_memalign (void **memptr, size_t alignment, size_t size);
extern void *__libc_memalign (size_t alignment, size_t size) extern void *__libc_memalign (size_t alignment, size_t size)
__attribute_malloc__; __attribute_malloc__;
extern void *__libc_reallocarray (void *__ptr, size_t __nmemb, size_t __size)
__THROW __attribute_warn_unused_result__;
libc_hidden_proto (__libc_reallocarray)
extern int __libc_system (const char *line); extern int __libc_system (const char *line);

View File

@ -26,7 +26,7 @@ dist-headers := malloc.h
headers := $(dist-headers) obstack.h mcheck.h headers := $(dist-headers) obstack.h mcheck.h
tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \ tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \
tst-mcheck tst-mallocfork tst-trim1 \ tst-mcheck tst-mallocfork tst-trim1 \
tst-malloc-usable tst-realloc tst-posix_memalign \ tst-malloc-usable tst-realloc tst-reallocarray tst-posix_memalign \
tst-pvalloc tst-memalign tst-mallopt \ tst-pvalloc tst-memalign tst-mallopt \
tst-malloc-backtrace tst-malloc-thread-exit \ tst-malloc-backtrace tst-malloc-thread-exit \
tst-malloc-thread-fail tst-malloc-fork-deadlock \ tst-malloc-thread-fail tst-malloc-fork-deadlock \
@ -49,7 +49,7 @@ endif
tests += $(tests-static) tests += $(tests-static)
test-srcs = tst-mtrace test-srcs = tst-mtrace
routines = malloc morecore mcheck mtrace obstack \ routines = malloc morecore mcheck mtrace obstack reallocarray \
scratch_buffer_grow scratch_buffer_grow_preserve \ scratch_buffer_grow scratch_buffer_grow_preserve \
scratch_buffer_set_array_size scratch_buffer_set_array_size

View File

@ -62,6 +62,7 @@ libc {
aligned_alloc; aligned_alloc;
} }
GLIBC_2.26 { GLIBC_2.26 {
reallocarray;
} }
GLIBC_PRIVATE { GLIBC_PRIVATE {
# Internal startup hook for libpthread. # Internal startup hook for libpthread.
@ -74,5 +75,8 @@ libc {
__libc_scratch_buffer_grow; __libc_scratch_buffer_grow;
__libc_scratch_buffer_grow_preserve; __libc_scratch_buffer_grow_preserve;
__libc_scratch_buffer_set_array_size; __libc_scratch_buffer_set_array_size;
# Internal name for reallocarray
__libc_reallocarray;
} }
} }

View File

@ -81,5 +81,24 @@ void __malloc_fork_unlock_parent (void) internal_function attribute_hidden;
/* Called in the child process after a fork. */ /* Called in the child process after a fork. */
void __malloc_fork_unlock_child (void) internal_function attribute_hidden; void __malloc_fork_unlock_child (void) internal_function attribute_hidden;
/* Set *RESULT to LEFT * RIGHT. Return true if the multiplication
overflowed. */
static inline bool
check_mul_overflow_size_t (size_t left, size_t right, size_t *result)
{
#if __GNUC__ >= 5
return __builtin_mul_overflow (left, right, result);
#else
/* size_t is unsigned so the behavior on overflow is defined. */
*result = left * right;
size_t half_size_t = ((size_t) 1) << (8 * sizeof (size_t) / 2);
if (__glibc_unlikely ((left | right) >= half_size_t))
{
if (__glibc_unlikely (right != 0 && *result / right != left))
return true;
}
return false;
#endif
}
#endif /* _MALLOC_INTERNAL_H */ #endif /* _MALLOC_INTERNAL_H */

View File

@ -49,6 +49,14 @@ __THROW __attribute_malloc__ __wur;
extern void *realloc (void *__ptr, size_t __size) extern void *realloc (void *__ptr, size_t __size)
__THROW __attribute_warn_unused_result__; __THROW __attribute_warn_unused_result__;
/* Re-allocate the previously allocated block in PTR, making the new
block large enough for NMEMB elements of SIZE bytes each. */
/* __attribute_malloc__ is not used, because if reallocarray returns
the same pointer that was passed to it, aliasing needs to be allowed
between objects pointed by the old and new pointers. */
extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
__THROW __attribute_warn_unused_result__;
/* Free a block allocated by `malloc', `realloc' or `calloc'. */ /* Free a block allocated by `malloc', `realloc' or `calloc'. */
extern void free (void *__ptr) __THROW; extern void free (void *__ptr) __THROW;

37
malloc/reallocarray.c Normal file
View File

@ -0,0 +1,37 @@
/* Change the size of an allocated block.
Copyright (C) 2017 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; see the file COPYING.LIB. If
not, see <http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <malloc.h>
#include <malloc/malloc-internal.h>
void *
__libc_reallocarray (void *optr, size_t nmemb, size_t elem_size)
{
size_t bytes;
if (check_mul_overflow_size_t (nmemb, elem_size, &bytes))
{
__set_errno (ENOMEM);
return 0;
}
else
return realloc (optr, bytes);
}
libc_hidden_def (__libc_reallocarray)
weak_alias (__libc_reallocarray, reallocarray)

118
malloc/tst-reallocarray.c Normal file
View File

@ -0,0 +1,118 @@
/* Test for reallocarray.
Copyright (C) 2017 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <malloc.h>
#include <string.h>
#include <support/check.h>
static int
do_test (void)
{
void *ptr = NULL;
void *ptr2 = NULL;
unsigned char *c;
size_t i;
int ok;
const size_t max = ~(size_t)0;
size_t a, b;
/* Test overflow detection. */
errno = 0;
ptr = reallocarray (NULL, max, 2);
TEST_VERIFY (!ptr);
TEST_VERIFY (errno == ENOMEM);
errno = 0;
ptr = reallocarray (NULL, 2, max);
TEST_VERIFY (!ptr);
TEST_VERIFY (errno == ENOMEM);
a = 65537;
b = max/65537 + 1;
errno = 0;
ptr = reallocarray (NULL, a, b);
TEST_VERIFY (!ptr);
TEST_VERIFY (errno == ENOMEM);
errno = 0;
ptr = reallocarray (NULL, b, a);
TEST_VERIFY (!ptr);
TEST_VERIFY (errno == ENOMEM);
/* Test realloc-like behavior. */
/* Allocate memory like malloc. */
ptr = reallocarray (NULL, 10, 2);
TEST_VERIFY_EXIT (ptr);
TEST_VERIFY_EXIT (malloc_usable_size (ptr) >= 10*2);
memset (ptr, 0xAF, 10*2);
/* Enlarge buffer. */
ptr2 = reallocarray (ptr, 20, 2);
TEST_VERIFY (ptr2);
if (ptr2)
ptr = ptr2;
TEST_VERIFY (malloc_usable_size (ptr) >= 20*2);
c = ptr;
ok = 1;
for (i = 0; i < 10*2; ++i)
{
if (c[i] != 0xAF)
ok = 0;
}
TEST_VERIFY (ok);
/* Decrease buffer size. */
ptr2 = reallocarray (ptr, 5, 3);
TEST_VERIFY (ptr2);
if (ptr2)
ptr = ptr2;
TEST_VERIFY_EXIT (malloc_usable_size (ptr) >= 5*3);
c = ptr;
ok = 1;
for (i = 0; i < 5*3; ++i)
{
if (c[i] != 0xAF)
ok = 0;
}
TEST_VERIFY (ok);
/* Overflow should leave buffer untouched. */
errno = 0;
ptr2 = reallocarray (ptr, 2, ~(size_t)0);
TEST_VERIFY (!ptr2);
TEST_VERIFY (errno == ENOMEM);
c = ptr;
ok = 1;
for (i = 0; i < 5*3; ++i)
{
if (c[i] != 0xAF)
ok = 0;
}
TEST_VERIFY (ok);
free (ptr);
return 0;
}
#include <support/test-driver.c>

View File

@ -751,8 +751,8 @@ be a buffer that you use to hold a line being read from a file; no matter
how long you make the buffer initially, you may encounter a line that is how long you make the buffer initially, you may encounter a line that is
longer. longer.
You can make the block longer by calling @code{realloc}. This function You can make the block longer by calling @code{realloc} or
is declared in @file{stdlib.h}. @code{reallocarray}. These functions are declared in @file{stdlib.h}.
@pindex stdlib.h @pindex stdlib.h
@comment malloc.h stdlib.h @comment malloc.h stdlib.h
@ -816,9 +816,29 @@ behavior, and will probably crash when @code{realloc} is passed a null
pointer. pointer.
@end deftypefun @end deftypefun
Like @code{malloc}, @code{realloc} may return a null pointer if no @comment malloc.h stdlib.h
memory space is available to make the block bigger. When this happens, @comment BSD
the original block is untouched; it has not been modified or relocated. @deftypefun {void *} reallocarray (void *@var{ptr}, size_t @var{nmemb}, size_t @var{size})
@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
The @code{reallocarray} function changes the size of the block whose address
is @var{ptr} to be long enough to contain a vector of @var{nmemb} elements,
each of size @var{size}. It is equivalent to @samp{realloc (@var{ptr},
@var{nmemb} * @var{size})}, except that @code{reallocarray} fails safely if
the multiplication overflows, by setting @code{errno} to @code{ENOMEM},
returning a null pointer, and leaving the original block unchanged.
@code{reallocarray} should be used instead of @code{realloc} when the new size
of the allocated block is the result of a multiplication that might overflow.
@strong{Portability Note:} This function is not part of any standard. It was
first introduced in OpenBSD 5.6.
@end deftypefun
Like @code{malloc}, @code{realloc} and @code{reallocarray} may return a null
pointer if no memory space is available to make the block bigger. When this
happens, the original block is untouched; it has not been modified or
relocated.
In most cases it makes no difference what happens to the original block In most cases it makes no difference what happens to the original block
when @code{realloc} fails, because the application program cannot continue when @code{realloc} fails, because the application program cannot continue
@ -838,16 +858,17 @@ xrealloc (void *ptr, size_t size)
@} @}
@end smallexample @end smallexample
You can also use @code{realloc} to make a block smaller. The reason you You can also use @code{realloc} or @code{reallocarray} to make a block
would do this is to avoid tying up a lot of memory space when only a little smaller. The reason you would do this is to avoid tying up a lot of memory
is needed. space when only a little is needed.
@comment The following is no longer true with the new malloc. @comment The following is no longer true with the new malloc.
@comment But it seems wise to keep the warning for other implementations. @comment But it seems wise to keep the warning for other implementations.
In several allocation implementations, making a block smaller sometimes In several allocation implementations, making a block smaller sometimes
necessitates copying it, so it can fail if no other space is available. necessitates copying it, so it can fail if no other space is available.
If the new size you specify is the same as the old size, @code{realloc} If the new size you specify is the same as the old size, @code{realloc} and
is guaranteed to change nothing and return the same address that you gave. @code{reallocarray} are guaranteed to change nothing and return the same
address that you gave.
@node Allocating Cleared Space @node Allocating Cleared Space
@subsubsection Allocating Cleared Space @subsubsection Allocating Cleared Space
@ -1588,6 +1609,11 @@ Malloc}.
Make a block previously allocated by @code{malloc} larger or smaller, Make a block previously allocated by @code{malloc} larger or smaller,
possibly by copying it to a new location. @xref{Changing Block Size}. possibly by copying it to a new location. @xref{Changing Block Size}.
@item void *reallocarray (void *@var{ptr}, size_t @var{nmemb}, size_t @var{size})
Change the size of a block previously allocated by @code{malloc} to
@code{@var{nmemb} * @var{size}} bytes as with @code{realloc}. @xref{Changing
Block Size}.
@item void *calloc (size_t @var{count}, size_t @var{eltsize}) @item void *calloc (size_t @var{count}, size_t @var{eltsize})
Allocate a block of @var{count} * @var{eltsize} bytes using Allocate a block of @var{count} * @var{eltsize} bytes using
@code{malloc}, and set its contents to zero. @xref{Allocating Cleared @code{malloc}, and set its contents to zero. @xref{Allocating Cleared

View File

@ -422,6 +422,17 @@ extern void *calloc (size_t __nmemb, size_t __size)
between objects pointed by the old and new pointers. */ between objects pointed by the old and new pointers. */
extern void *realloc (void *__ptr, size_t __size) extern void *realloc (void *__ptr, size_t __size)
__THROW __attribute_warn_unused_result__; __THROW __attribute_warn_unused_result__;
#ifdef __USE_GNU
/* Re-allocate the previously allocated block in PTR, making the new
block large enough for NMEMB elements of SIZE bytes each. */
/* __attribute_malloc__ is not used, because if reallocarray returns
the same pointer that was passed to it, aliasing needs to be allowed
between objects pointed by the old and new pointers. */
extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
__THROW __attribute_warn_unused_result__;
#endif
/* Free a block allocated by `malloc', `realloc' or `calloc'. */ /* Free a block allocated by `malloc', `realloc' or `calloc'. */
extern void free (void *__ptr) __THROW; extern void free (void *__ptr) __THROW;

View File

@ -2097,3 +2097,5 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F

View File

@ -2008,6 +2008,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -98,6 +98,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.4 GLIBC_2.4 A GLIBC_2.4 GLIBC_2.4 A
GLIBC_2.4 _Exit F GLIBC_2.4 _Exit F
GLIBC_2.4 _IO_2_1_stderr_ D 0xa0 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0

View File

@ -1862,6 +1862,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -2020,6 +2020,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -1884,6 +1884,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -99,6 +99,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.4 GLIBC_2.4 A GLIBC_2.4 GLIBC_2.4 A
GLIBC_2.4 _Exit F GLIBC_2.4 _Exit F
GLIBC_2.4 _IO_2_1_stderr_ D 0x98 GLIBC_2.4 _IO_2_1_stderr_ D 0x98

View File

@ -1976,6 +1976,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -2097,3 +2097,5 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F

View File

@ -1951,6 +1951,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -1949,6 +1949,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -1947,6 +1947,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -1942,6 +1942,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -2138,3 +2138,5 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F

View File

@ -1980,6 +1980,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -1985,6 +1985,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -2185,3 +2185,5 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F

View File

@ -99,6 +99,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 _Exit F GLIBC_2.3 _Exit F
GLIBC_2.3 _IO_2_1_stderr_ D 0xe0 GLIBC_2.3 _IO_2_1_stderr_ D 0xe0

View File

@ -1980,6 +1980,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -1881,6 +1881,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -1866,6 +1866,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -1972,6 +1972,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -1910,6 +1910,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -2104,3 +2104,5 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F

View File

@ -2104,3 +2104,5 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F

View File

@ -2104,3 +2104,5 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F

View File

@ -1861,6 +1861,8 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F
GLIBC_2.3 GLIBC_2.3 A GLIBC_2.3 GLIBC_2.3 A
GLIBC_2.3 __ctype_b_loc F GLIBC_2.3 __ctype_b_loc F
GLIBC_2.3 __ctype_tolower_loc F GLIBC_2.3 __ctype_tolower_loc F

View File

@ -2104,3 +2104,5 @@ GLIBC_2.25 getrandom F
GLIBC_2.25 strfromd F GLIBC_2.25 strfromd F
GLIBC_2.25 strfromf F GLIBC_2.25 strfromf F
GLIBC_2.25 strfroml F GLIBC_2.25 strfroml F
GLIBC_2.26 GLIBC_2.26 A
GLIBC_2.26 reallocarray F