diff mbox series

[v2] stdlib: Consolidate getentropy and adapt to POSIX 2024 semantics

Message ID 20250327141754.362790-1-adhemerval.zanella@linaro.org
State New
Headers show
Series [v2] stdlib: Consolidate getentropy and adapt to POSIX 2024 semantics | expand

Commit Message

Adhemerval Zanella March 27, 2025, 2:16 p.m. UTC
POSIX.1-2024 added getentropy with some slight different semantics:

  1. Buffer larger than 256 (GETENTROPY_MAX) should return EINVAL
     insted of EIO.

  2. There is no defined error if no entropy could be obtained.
     It means that the function should not fail.

For change 1. a new compat symbol is added to return EIO for large
buffer, while for 2. both old and new symbol will abort the process.
Running an older application on a newer glibc should bring about the
security benefits of the new glibc, and recent kernels on most
architecture do ensure that getrandom will always return at least
256 bytes of entropy (there are projects like Haveged for the case
where kernel can not provide such guarantee).

This patch does not move getentropy definition to unistd.h not
add GETENTROPY_MAX on limits.h, since glibc still does not have a
preprocessor handling for POSIX 2024.

The consolidation uses __getrandom_nocancel, which might uses
the vDSO implementation if supported.

Checked on x86_64-linux-gnu.

--
Changes from v1:
* Added a compat symbol to handle the EIO->EINVAL change.
* Move getentropy tests from tst-getrandom.c to tst-getentropy.c
  and added a compat test.
---
 NEWS                                          |   4 +-
 manual/crypt.texi                             |   2 +-
 stdlib/Makefile                               |   8 ++
 stdlib/Versions                               |   3 +
 stdlib/getentropy.c                           |  68 ++++++++++-
 stdlib/tst-getentropy-compat.c                |  26 +++++
 stdlib/tst-getentropy.c                       | 108 ++++++++++++++++++
 stdlib/tst-getrandom.c                        |  71 +-----------
 sysdeps/mach/hurd/getentropy.c                |  59 ----------
 sysdeps/mach/hurd/i386/libc.abilist           |   3 +-
 sysdeps/mach/hurd/x86_64/libc.abilist         |   1 +
 sysdeps/unix/sysv/linux/aarch64/libc.abilist  |   1 +
 sysdeps/unix/sysv/linux/alpha/libc.abilist    |   1 +
 sysdeps/unix/sysv/linux/arc/libc.abilist      |   1 +
 sysdeps/unix/sysv/linux/arm/be/libc.abilist   |   1 +
 sysdeps/unix/sysv/linux/arm/le/libc.abilist   |   1 +
 sysdeps/unix/sysv/linux/csky/libc.abilist     |   1 +
 sysdeps/unix/sysv/linux/getentropy.c          |  65 -----------
 sysdeps/unix/sysv/linux/hppa/libc.abilist     |   1 +
 sysdeps/unix/sysv/linux/i386/libc.abilist     |   1 +
 .../sysv/linux/loongarch/lp64/libc.abilist    |   1 +
 .../sysv/linux/m68k/coldfire/libc.abilist     |   1 +
 .../unix/sysv/linux/m68k/m680x0/libc.abilist  |   1 +
 .../sysv/linux/microblaze/be/libc.abilist     |   1 +
 .../sysv/linux/microblaze/le/libc.abilist     |   1 +
 .../sysv/linux/mips/mips32/fpu/libc.abilist   |   1 +
 .../sysv/linux/mips/mips64/n32/libc.abilist   |   1 +
 .../sysv/linux/mips/mips64/n64/libc.abilist   |   1 +
 sysdeps/unix/sysv/linux/or1k/libc.abilist     |   1 +
 .../linux/powerpc/powerpc32/fpu/libc.abilist  |   1 +
 .../powerpc/powerpc32/nofpu/libc.abilist      |   1 +
 .../linux/powerpc/powerpc64/be/libc.abilist   |   1 +
 .../linux/powerpc/powerpc64/le/libc.abilist   |   1 +
 .../unix/sysv/linux/riscv/rv32/libc.abilist   |   1 +
 .../unix/sysv/linux/riscv/rv64/libc.abilist   |   1 +
 .../unix/sysv/linux/s390/s390-32/libc.abilist |   1 +
 .../unix/sysv/linux/s390/s390-64/libc.abilist |   1 +
 sysdeps/unix/sysv/linux/sh/be/libc.abilist    |   1 +
 sysdeps/unix/sysv/linux/sh/le/libc.abilist    |   1 +
 .../sysv/linux/sparc/sparc32/libc.abilist     |   1 +
 .../sysv/linux/sparc/sparc64/libc.abilist     |   1 +
 .../unix/sysv/linux/x86_64/64/libc.abilist    |   1 +
 .../unix/sysv/linux/x86_64/x32/libc.abilist   |   1 +
 43 files changed, 246 insertions(+), 203 deletions(-)
 create mode 100644 stdlib/tst-getentropy-compat.c
 create mode 100644 stdlib/tst-getentropy.c
 delete mode 100644 sysdeps/mach/hurd/getentropy.c
 delete mode 100644 sysdeps/unix/sysv/linux/getentropy.c

