diff mbox series

[3/3] Add _FORTIFY_SOURCE support for inet_ntop

Message ID 20250317124819.1010779-4-fberat@redhat.com
State New
Headers show
Series Add _FORTIFY_SOURCE support for inet_ntop | expand

Commit Message

Frederic Berat March 17, 2025, 12:48 p.m. UTC
- Create the __inet_ntop_chk routine that verifies that the builtin size
of the destination buffer is at least as big as the size given by the
user.
- Redirect calls from inet_ntop to __inet_ntop_chk or __inet_ntop_warn
- Update the abilist for this new routine
- Update man pages to mention the new fortification
---
 debug/Makefile                                |  1 +
 debug/Versions                                |  3 ++
 debug/inet_ntop_chk.c                         | 30 ++++++++++++++
 debug/tst-fortify.c                           | 21 ++++++++++
 include/arpa/inet.h                           |  4 ++
 include/bits/inet-fortified-decl.h            |  1 +
 include/bits/inet-fortified.h                 |  1 +
 inet/Makefile                                 |  2 +
 inet/arpa/inet.h                              |  6 ++-
 inet/bits/inet-fortified-decl.h               | 35 ++++++++++++++++
 inet/bits/inet-fortified.h                    | 41 +++++++++++++++++++
 manual/maint.texi                             |  2 +
 sysdeps/mach/hurd/i386/libc.abilist           |  1 +
 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/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/mips32/nofpu/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 +
 46 files changed, 180 insertions(+), 1 deletion(-)
 create mode 100644 debug/inet_ntop_chk.c
 create mode 100644 include/bits/inet-fortified-decl.h
 create mode 100644 include/bits/inet-fortified.h
 create mode 100644 inet/bits/inet-fortified-decl.h
 create mode 100644 inet/bits/inet-fortified.h

Comments

Cristian Rodríguez March 17, 2025, 1:42 p.m. UTC | #1
On Mon, Mar 17, 2025 at 9:52 AM Frédéric Bérat <fberat@redhat.com> wrote:
>
> - Create the __inet_ntop_chk routine that verifies that the builtin size
> of the destination buffer is at least as big as the size given by the
> user.