Comments

Andreas Schwab March 27, 2025, 2:29 p.m. UTC | #1
On Mär 27 2025, Adhemerval Zanella wrote:

>   2. There is no defined error if no entropy could be obtained.
>      It means that the function should not fail.

The standard says:

        The getentropy() function may fail if:

        [ENOSYS]
                The system does not provide the necessary source of entropy.
Adhemerval Zanella March 27, 2025, 3:16 p.m. UTC | #2
On 27/03/25 11:29, Andreas Schwab wrote:
> On Mär 27 2025, Adhemerval Zanella wrote:
> 
>>   2. There is no defined error if no entropy could be obtained.
>>      It means that the function should not fail.
> 
> The standard says:
> 
>         The getentropy() function may fail if:
> 
>         [ENOSYS]
>                 The system does not provide the necessary source of entropy.
> 

The code still returns ENOSYS if getrandom() is not supported.  The question
is how to handle unexpected getrandom() issues (which should be possible
in theory).  Should I change to just return ENOSYS in this case?
Mark Harris March 29, 2025, 4:03 a.m. UTC | #3
On Thu, Mar 27, 2025, Adhemerval Zanella Netto wrote:
> On 27/03/25 11:29, Andreas Schwab wrote:
> > On Mär 27 2025, Adhemerval Zanella wrote:
> >
> >>   2. There is no defined error if no entropy could be obtained.
> >>      It means that the function should not fail.
> >
> > The standard says:
> >
> >         The getentropy() function may fail if:
> >
> >         [ENOSYS]
> >                 The system does not provide the necessary source of entropy.
> >
>
> The code still returns ENOSYS if getrandom() is not supported.  The question
> is how to handle unexpected getrandom() issues (which should be possible
> in theory).  Should I change to just return ENOSYS in this case?

POSIX does not restrict errors to those specifically listed.
Specifically, section 2.3 Error Numbers states:

Implementations shall not generate a different error number from one
required by this volume of POSIX.1-2024 for an error condition
described in this volume of POSIX.1-2024, but may generate additional
errors unless explicitly disallowed for a particular function.
<https://pubs.opengroup.org/onlinepubs/9799919799/functions/V2_chap02.html#tag_16_03>

It appears from the current and historical kernel code that the only
errors that could be produced by the mainline Linux kernel for the
getrandom() system call or vDSO with flags = 0 are ENOSYS, EINTR, and
EFAULT.  (If the vDSO is used then it may produce a segmentation fault
rather than EFAULT.)  In the proposed patch, ENOSYS and EINTR are
handled explicitly, and EFAULT and any other error results in
__libc_fatal ("Fatal glibc error: cannot get entropy for
getentropy\n").  The message seems misleading, because it suggests an
issue with the entropy gathering code, whereas EFAULT is much more
likely to be caused by a bug in the user code.

Is there a reason to not just return the kernel-provided errno when it
is not EINTR (whether it is ENOSYS or EFAULT, or something
unexpected), as the current implementation does?  Glibc propagates
EFAULT and Linux-specific errors from other POSIX-defined functions
even though POSIX does not specifically list them.


 - Mark
Florian Weimer March 29, 2025, 11:14 a.m. UTC | #4
* Mark Harris:

> Is there a reason to not just return the kernel-provided errno when it
> is not EINTR (whether it is ENOSYS or EFAULT, or something
> unexpected), as the current implementation does?  Glibc propagates
> EFAULT and Linux-specific errors from other POSIX-defined functions
> even though POSIX does not specifically list them.

If we pass through ENOSYS as an error code (which is hard to test for
in practice), I think we can pass through any other error code as
well.  The process termination thing only makes sense if there's no
possibility of environmental errors at all (errors not related to how
the function is used at the call site).
Andreas Schwab March 31, 2025, 7:50 a.m. UTC | #5
On Mär 28 2025, Mark Harris wrote:

> On Thu, Mar 27, 2025, Adhemerval Zanella Netto wrote:
>> On 27/03/25 11:29, Andreas Schwab wrote:
>> > On Mär 27 2025, Adhemerval Zanella wrote:
>> >
>> >>   2. There is no defined error if no entropy could be obtained.
>> >>      It means that the function should not fail.
>> >
>> > The standard says:
>> >
>> >         The getentropy() function may fail if:
>> >
>> >         [ENOSYS]
>> >                 The system does not provide the necessary source of entropy.
>> >
>>
>> The code still returns ENOSYS if getrandom() is not supported.  The question
>> is how to handle unexpected getrandom() issues (which should be possible
>> in theory).  Should I change to just return ENOSYS in this case?
>
> POSIX does not restrict errors to those specifically listed.

And for errors it does list, the implementation is required to use it
for the described error situation.
diff mbox series

Patch

diff --git a/NEWS b/NEWS
index c2a978b460..43893e6d5a 100644
--- a/NEWS
+++ b/NEWS
@@ -20,7 +20,9 @@  Major new features:
 
 Deprecated and removed features, and other changes affecting compatibility:
 
-  [Add deprecations, removals and changes affecting compatibility here]
+* The getentropy function now follows POSIX 2024, which means that
+  unsupportd large buffer will return EINVAL and the function will
+  abort the process if there is no entropy available in the system.
 
 Changes to build and runtime requirements:
 
diff --git a/manual/crypt.texi b/manual/crypt.texi
index 4882ee34e5..ce68f2853a 100644
--- a/manual/crypt.texi
+++ b/manual/crypt.texi
@@ -73,7 +73,7 @@  used by this function was added to the Linux kernel in version 3.17.)
 The combination of @var{buffer} and @var{length} arguments specifies
 an invalid memory range.
 
-@item EIO
+@item EINVAL
 @var{length} is larger than 256, or the kernel entropy pool has
 suffered a catastrophic failure.
 @end table
diff --git a/stdlib/Makefile b/stdlib/Makefile
index c9c8f702a2..6a5a2f610d 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -281,6 +281,7 @@  tests := \
   tst-environ-change-2 \
   tst-environ-change-3 \
   tst-environ-change-4 \
+  tst-getentropy \
   tst-getenv-signal \
   tst-getenv-static \
   tst-getenv-thread \
@@ -392,6 +393,13 @@  tests += \
   # tests
 endif
 
+# Test for the getentropy symbol versions required for POSIX 2024
+ifeq ($(have-GLIBC_2.42)$(build-shared),yesyes)
+tests += \
+  tst-getentropy-compat \
+  # tests
+endif
+
 LDLIBS-test-atexit-race = $(shared-thread-library)
 LDLIBS-test-at_quick_exit-race = $(shared-thread-library)
 LDLIBS-test-cxa_atexit-race = $(shared-thread-library)
diff --git a/stdlib/Versions b/stdlib/Versions
index ea2265bbd4..9b5e186db0 100644
--- a/stdlib/Versions
+++ b/stdlib/Versions
@@ -223,6 +223,9 @@  libc {
     stdc_bit_ceil_ul;
     stdc_bit_ceil_ull;
   }