> +const char *
> +__inet_ntop_chk (int af, const void *src, char *dst,
> +                socklen_t size, size_t dst_size)
> +{
> +  if (size > dst_size)
> +    __chk_fail ();
> +

Just a tiny suggestion/request.  __chk_fail (); is very generic and
user unfriendly, please use something like __libc_fatal("inet_ntop
destination buffer is too small") or something meaningful.
Frederic Berat March 18, 2025, 9:49 a.m. UTC | #2
On Mon, Mar 17, 2025 at 2:43 PM Cristian Rodríguez <cristian@rodriguez.im>
wrote:

> On Mon, Mar 17, 2025 at 9:52 AM Frédéric Bérat <fberat@redhat.com> wrote:
> >
> > - Create the __inet_ntop_chk routine that verifies that the builtin size
> > of the destination buffer is at least as big as the size given by the
> > user.
>
> > +const char *
> > +__inet_ntop_chk (int af, const void *src, char *dst,
> > +                socklen_t size, size_t dst_size)
> > +{
> > +  if (size > dst_size)
> > +    __chk_fail ();
> > +
>
> Just a tiny suggestion/request.  __chk_fail (); is very generic and
> user unfriendly, please use something like __libc_fatal("inet_ntop
> destination buffer is too small") or something meaningful.
>

Fair enough, I merely followed the pattern I've seen on other checks, I'm
fine to change that.
I'll wait for a bit more feedback before sending a v2.
Florian Weimer March 18, 2025, 11:53 a.m. UTC | #3
* Frederic Berat:

> On Mon, Mar 17, 2025 at 2:43 PM Cristian Rodríguez <cristian@rodriguez.im> wrote:
>
>> On Mon, Mar 17, 2025 at 9:52 AM Frédéric Bérat <fberat@redhat.com> wrote:
>> >
>> > - Create the __inet_ntop_chk routine that verifies that the builtin size
>> > of the destination buffer is at least as big as the size given by the
>> > user.
>>
>> > +const char *
>> > +__inet_ntop_chk (int af, const void *src, char *dst,
>> > +                socklen_t size, size_t dst_size)
>> > +{
>> > +  if (size > dst_size)
>> > +    __chk_fail ();
>> > +
>>
>> Just a tiny suggestion/request.  __chk_fail (); is very generic and
>> user unfriendly, please use something like __libc_fatal("inet_ntop
>> destination buffer is too small") or something meaningful.
>
> Fair enough, I merely followed the pattern I've seen on other checks,
> I'm fine to change that.  I'll wait for a bit more feedback before
> sending a v2.

We should fix this more globally, and not for just for this function.
You can keep using __chk_fail for this change.

Thanks,
Florian
Florian Weimer March 18, 2025, 12:08 p.m. UTC | #4
* Frédéric Bérat:

> - Create the __inet_ntop_chk routine that verifies that the builtin size
> of the destination buffer is at least as big as the size given by the
> user.
> - Redirect calls from inet_ntop to __inet_ntop_chk or __inet_ntop_warn
> - Update the abilist for this new routine
> - Update man pages to mention the new fortification

Update [the manual] to mention the new fortification

(Manpages are a separate project.)

> diff --git a/debug/tst-fortify.c b/debug/tst-fortify.c
> index f8ccc2dff5..128f271c03 100644
> --- a/debug/tst-fortify.c
> +++ b/debug/tst-fortify.c
> @@ -23,6 +23,7 @@
>  
>  #include <assert.h>
>  #include <fcntl.h>
> +#include <arpa/inet.h>
>  #include <limits.h>
>  #include <locale.h>
>  #include <obstack.h>
> @@ -1832,6 +1833,26 @@ do_test (void)
>  # endif
>  #endif
>  
> +  struct in6_addr addr6;
> +  struct in_addr addr;
> +  char addrstr6[INET6_ADDRSTRLEN];
> +  char addrstr[INET_ADDRSTRLEN];
> +
> +  if (inet_ntop (AF_INET6, &addr6, addrstr6, sizeof (addrstr6)) == NULL)
> +    FAIL ();
> +  if (inet_ntop (AF_INET, &addr, addrstr, sizeof (addrstr)) == NULL)
> +    FAIL ();

Doesn't this use uninitialized inputs?  Maybe add an initialization to
addr, addr6.

> +
> +#if __USE_FORTIFY_LEVEL >= 1
> +  CHK_FAIL_START
> +  inet_ntop (AF_INET6, &addr6, buf, INET6_ADDRSTRLEN);
> +  CHK_FAIL_END
> +
> +  CHK_FAIL_START
> +  inet_ntop (AF_INET, &addr, buf, INET_ADDRSTRLEN);
> +  CHK_FAIL_END
> +#endif

(buf is just 10 bytes, so both INET6_ADDRSTRLEN and INET_ADDRSTRLEN will
trap.)

> diff --git a/include/arpa/inet.h b/include/arpa/inet.h
> index f389c28cb2..d8afbf259b 100644
> --- a/include/arpa/inet.h
> +++ b/include/arpa/inet.h
> @@ -3,12 +3,16 @@
>  #include <inet/arpa/inet.h>
>  
>  #ifndef _ISOMAC
> +/* Declare functions with security checks.  */
> +#include <bits/inet-fortified-decl.h>

Why is this necessary?  Wouldn't this included by <inet/arpa/inet.h>
above?  Is this to check that the declaration matches the definition?

> diff --git a/inet/arpa/inet.h b/inet/arpa/inet.h
> index 42d38c330d..d381df7066 100644
> --- a/inet/arpa/inet.h
> +++ b/inet/arpa/inet.h
> @@ -65,7 +65,6 @@ extern const char *inet_ntop (int __af, const void *__restrict __cp,
>  			      char *__restrict __buf, socklen_t __len)
>       __THROW;
>  
> -

Spurious whitespace change.

> diff --git a/inet/bits/inet-fortified.h b/inet/bits/inet-fortified.h
> new file mode 100644
> index 0000000000..86b6d56d7b
> --- /dev/null
> +++ b/inet/bits/inet-fortified.h

> +__fortify_function __attribute_overloadable__ const char *
> +__NTH (inet_ntop (int __af,
> +	   __fortify_clang_overload_arg (const void *, __restrict, __src),
> +	   char *__restrict __dst, socklen_t __dst_size))
> +    __fortify_clang_warning_only_if_bos_lt(__dst_size, __dst,
> +					   "inet_ntop called with bigger length "
> +					   "than size of destination buffer")
> +{
> +  return __glibc_fortify (inet_ntop, __dst_size, sizeof(char),
> +			  __glibc_objsize(__dst),
> +			  __af, __src, __dst, __dst_size);

Missing whitespace before various '('.

Thanks,
Florian
Frederic Berat March 18, 2025, 1:26 p.m. UTC | #5
On Tue, Mar 18, 2025 at 1:08 PM Florian Weimer <fweimer@redhat.com> wrote:

> * Frédéric Bérat:
>
> > - Create the __inet_ntop_chk routine that verifies that the builtin size
> > of the destination buffer is at least as big as the size given by the
> > user.
> > - Redirect calls from inet_ntop to __inet_ntop_chk or __inet_ntop_warn
> > - Update the abilist for this new routine
> > - Update man pages to mention the new fortification
>
> Update [the manual] to mention the new fortification
>
> (Manpages are a separate project.)
>

Noted.


>
> > diff --git a/debug/tst-fortify.c b/debug/tst-fortify.c
> > index f8ccc2dff5..128f271c03 100644
> > --- a/debug/tst-fortify.c
> > +++ b/debug/tst-fortify.c
> > @@ -23,6 +23,7 @@
> >
> >  #include <assert.h>
> >  #include <fcntl.h>
> > +#include <arpa/inet.h>
> >  #include <limits.h>
> >  #include <locale.h>
> >  #include <obstack.h>
> > @@ -1832,6 +1833,26 @@ do_test (void)
> >  # endif
> >  #endif
> >
> > +  struct in6_addr addr6;
> > +  struct in_addr addr;
> > +  char addrstr6[INET6_ADDRSTRLEN];
> > +  char addrstr[INET_ADDRSTRLEN];
> > +
> > +  if (inet_ntop (AF_INET6, &addr6, addrstr6, sizeof (addrstr6)) == NULL)
> > +    FAIL ();
> > +  if (inet_ntop (AF_INET, &addr, addrstr, sizeof (addrstr)) == NULL)
> > +    FAIL ();
>
> Doesn't this use uninitialized inputs?  Maybe add an initialization to
> addr, addr6.
>
>
I will.


> > +
> > +#if __USE_FORTIFY_LEVEL >= 1
> > +  CHK_FAIL_START
> > +  inet_ntop (AF_INET6, &addr6, buf, INET6_ADDRSTRLEN);
> > +  CHK_FAIL_END
> > +
> > +  CHK_FAIL_START
> > +  inet_ntop (AF_INET, &addr, buf, INET_ADDRSTRLEN);
> > +  CHK_FAIL_END
> > +#endif
>
> (buf is just 10 bytes, so both INET6_ADDRSTRLEN and INET_ADDRSTRLEN will
> trap.)
>
> > diff --git a/include/arpa/inet.h b/include/arpa/inet.h
> > index f389c28cb2..d8afbf259b 100644
> > --- a/include/arpa/inet.h
> > +++ b/include/arpa/inet.h
> > @@ -3,12 +3,16 @@
> >  #include <inet/arpa/inet.h>
> >
> >  #ifndef _ISOMAC
> > +/* Declare functions with security checks.  */
> > +#include <bits/inet-fortified-decl.h>
>
> Why is this necessary?  Wouldn't this included by <inet/arpa/inet.h>
> above?  Is this to check that the declaration matches the definition?
>
>
The inet-fortified-decl.h is included by inet-fortified.h which itself is
only included if FORITIFY_SOURCE is non-zero while this header needs to be
included unconditionally (otherwise build would fail when fortification is
disabled).


> > diff --git a/inet/arpa/inet.h b/inet/arpa/inet.h
> > index 42d38c330d..d381df7066 100644
> > --- a/inet/arpa/inet.h
> > +++ b/inet/arpa/inet.h
> > @@ -65,7 +65,6 @@ extern const char *inet_ntop (int __af, const void
> *__restrict __cp,
> >                             char *__restrict __buf, socklen_t __len)
> >       __THROW;
> >
> > -
>
> Spurious whitespace change.
>
>
Noted.


> > diff --git a/inet/bits/inet-fortified.h b/inet/bits/inet-fortified.h
> > new file mode 100644
> > index 0000000000..86b6d56d7b
> > --- /dev/null
> > +++ b/inet/bits/inet-fortified.h
>
> > +__fortify_function __attribute_overloadable__ const char *
> > +__NTH (inet_ntop (int __af,
> > +        __fortify_clang_overload_arg (const void *, __restrict, __src),
> > +        char *__restrict __dst, socklen_t __dst_size))
> > +    __fortify_clang_warning_only_if_bos_lt(__dst_size, __dst,
> > +                                        "inet_ntop called with bigger
> length "
> > +                                        "than size of destination
> buffer")
> > +{
> > +  return __glibc_fortify (inet_ntop, __dst_size, sizeof(char),
> > +                       __glibc_objsize(__dst),
> > +                       __af, __src, __dst, __dst_size);
>
> Missing whitespace before various '('.
>

Noted.


>
> Thanks,
> Florian
>
>
diff mbox series

Patch

diff --git a/debug/Makefile b/debug/Makefile
index 6a05205ce6..905f2bf7e0 100644
--- a/debug/Makefile
+++ b/debug/Makefile
@@ -55,6 +55,7 @@  routines = \
   gethostname_chk \
   gets_chk \
   getwd_chk \
+  inet_ntop_chk \
   longjmp_chk \
   mbsnrtowcs_chk \
   mbsrtowcs_chk \
diff --git a/debug/Versions b/debug/Versions
index 9cf2725992..2ae5747f8d 100644
--- a/debug/Versions
+++ b/debug/Versions
@@ -64,6 +64,9 @@  libc {
     __wcslcat_chk;
     __wcslcpy_chk;
   }
+  GLIBC_2.42 {
+    __inet_ntop_chk;
+  }
   GLIBC_PRIVATE {
     __fortify_fail;
   }
diff --git a/debug/inet_ntop_chk.c b/debug/inet_ntop_chk.c
new file mode 100644
index 0000000000..e1ec600fbb
--- /dev/null
+++ b/debug/inet_ntop_chk.c
@@ -0,0 +1,30 @@ 
+/* Copyright (C) 2025 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <arpa/inet.h>
+#include <stdio.h>
+
+const char *
+__inet_ntop_chk (int af, const void *src, char *dst,
+		 socklen_t size, size_t dst_size)
+{
+  if (size > dst_size)
+    __chk_fail ();
+
+  return __inet_ntop (af, src, dst, size);
+}
+libc_hidden_def (__inet_ntop_chk)
diff --git a/debug/tst-fortify.c b/debug/tst-fortify.c
index f8ccc2dff5..128f271c03 100644
--- a/debug/tst-fortify.c
+++ b/debug/tst-fortify.c
@@ -23,6 +23,7 @@ 
 
 #include <assert.h>
 #include <fcntl.h>
+#include <arpa/inet.h>
 #include <limits.h>
 #include <locale.h>
 #include <obstack.h>
@@ -1832,6 +1833,26 @@  do_test (void)
 # endif
 #endif
 
+  struct in6_addr addr6;
+  struct in_addr addr;
+  char addrstr6[INET6_ADDRSTRLEN];
+  char addrstr[INET_ADDRSTRLEN];
+
+  if (inet_ntop (AF_INET6, &addr6, addrstr6, sizeof (addrstr6)) == NULL)
+    FAIL ();
+  if (inet_ntop (AF_INET, &addr, addrstr, sizeof (addrstr)) == NULL)
+    FAIL ();
+
+#if __USE_FORTIFY_LEVEL >= 1
+  CHK_FAIL_START
+  inet_ntop (AF_INET6, &addr6, buf, INET6_ADDRSTRLEN);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  inet_ntop (AF_INET, &addr, buf, INET_ADDRSTRLEN);
+  CHK_FAIL_END
+#endif
+
   return ret;
 }
 
diff --git a/include/arpa/inet.h b/include/arpa/inet.h
index f389c28cb2..d8afbf259b 100644
--- a/include/arpa/inet.h
+++ b/include/arpa/inet.h
@@ -3,12 +3,16 @@ 
 #include <inet/arpa/inet.h>
 
 #ifndef _ISOMAC
+/* Declare functions with security checks.  */
+#include <bits/inet-fortified-decl.h>
+
 /* Variant of inet_aton which rejects trailing garbage.  */
 extern int __inet_aton_exact (const char *__cp, struct in_addr *__inp);
 libc_hidden_proto (__inet_aton_exact)
 
 extern __typeof (inet_ntop) __inet_ntop;
 libc_hidden_proto (__inet_ntop)
+libc_hidden_proto (__inet_ntop_chk)
 
 libc_hidden_proto (inet_pton)
 extern __typeof (inet_pton) __inet_pton;
diff --git a/include/bits/inet-fortified-decl.h b/include/bits/inet-fortified-decl.h
new file mode 100644
index 0000000000..e6ad4d4663
--- /dev/null
+++ b/include/bits/inet-fortified-decl.h
@@ -0,0 +1 @@ 
+#include <inet/bits/inet-fortified-decl.h>
diff --git a/include/bits/inet-fortified.h b/include/bits/inet-fortified.h
new file mode 100644
index 0000000000..abba7c5701
--- /dev/null
+++ b/include/bits/inet-fortified.h
@@ -0,0 +1 @@ 
+#include <inet/bits/inet-fortified.h>
diff --git a/inet/Makefile b/inet/Makefile
index 79bacddfd5..104b5828bf 100644
--- a/inet/Makefile
+++ b/inet/Makefile
@@ -25,6 +25,8 @@  include ../Makeconfig
 headers := \
   $(wildcard arpa/*.h protocols/*.h) \
   bits/in.h \
+  bits/inet-fortified-decl.h \
+  bits/inet-fortified.h \
   ifaddrs.h \
   netinet/ether.h \
   netinet/icmp6.h \
diff --git a/inet/arpa/inet.h b/inet/arpa/inet.h
index 42d38c330d..d381df7066 100644
--- a/inet/arpa/inet.h
+++ b/inet/arpa/inet.h
@@ -65,7 +65,6 @@  extern const char *inet_ntop (int __af, const void *__restrict __cp,
 			      char *__restrict __buf, socklen_t __len)
      __THROW;
 
-
 /* The following functions are not part of XNS 5.2.  */
 #ifdef __USE_MISC
 /* Convert Internet host address from numbers-and-dots notation in CP
@@ -101,6 +100,11 @@  extern char *inet_nsap_ntoa (int __len, const unsigned char *__cp,
 			     char *__buf) __THROW;
 #endif
 
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+/* Include functions with security checks.  */
+#  include <bits/inet-fortified.h>
+#endif
+
 __END_DECLS
 
 #endif /* arpa/inet.h */
diff --git a/inet/bits/inet-fortified-decl.h b/inet/bits/inet-fortified-decl.h
new file mode 100644
index 0000000000..23e3cf4b22
--- /dev/null
+++ b/inet/bits/inet-fortified-decl.h
@@ -0,0 +1,35 @@ 
+/* Declarations of checking macros for inet functions.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_INET_FORTIFIED_DEC_H
+#define _BITS_INET_FORTIFIED_DEC_H 1
+
+#ifndef _ARPA_INET_H
+# error "Never include <bits/inet-fortified-decl.h> directly; use <arpa/inet.h> instead."
+#endif
+
+extern const char *__inet_ntop_chk (int, const void *, char *, socklen_t, size_t);
+
+extern const char *__REDIRECT_FORTIFY_NTH (__inet_ntop_alias,
+					   (int, const void *, char *, socklen_t), inet_ntop);
+extern const char *__REDIRECT_NTH (__inet_ntop_chk_warn,
+				   (int, const void *, char *, socklen_t, size_t), __inet_ntop_chk)
+     __warnattr ("inet_ntop called with bigger length than "
+		 "size of destination buffer");
+
+#endif /* bits/inet-fortified-decl.h.  */
diff --git a/inet/bits/inet-fortified.h b/inet/bits/inet-fortified.h
new file mode 100644
index 0000000000..86b6d56d7b
--- /dev/null
+++ b/inet/bits/inet-fortified.h
@@ -0,0 +1,41 @@ 
+/* Checking macros for inet functions.
+   Copyright (C) 2025 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_INET_FORTIFIED_H
+#define _BITS_INET_FORTIFIED_H 1
+
+#ifndef _ARPA_INET_H
+# error "Never include <bits/inet-fortified.h> directly; use <arpa/inet.h> instead."
+#endif
+
+#include <bits/inet-fortified-decl.h>
+
+__fortify_function __attribute_overloadable__ const char *
+__NTH (inet_ntop (int __af,
+	   __fortify_clang_overload_arg (const void *, __restrict, __src),
+	   char *__restrict __dst, socklen_t __dst_size))
+    __fortify_clang_warning_only_if_bos_lt(__dst_size, __dst,
+					   "inet_ntop called with bigger length "
+					   "than size of destination buffer")
+{
+  return __glibc_fortify (inet_ntop, __dst_size, sizeof(char),
+			  __glibc_objsize(__dst),
+			  __af, __src, __dst, __dst_size);
+};
+
+#endif /* bits/inet-fortified.h.  */
diff --git a/manual/maint.texi b/manual/maint.texi
index 04faa222e2..ce6a556c68 100644
--- a/manual/maint.texi
+++ b/manual/maint.texi
@@ -303,6 +303,8 @@  The following functions and macros are fortified in @theglibc{}:
 
 @item @code{getwd}
 
+@item @code{inet_ntop}
+
 @item @code{longjmp}
 
 @item @code{mbsnrtowcs}
diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
index 461df01ffb..facb01bf8c 100644
--- a/sysdeps/mach/hurd/i386/libc.abilist
+++ b/sysdeps/mach/hurd/i386/libc.abilist
@@ -2584,6 +2584,7 @@  GLIBC_2.41 pthread_mutexattr_setrobust F
 GLIBC_2.41 pthread_mutexattr_setrobust_np F
 GLIBC_2.41 pthread_mutexattr_settype F
 GLIBC_2.41 pthread_sigmask F
+GLIBC_2.42 __inet_ntop_chk 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 6f235d20ba..3c76f6ae52 100644
--- a/sysdeps/mach/hurd/x86_64/libc.abilist
+++ b/sysdeps/mach/hurd/x86_64/libc.abilist
@@ -2267,6 +2267,7 @@  GLIBC_2.41 pthread_mutexattr_setrobust F
 GLIBC_2.41 pthread_mutexattr_setrobust_np F
 GLIBC_2.41 pthread_mutexattr_settype F
 GLIBC_2.41 pthread_sigmask F
+GLIBC_2.42 __inet_ntop_chk 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 0889725c79..afbb38fb0e 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2750,4 +2750,5 @@  GLIBC_2.39 stdc_trailing_zeros_ull F
 GLIBC_2.39 stdc_trailing_zeros_us F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 b33a52db70..ea11409903 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -3097,6 +3097,7 @@  GLIBC_2.4 wprintf F
 GLIBC_2.4 wscanf F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 0c78cb6d9d..c6edd66fe4 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -2511,4 +2511,5 @@  GLIBC_2.39 stdc_trailing_zeros_ull F
 GLIBC_2.39 stdc_trailing_zeros_us F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 a4571bfcb3..00e46c2f7f 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -2803,6 +2803,7 @@  GLIBC_2.4 xprt_register F
 GLIBC_2.4 xprt_unregister F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 060ab80000..3a87471bfe 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -2800,6 +2800,7 @@  GLIBC_2.4 xprt_register F
 GLIBC_2.4 xprt_unregister F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 5c4f912dd8..b819f40f50 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2787,4 +2787,5 @@  GLIBC_2.39 stdc_trailing_zeros_ull F
 GLIBC_2.39 stdc_trailing_zeros_us F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 pthread_gettid_np F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index f837bf9dd1..5cb0987348 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2824,6 +2824,7 @@  GLIBC_2.4 unshare F
 GLIBC_2.41 cacheflush F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 9ea9e656c1..1ec48127e1 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -3007,6 +3007,7 @@  GLIBC_2.4 unlinkat F
 GLIBC_2.4 unshare F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 243422f515..82b6b0d196 100644
--- a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
@@ -2271,4 +2271,5 @@  GLIBC_2.39 stdc_trailing_zeros_ull F
 GLIBC_2.39 stdc_trailing_zeros_us F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 88397ad130..03818c428f 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -2783,6 +2783,7 @@  GLIBC_2.4 xprt_register F
 GLIBC_2.4 xprt_unregister F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 81d6333345..a2b3d25f48 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2950,6 +2950,7 @@  GLIBC_2.4 unlinkat F
 GLIBC_2.4 unshare F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 9522c31329..bc00403c50 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2836,4 +2836,5 @@  GLIBC_2.39 stdc_trailing_zeros_ull F
 GLIBC_2.39 stdc_trailing_zeros_us F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 9e760428fb..5606a7027b 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2833,4 +2833,5 @@  GLIBC_2.39 stdc_trailing_zeros_ull F
 GLIBC_2.39 stdc_trailing_zeros_us F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 8a2df86bed..5fab619fd6 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2911,6 +2911,7 @@  GLIBC_2.4 unlinkat F
 GLIBC_2.4 unshare F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index 491a9a8e15..5ba810d096 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2909,6 +2909,7 @@  GLIBC_2.4 unlinkat F
 GLIBC_2.4 unshare F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 ee36f595a7..e1b8f13414 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2917,6 +2917,7 @@  GLIBC_2.4 unlinkat F
 GLIBC_2.4 unshare F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 083709eb8a..c0ee223f3f 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2819,6 +2819,7 @@  GLIBC_2.4 unlinkat F
 GLIBC_2.4 unshare F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 dc2d61e45a..227746ae57 100644
--- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
+++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
@@ -2261,4 +2261,5 @@  GLIBC_2.40 setcontext F
 GLIBC_2.40 swapcontext F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 56dfb11160..46fd69dc86 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -3140,6 +3140,7 @@  GLIBC_2.4 wprintf F
 GLIBC_2.4 wscanf F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 4951295fd2..9887e117d8 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -3185,6 +3185,7 @@  GLIBC_2.4 wprintf F
 GLIBC_2.4 wscanf F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 d161a0e269..2600dc2941 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2894,6 +2894,7 @@  GLIBC_2.4 wprintf F
 GLIBC_2.4 wscanf F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 b2354c9cbe..d803fecff8 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2970,4 +2970,5 @@  GLIBC_2.39 stdc_trailing_zeros_ull F
 GLIBC_2.39 stdc_trailing_zeros_us F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 931c7332d1..a2646bde63 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -2514,4 +2514,5 @@  GLIBC_2.39 stdc_trailing_zeros_us F
 GLIBC_2.40 __riscv_hwprobe F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 187d1849e9..ad18f29f40 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2714,4 +2714,5 @@  GLIBC_2.39 stdc_trailing_zeros_us F
 GLIBC_2.40 __riscv_hwprobe F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 b05ab0b4f5..2f76c27fb9 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -3138,6 +3138,7 @@  GLIBC_2.4 wprintf F
 GLIBC_2.4 wscanf F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 ed29d3ee12..4ea336999c 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2931,6 +2931,7 @@  GLIBC_2.4 wprintf F
 GLIBC_2.4 wscanf F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 1f084b0046..f245f8f755 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2830,6 +2830,7 @@  GLIBC_2.4 unlinkat F
 GLIBC_2.4 unshare F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 13c45bc570..4c654a51a3 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2827,6 +2827,7 @@  GLIBC_2.4 unlinkat F
 GLIBC_2.4 unshare F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 ba9310be7a..d89a81edcd 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -3159,6 +3159,7 @@  GLIBC_2.4 wprintf F
 GLIBC_2.4 wscanf F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 13ac7f307b..ee7b84249c 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2795,6 +2795,7 @@  GLIBC_2.4 unlinkat F
 GLIBC_2.4 unshare F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 46b6b616ac..00155d9f3e 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2746,6 +2746,7 @@  GLIBC_2.4 unlinkat F
 GLIBC_2.4 unshare F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk 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 1f25723c4c..18765ec3b8 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2765,4 +2765,5 @@  GLIBC_2.39 stdc_trailing_zeros_ull F
 GLIBC_2.39 stdc_trailing_zeros_us F
 GLIBC_2.41 sched_getattr F
 GLIBC_2.41 sched_setattr F
+GLIBC_2.42 __inet_ntop_chk F
 GLIBC_2.42 pthread_gettid_np F