+  GLIBC_2.42 {
+    getentropy;
+  }
   GLIBC_PRIVATE {
     # functions which have an additional interface since they are
     # are cancelable.
diff --git a/stdlib/getentropy.c b/stdlib/getentropy.c
index 5149fbdde0..f55cf879a7 100644
--- a/stdlib/getentropy.c
+++ b/stdlib/getentropy.c
@@ -16,16 +16,72 @@ 
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#include <sys/random.h>
+#include <stdio.h>
 #include <errno.h>
+#include <not-cancel.h>
+#include <sys/random.h>
+#include <shlib-compat.h>
+
+static void
+getentropy_fatal (void)
+{
+  __libc_fatal ("Fatal glibc error: cannot get entropy for getentropy\n");
+}
 
 /* Write LENGTH bytes of randomness starting at BUFFER.  Return 0 on
    success and -1 on failure.  */
-int
-getentropy (void *buffer, size_t length)
+static int
+getentropy_base (void *buffer, size_t length, int err)
 {
-  __set_errno (ENOSYS);
-  return -1;
+  if (length > 256)
+    {
+      __set_errno (err);
+      return -1;
+    }
+
+  /* Try to fill the buffer completely.  Even with the 256 byte limit
+     above, we might still receive an EINTR error (when blocking
+     during boot).  */
+  void *end = buffer + length;
+  while (buffer < end)
+    {
+      /* NB: No cancellation point.  */
+      ssize_t bytes = __getrandom_nocancel (buffer, end - buffer, 0);
+      if (bytes < 0)
+        {
+	  switch (errno)
+	    {
+	    case EINTR:
+	      continue;
+	    case ENOSYS:
+	      return -1;
+	    default:
+	      getentropy_fatal ();
+	    }
+        }
+      else if (bytes == 0)
+        /* No more bytes available.  This should not happen under normal
+	   circumstances.  */
+	getentropy_fatal ();
+
+      /* Try again in case of a short read.  */
+      buffer += bytes;
+    }
+  return 0;
 }
 
-stub_warning (getentropy)
+int
+__new_getentropy (void *buffer, size_t length)
+{
+  return getentropy_base (buffer, length, EINVAL);
+}
+versioned_symbol (libc, __new_getentropy, getentropy, GLIBC_2_42);
+
+#if SHLIB_COMPAT (libc, GLIBC_2_25, GLIBC_2_42)
+int
+__old_getentropy (void *buffer, size_t length)
+{
+  return getentropy_base (buffer, length, EIO);
+}
+compat_symbol (libc, __old_getentropy, getentropy, GLIBC_2_25);
+#endif
diff --git a/stdlib/tst-getentropy-compat.c b/stdlib/tst-getentropy-compat.c
new file mode 100644
index 0000000000..388edda7e0
--- /dev/null
+++ b/stdlib/tst-getentropy-compat.c
@@ -0,0 +1,26 @@ 
+/* Compat tests for the getentropy function.
+   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/>.  */
+
+#include <sys/random.h>
+
+#include <shlib-compat.h>
+
+compat_symbol_reference (libc, getentropy, getentropy, GLIBC_2_25);
+
+#define ERRNO_BUFFER_TO_LARGE EIO
+#include "tst-getentropy.c"
diff --git a/stdlib/tst-getentropy.c b/stdlib/tst-getentropy.c
new file mode 100644
index 0000000000..eef57fca2c
--- /dev/null
+++ b/stdlib/tst-getentropy.c
@@ -0,0 +1,108 @@ 
+/* Tests for the getentropy function.
+   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/>.  */
+
+#include <errno.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/random.h>
+
+#ifndef ERRNO_BUFFER_TO_LARGE
+# define ERRNO_BUFFER_TO_LARGE EINVAL
+#endif
+
+/* Set to true if any errors are encountered.  */
+static bool errors;
+
+static void
+test_getentropy (void)
+{
+  char buf[16];
+  memset (buf, '@', sizeof (buf));
+  if (getentropy (buf, 0) != 0)
+    {
+      printf ("error: getentropy zero length: %m\n");
+      errors = true;
+      return;
+    }
+  for (size_t i = 0; i < sizeof (buf); ++i)
+    if (buf[i] != '@')
+      {
+        printf ("error: getentropy modified zero-length buffer\n");
+        errors = true;
+        return;
+      }
+
+  if (getentropy (buf, sizeof (buf)) != 0)
+    {
+      printf ("error: getentropy buf: %m\n");
+      errors = true;
+      return;
+    }
+
+  char buf2[256];
+  _Static_assert (sizeof (buf) < sizeof (buf2), "buf and buf2 compatible");
+  memset (buf2, '@', sizeof (buf2));
+  if (getentropy (buf2, sizeof (buf)) != 0)
+    {
+      printf ("error: getentropy buf2: %m\n");
+      errors = true;
+      return;
+    }
+
+  /* The probability that these two buffers are equal is very
+     small. */
+  if (memcmp (buf, buf2, sizeof (buf)) == 0)
+    {
+      printf ("error: getentropy appears to return constant bytes\n");
+      errors = true;
+      return;
+    }
+
+  for (size_t i = sizeof (buf); i < sizeof (buf2); ++i)
+    if (buf2[i] != '@')
+      {
+        printf ("error: getentropy wrote beyond the end of the buffer\n");
+        errors = true;
+        return;
+      }
+
+  char buf3[257];
+  if (getentropy (buf3, sizeof (buf3)) == 0)
+    {
+      printf ("error: getentropy successful for 257 byte buffer\n");
+      errors = true;
+      return;
+    }
+  if (errno != ERRNO_BUFFER_TO_LARGE)
+    {
+      printf ("error: getentropy wrong error for 257 byte buffer: %m\n");
+      errors = true;
+      return;
+    }
+}
+
+static int
+do_test (void)
+{
+  test_getentropy ();
+
+  return errors;
+}
+
+#include <support/test-driver.c>
diff --git a/stdlib/tst-getrandom.c b/stdlib/tst-getrandom.c
index 3b2153376b..e8b3392db5 100644
--- a/stdlib/tst-getrandom.c
+++ b/stdlib/tst-getrandom.c
@@ -1,4 +1,4 @@ 
-/* Tests for the getentropy, getrandom functions.
+/* Tests for the getrandom functions.
    Copyright (C) 2016-2025 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -151,73 +151,6 @@  test_flags (unsigned int flags)
     }
 }
 
-static void
-test_getentropy (void)
-{
-  char buf[16];
-  memset (buf, '@', sizeof (buf));
-  if (getentropy (buf, 0) != 0)
-    {
-      printf ("error: getentropy zero length: %m\n");
-      errors = true;
-      return;
-    }
-  for (size_t i = 0; i < sizeof (buf); ++i)
-    if (buf[i] != '@')
-      {
-        printf ("error: getentropy modified zero-length buffer\n");
-        errors = true;
-        return;
-      }
-
-  if (getentropy (buf, sizeof (buf)) != 0)
-    {
-      printf ("error: getentropy buf: %m\n");
-      errors = true;
-      return;
-    }
-
-  char buf2[256];
-  _Static_assert (sizeof (buf) < sizeof (buf2), "buf and buf2 compatible");
-  memset (buf2, '@', sizeof (buf2));
-  if (getentropy (buf2, sizeof (buf)) != 0)
-    {
-      printf ("error: getentropy buf2: %m\n");
-      errors = true;
-      return;
-    }
-
-  /* The probability that these two buffers are equal is very
-     small. */
-  if (memcmp (buf, buf2, sizeof (buf)) == 0)
-    {
-      printf ("error: getentropy appears to return constant bytes\n");
-      errors = true;
-      return;
-    }
-
-  for (size_t i = sizeof (buf); i < sizeof (buf2); ++i)
-    if (buf2[i] != '@')
-      {
-        printf ("error: getentropy wrote beyond the end of the buffer\n");
-        errors = true;
-        return;
-      }
-
-  char buf3[257];
-  if (getentropy (buf3, sizeof (buf3)) == 0)
-    {
-      printf ("error: getentropy successful for 257 byte buffer\n");
-      errors = true;
-      return;
-    }
-  if (errno != EIO)
-    {
-      printf ("error: getentropy wrong error for 257 byte buffer: %m\n");
-      errors = true;
-      return;
-    }
-}
 
 static int
 do_test (void)
@@ -237,8 +170,6 @@  do_test (void)
         test_flags (flags);
       }
 
-  test_getentropy ();
-
   return errors;
 }
 
diff --git a/sysdeps/mach/hurd/getentropy.c b/sysdeps/mach/hurd/getentropy.c
deleted file mode 100644
index 6ad8acc773..0000000000
--- a/sysdeps/mach/hurd/getentropy.c
+++ /dev/null
@@ -1,59 +0,0 @@ 
-/* Implementation of getentropy based on getrandom.
-   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/>.  */
-
-#include <sys/random.h>
-#include <assert.h>
-#include <errno.h>
-#include <unistd.h>
-#include <hurd.h>
-
-/* Write LENGTH bytes of randomness starting at BUFFER.  Return 0 on
-   success and -1 on failure.  */
-int
-getentropy (void *buffer, size_t length)
-{
-  /* The interface is documented to return EIO for buffer lengths
-     longer than 256 bytes.  */
-  if (length > 256)
-    return __hurd_fail (EIO);
-
-  /* Try to fill the buffer completely.  Even with the 256 byte limit
-     above, we might still receive an EINTR error (when blocking
-     during boot).  */
-  void *end = buffer + length;
-  while (buffer < end)
-    {
-      /* NB: No cancellation point.  */
-      ssize_t bytes = __getrandom (buffer, end - buffer, 0);
-      if (bytes < 0)
-        {
-          if (errno == EINTR)
-            /* Try again if interrupted by a signal.  */
-            continue;
-          else
-            return -1;
-        }
-      if (bytes == 0)
-        /* No more bytes available.  This should not happen under
-           normal circumstances.  */
-        return __hurd_fail (EIO);
-      /* Try again in case of a short read.  */
-      buffer += bytes;
-    }
-  return 0;
-}
diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
index 0b963dc890..eb27e2375b 100644
--- a/sysdeps/mach/hurd/i386/libc.abilist
+++ b/sysdeps/mach/hurd/i386/libc.abilist
@@ -686,7 +686,7 @@  GLIBC_2.2.6 _libc_intl_domainname D 0x5
 GLIBC_2.2.6 _longjmp F
 GLIBC_2.2.6 _mcleanup F
 GLIBC_2.2.6 _mcount F
-GLIBC_2.2.6 _nl_default_dirname D 0xe
+GLIBC_2.2.6 _nl_default_dirname D 0x12
 GLIBC_2.2.6 _nl_domain_bindings D 0x4
 GLIBC_2.2.6 _nl_msg_cat_cntr D 0x4
 GLIBC_2.2.6 _null_auth D 0xc
@@ -2586,6 +2586,7 @@  GLIBC_2.41 pthread_mutexattr_settype F
 GLIBC_2.41 pthread_sigmask F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_barrier_destroy F
 GLIBC_2.42 pthread_barrier_init F
 GLIBC_2.42 pthread_barrier_wait F
diff --git a/sysdeps/mach/hurd/x86_64/libc.abilist b/sysdeps/mach/hurd/x86_64/libc.abilist
index b9e9349b9d..e665e2d3c5 100644
--- a/sysdeps/mach/hurd/x86_64/libc.abilist
+++ b/sysdeps/mach/hurd/x86_64/libc.abilist
@@ -2269,6 +2269,7 @@  GLIBC_2.41 pthread_mutexattr_settype F
 GLIBC_2.41 pthread_sigmask F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_barrier_destroy F
 GLIBC_2.42 pthread_barrier_init F
 GLIBC_2.42 pthread_barrier_wait F
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 41f8f39911..bed8fa4b22 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2752,4 +2752,5 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 34efc96781..a013ea0a28 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -3099,6 +3099,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index de7c618d28..0761a2384a 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -2513,4 +2513,5 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index 96f0314b16..064a6e68ad 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -2805,6 +2805,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 635468fa13..24439791d2 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -2802,6 +2802,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 490694ddce..6abf9beb5e 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2789,4 +2789,5 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
diff --git a/sysdeps/unix/sysv/linux/getentropy.c b/sysdeps/unix/sysv/linux/getentropy.c
deleted file mode 100644
index a62c9fb099..0000000000
--- a/sysdeps/unix/sysv/linux/getentropy.c
+++ /dev/null
@@ -1,65 +0,0 @@ 
-/* Implementation of getentropy based on the getrandom system call.
-   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/>.  */
-
-#include <sys/random.h>
-#include <assert.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sysdep.h>
-
-/* Write LENGTH bytes of randomness starting at BUFFER.  Return 0 on
-   success and -1 on failure.  */
-int
-getentropy (void *buffer, size_t length)
-{
-  /* The interface is documented to return EIO for buffer lengths
-     longer than 256 bytes.  */
-  if (length > 256)
-    {
-      __set_errno (EIO);
-      return -1;
-    }
-
-  /* Try to fill the buffer completely.  Even with the 256 byte limit
-     above, we might still receive an EINTR error (when blocking
-     during boot).  */
-  void *end = buffer + length;
-  while (buffer < end)
-    {
-      /* NB: No cancellation point.  */
-      ssize_t bytes = INLINE_SYSCALL_CALL (getrandom, buffer, end - buffer, 0);
-      if (bytes < 0)
-        {
-          if (errno == EINTR)
-            /* Try again if interrupted by a signal.  */
-            continue;
-          else
-            return -1;
-        }
-      if (bytes == 0)
-        {
-          /* No more bytes available.  This should not happen under
-             normal circumstances.  */
-          __set_errno (EIO);
-          return -1;
-        }
-      /* Try again in case of a short read.  */
-      buffer += bytes;
-    }
-  return 0;
-}
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index b1905da767..f76104d173 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2826,6 +2826,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 424ef34a8b..e2d0dc47b1 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -3009,6 +3009,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
index 420471eb24..602cd69707 100644
--- a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
@@ -2273,4 +2273,5 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index 95a68c7cc1..935efc7a53 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -2785,6 +2785,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 442e82b6d2..7280be509a 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2952,6 +2952,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 20f7712988..d6192e448b 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2838,4 +2838,5 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index f61ed3bf26..dd691240f8 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2835,4 +2835,5 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index 381120cc16..c721fe6050 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2913,6 +2913,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index e6071be2ae..11f7928eed 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2919,6 +2919,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index f41e209a2b..5eff7490ad 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2821,6 +2821,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
index bbcdb31f09..9eb9986e78 100644
--- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
+++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
@@ -2263,4 +2263,5 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index e0ea22b9c6..09a5911d17 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -3142,6 +3142,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 16b9a771f1..30f941b6f5 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -3187,6 +3187,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index 070f6f5a08..ee105dd5b0 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2896,6 +2896,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 4378d1d922..9fc6e44249 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2972,4 +2972,5 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 48c6e269a5..958160f764 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -2516,4 +2516,5 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index a8b0c6aca7..6db17524b2 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2716,4 +2716,5 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 6c00b8440b..0c3ab7b23a 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -3140,6 +3140,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index f866e5d6f3..3d7e3a311e 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2933,6 +2933,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index 4f2db8cb9b..e9d3441e20 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2832,6 +2832,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index a73473ee32..1992a68b75 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2829,6 +2829,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index dc7e27db2a..6f4ffa5622 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -3161,6 +3161,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 2ee97f42fb..5f1285bb75 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2797,6 +2797,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index a7ada1ea53..e025767bc2 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2748,6 +2748,7 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F
 GLIBC_2.5 __readlinkat_chk F
 GLIBC_2.5 inet6_opt_append F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index f41ab77c1e..54e76db679 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2767,4 +2767,5 @@  GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
 GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 __inet_pton_chk F
+GLIBC_2.42 getentropy F
 GLIBC_2.42 pthread_gettid_np F