[2/2] Add _FORTIFY_SOURCE support for inet_ntop

Message ID 20250320172920.993312-2-amerey@redhat.com (mailing list archive)
State New
Headers
Series [1/2] Prepare inet_pton to be fortified |

Checks

Context Check Description
redhat-pt-bot/TryBot-apply_patch fail Patch failed to apply to master at the time it was sent
redhat-pt-bot/TryBot-32bit fail Patch series failed to apply

Commit Message

Aaron Merey March 20, 2025, 5:29 p.m. UTC
  Add function __inet_pton_chk which calls __chk_fail when the size of
argument dst is too small.   inet_pton is redirected to __inet_pton_chk
or __inet_pton_warn when _FORTIFY_SOURCE is > 0.

Also add tests to debug/tst-fortify.c, update the abilist with
__inet_pton_chk and mention inet_pton fortification in maint.texi.

Co-authored-by: Frédéric Bérat <fberat@redhat.com>
---
 debug/Makefile                                |  1 +
 debug/Versions                                |  1 +
 debug/inet_pton_chk.c                         | 30 +++++++++++++++++++
 debug/tst-fortify.c                           | 24 +++++++++++++++
 include/arpa/inet.h                           |  2 ++
 inet/bits/inet-fortified-decl.h               |  7 +++++
 inet/bits/inet-fortified.h                    | 20 +++++++++++++
 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 +
 42 files changed, 121 insertions(+)
 create mode 100644 debug/inet_pton_chk.c
  

Comments

Aaron Merey March 20, 2025, 5:32 p.m. UTC | #1
Apologies, the subject should refer to inet_pton, not inet_ntop.

Aaron

On Thu, Mar 20, 2025 at 1:29 PM Aaron Merey <amerey@redhat.com> wrote:
>
> Add function __inet_pton_chk which calls __chk_fail when the size of
> argument dst is too small.   inet_pton is redirected to __inet_pton_chk
> or __inet_pton_warn when _FORTIFY_SOURCE is > 0.
>
> Also add tests to debug/tst-fortify.c, update the abilist with
> __inet_pton_chk and mention inet_pton fortification in maint.texi.
>
> Co-authored-by: Frédéric Bérat <fberat@redhat.com>
> ---
>  debug/Makefile                                |  1 +
>  debug/Versions                                |  1 +
>  debug/inet_pton_chk.c                         | 30 +++++++++++++++++++
>  debug/tst-fortify.c                           | 24 +++++++++++++++
>  include/arpa/inet.h                           |  2 ++
>  inet/bits/inet-fortified-decl.h               |  7 +++++
>  inet/bits/inet-fortified.h                    | 20 +++++++++++++
>  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 +
>  42 files changed, 121 insertions(+)
>  create mode 100644 debug/inet_pton_chk.c
>
> diff --git a/debug/Makefile b/debug/Makefile
> index 905f2bf7e0..dabeb6c375 100644
> --- a/debug/Makefile
> +++ b/debug/Makefile
> @@ -56,6 +56,7 @@ routines = \
>    gets_chk \
>    getwd_chk \
>    inet_ntop_chk \
> +  inet_pton_chk \
>    longjmp_chk \
>    mbsnrtowcs_chk \
>    mbsrtowcs_chk \
> diff --git a/debug/Versions b/debug/Versions
> index 2ae5747f8d..6b9ec1eb46 100644
> --- a/debug/Versions
> +++ b/debug/Versions
> @@ -66,6 +66,7 @@ libc {
>    }
>    GLIBC_2.42 {
>      __inet_ntop_chk;
> +    __inet_pton_chk;
>    }
>    GLIBC_PRIVATE {
>      __fortify_fail;
> diff --git a/debug/inet_pton_chk.c b/debug/inet_pton_chk.c
> new file mode 100644
> index 0000000000..965cf5e116
> --- /dev/null
> +++ b/debug/inet_pton_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>
> +
> +int
> +__inet_pton_chk (int af, const char *src, void *dst, size_t dst_size)
> +{
> +  if ((af == AF_INET && dst_size < 4)
> +      || (af == AF_INET6 && dst_size < 16))
> +    __chk_fail ();
> +
> +  return __inet_pton (af, src, dst);
> +}
> +libc_hidden_def (__inet_pton_chk)
> diff --git a/debug/tst-fortify.c b/debug/tst-fortify.c
> index cd649369d9..c4c28e6e13 100644
> --- a/debug/tst-fortify.c
> +++ b/debug/tst-fortify.c
> @@ -1853,6 +1853,30 @@ do_test (void)
>    CHK_FAIL_END
>  #endif
>
> +  const char *ipv4str = "127.0.0.1";
> +  const char *ipv6str = "::1";
> +
> +  if (inet_pton (AF_INET, ipv4str, (void *) &addr) != 1)
> +    FAIL ();
> +  if (inet_pton (AF_INET6, ipv6str, (void *) &addr6) != 1)
> +    FAIL ();
> +
> +#if __USE_FORTIFY_LEVEL >= 1
> +  char smallbuf[2];
> +
> +  CHK_FAIL_START
> +  inet_pton (AF_INET, ipv4str, (void *) smallbuf);
> +  CHK_FAIL_END
> +
> +  CHK_FAIL_START
> +  inet_pton (AF_INET6, ipv6str, (void *) smallbuf);
> +  CHK_FAIL_END
> +
> +  CHK_FAIL_START
> +  inet_pton (AF_INET6, ipv6str, (void *) &addr);
> +  CHK_FAIL_END
> +#endif
> +
>    return ret;
>  }
>
> diff --git a/include/arpa/inet.h b/include/arpa/inet.h
> index a02892f48a..3db8f1a96f 100644
> --- a/include/arpa/inet.h
> +++ b/include/arpa/inet.h
> @@ -19,6 +19,8 @@ libc_hidden_proto (__inet_ntop_chk)
>  libc_hidden_proto (inet_pton)
>  extern __typeof (inet_pton) __inet_pton;
>  libc_hidden_proto (__inet_pton)
> +libc_hidden_proto (__inet_pton_chk)
> +
>  extern __typeof (inet_makeaddr) __inet_makeaddr;
>  libc_hidden_proto (__inet_makeaddr)
>  libc_hidden_proto (inet_netof)
> diff --git a/inet/bits/inet-fortified-decl.h b/inet/bits/inet-fortified-decl.h
> index 23e3cf4b22..748a119f14 100644
> --- a/inet/bits/inet-fortified-decl.h
> +++ b/inet/bits/inet-fortified-decl.h
> @@ -32,4 +32,11 @@ extern const char *__REDIRECT_NTH (__inet_ntop_chk_warn,
>       __warnattr ("inet_ntop called with bigger length than "
>                  "size of destination buffer");
>
> +extern int __inet_pton_chk (int, const char *, void *, size_t);
> +
> +extern int __REDIRECT_FORTIFY_NTH (__inet_pton_alias,
> +                                  (int, const char *, void *), inet_pton);
> +extern int __REDIRECT_NTH (__inet_pton_chk_warn,
> +                          (int, const char *, void *, size_t), __inet_pton_chk)
> +     __warnattr ("inet_pton called with a destination buffer size too small");
>  #endif /* bits/inet-fortified-decl.h.  */
> diff --git a/inet/bits/inet-fortified.h b/inet/bits/inet-fortified.h
> index 4f6bc34b0f..2f0e99d6a2 100644
> --- a/inet/bits/inet-fortified.h
> +++ b/inet/bits/inet-fortified.h
> @@ -38,4 +38,24 @@ __NTH (inet_ntop (int __af,
>                           __af, __src, __dst, __dst_size);
>  };
>
> +__fortify_function __attribute_overloadable__ int
> +__NTH (inet_pton (int __af,
> +          const char *__restrict __src,
> +          __fortify_clang_overload_arg (void *, __restrict, __dst)))
> +    __fortify_clang_warning_only_if_bos0_lt
> +       (4, __dst, "inet_pton called with destination buffer size less than 4")
> +{
> +  size_t scale = 0;
> +  if (__af == AF_INET)
> +    scale = 1;
> +  else if (__af == AF_INET6)
> +    scale = 4;
> +  else
> +    return __inet_pton_alias (__af, __src, __dst);
> +
> +  return __glibc_fortify (inet_pton, 4, scale,
> +                         __glibc_objsize (__dst),
> +                         __af, __src, __dst);
> +};
> +
>  #endif /* bits/inet-fortified.h.  */
> diff --git a/manual/maint.texi b/manual/maint.texi
> index ce6a556c68..b6ee5b6e3b 100644
> --- a/manual/maint.texi
> +++ b/manual/maint.texi
> @@ -305,6 +305,8 @@ The following functions and macros are fortified in @theglibc{}:
>
>  @item @code{inet_ntop}
>
> +@item @code{inet_pton}
> +
>  @item @code{longjmp}
>
>  @item @code{mbsnrtowcs}
> diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
> index facb01bf8c..0b963dc890 100644
> --- a/sysdeps/mach/hurd/i386/libc.abilist
> +++ b/sysdeps/mach/hurd/i386/libc.abilist
> @@ -2585,6 +2585,7 @@ 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 __inet_pton_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 3c76f6ae52..b9e9349b9d 100644
> --- a/sysdeps/mach/hurd/x86_64/libc.abilist
> +++ b/sysdeps/mach/hurd/x86_64/libc.abilist
> @@ -2268,6 +2268,7 @@ 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 __inet_pton_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 afbb38fb0e..41f8f39911 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -2751,4 +2751,5 @@ 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 __inet_pton_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 ea11409903..34efc96781 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -3098,6 +3098,7 @@ 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 __inet_pton_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 c6edd66fe4..de7c618d28 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -2512,4 +2512,5 @@ 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 __inet_pton_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 00e46c2f7f..96f0314b16 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -2804,6 +2804,7 @@ 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 __inet_pton_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 3a87471bfe..635468fa13 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -2801,6 +2801,7 @@ 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 __inet_pton_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 b819f40f50..490694ddce 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -2788,4 +2788,5 @@ 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 __inet_pton_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 5cb0987348..b1905da767 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -2825,6 +2825,7 @@ 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 __inet_pton_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 1ec48127e1..424ef34a8b 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -3008,6 +3008,7 @@ 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 __inet_pton_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 82b6b0d196..420471eb24 100644
> --- a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
> @@ -2272,4 +2272,5 @@ 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 __inet_pton_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 03818c428f..95a68c7cc1 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -2784,6 +2784,7 @@ 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 __inet_pton_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 a2b3d25f48..442e82b6d2 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -2951,6 +2951,7 @@ 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 __inet_pton_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 bc00403c50..20f7712988 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -2837,4 +2837,5 @@ 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 __inet_pton_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 5606a7027b..f61ed3bf26 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -2834,4 +2834,5 @@ 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 __inet_pton_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 5fab619fd6..381120cc16 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -2912,6 +2912,7 @@ 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 __inet_pton_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 5ba810d096..2f51146084 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -2910,6 +2910,7 @@ 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 __inet_pton_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 e1b8f13414..e6071be2ae 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -2918,6 +2918,7 @@ 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 __inet_pton_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 c0ee223f3f..f41e209a2b 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -2820,6 +2820,7 @@ 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 __inet_pton_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 227746ae57..bbcdb31f09 100644
> --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> @@ -2262,4 +2262,5 @@ 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 __inet_pton_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 46fd69dc86..e0ea22b9c6 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -3141,6 +3141,7 @@ 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 __inet_pton_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 9887e117d8..16b9a771f1 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -3186,6 +3186,7 @@ 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 __inet_pton_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 2600dc2941..070f6f5a08 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -2895,6 +2895,7 @@ 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 __inet_pton_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 d803fecff8..4378d1d922 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -2971,4 +2971,5 @@ 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 __inet_pton_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 a2646bde63..48c6e269a5 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -2515,4 +2515,5 @@ 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 __inet_pton_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 ad18f29f40..a8b0c6aca7 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -2715,4 +2715,5 @@ 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 __inet_pton_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 2f76c27fb9..6c00b8440b 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -3139,6 +3139,7 @@ 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 __inet_pton_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 4ea336999c..f866e5d6f3 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -2932,6 +2932,7 @@ 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 __inet_pton_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 f245f8f755..4f2db8cb9b 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -2831,6 +2831,7 @@ 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 __inet_pton_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 4c654a51a3..a73473ee32 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -2828,6 +2828,7 @@ 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 __inet_pton_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 d89a81edcd..dc7e27db2a 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -3160,6 +3160,7 @@ 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 __inet_pton_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 ee7b84249c..2ee97f42fb 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -2796,6 +2796,7 @@ 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 __inet_pton_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 00155d9f3e..a7ada1ea53 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -2747,6 +2747,7 @@ 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 __inet_pton_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 18765ec3b8..f41ab77c1e 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -2766,4 +2766,5 @@ 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 __inet_pton_chk F
>  GLIBC_2.42 pthread_gettid_np F
> --
> 2.48.1
>
  
Florian Weimer March 24, 2025, 10:23 a.m. UTC | #2
* Aaron Merey:

> +__fortify_function __attribute_overloadable__ int
> +__NTH (inet_pton (int __af,
> +	   const char *__restrict __src,
> +	   __fortify_clang_overload_arg (void *, __restrict, __dst)))
> +    __fortify_clang_warning_only_if_bos0_lt
> +	(4, __dst, "inet_pton called with destination buffer size less than 4")
> +{
> +  size_t scale = 0;
> +  if (__af == AF_INET)
> +    scale = 1;
> +  else if (__af == AF_INET6)
> +    scale = 4;
> +  else
> +    return __inet_pton_alias (__af, __src, __dst);
> +
> +  return __glibc_fortify (inet_pton, 4, scale,
> +			  __glibc_objsize (__dst),
> +			  __af, __src, __dst);
> +};

Why not set scale to 1 and use the byte sizes directly?   This looks a
bit obfuscated.

Thanks,
Florian
  

Patch

diff --git a/debug/Makefile b/debug/Makefile
index 905f2bf7e0..dabeb6c375 100644
--- a/debug/Makefile
+++ b/debug/Makefile
@@ -56,6 +56,7 @@  routines = \
   gets_chk \
   getwd_chk \
   inet_ntop_chk \
+  inet_pton_chk \
   longjmp_chk \
   mbsnrtowcs_chk \
   mbsrtowcs_chk \
diff --git a/debug/Versions b/debug/Versions
index 2ae5747f8d..6b9ec1eb46 100644
--- a/debug/Versions
+++ b/debug/Versions
@@ -66,6 +66,7 @@  libc {
   }
   GLIBC_2.42 {
     __inet_ntop_chk;
+    __inet_pton_chk;
   }
   GLIBC_PRIVATE {
     __fortify_fail;
diff --git a/debug/inet_pton_chk.c b/debug/inet_pton_chk.c
new file mode 100644
index 0000000000..965cf5e116
--- /dev/null
+++ b/debug/inet_pton_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>
+
+int
+__inet_pton_chk (int af, const char *src, void *dst, size_t dst_size)
+{
+  if ((af == AF_INET && dst_size < 4)
+      || (af == AF_INET6 && dst_size < 16))
+    __chk_fail ();
+
+  return __inet_pton (af, src, dst);
+}
+libc_hidden_def (__inet_pton_chk)
diff --git a/debug/tst-fortify.c b/debug/tst-fortify.c
index cd649369d9..c4c28e6e13 100644
--- a/debug/tst-fortify.c
+++ b/debug/tst-fortify.c
@@ -1853,6 +1853,30 @@  do_test (void)
   CHK_FAIL_END
 #endif
 
+  const char *ipv4str = "127.0.0.1";
+  const char *ipv6str = "::1";
+
+  if (inet_pton (AF_INET, ipv4str, (void *) &addr) != 1)
+    FAIL ();
+  if (inet_pton (AF_INET6, ipv6str, (void *) &addr6) != 1)
+    FAIL ();
+
+#if __USE_FORTIFY_LEVEL >= 1
+  char smallbuf[2];
+
+  CHK_FAIL_START
+  inet_pton (AF_INET, ipv4str, (void *) smallbuf);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  inet_pton (AF_INET6, ipv6str, (void *) smallbuf);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  inet_pton (AF_INET6, ipv6str, (void *) &addr);
+  CHK_FAIL_END
+#endif
+
   return ret;
 }
 
diff --git a/include/arpa/inet.h b/include/arpa/inet.h
index a02892f48a..3db8f1a96f 100644
--- a/include/arpa/inet.h
+++ b/include/arpa/inet.h
@@ -19,6 +19,8 @@  libc_hidden_proto (__inet_ntop_chk)
 libc_hidden_proto (inet_pton)
 extern __typeof (inet_pton) __inet_pton;
 libc_hidden_proto (__inet_pton)
+libc_hidden_proto (__inet_pton_chk)
+
 extern __typeof (inet_makeaddr) __inet_makeaddr;
 libc_hidden_proto (__inet_makeaddr)
 libc_hidden_proto (inet_netof)
diff --git a/inet/bits/inet-fortified-decl.h b/inet/bits/inet-fortified-decl.h
index 23e3cf4b22..748a119f14 100644
--- a/inet/bits/inet-fortified-decl.h
+++ b/inet/bits/inet-fortified-decl.h
@@ -32,4 +32,11 @@  extern const char *__REDIRECT_NTH (__inet_ntop_chk_warn,
      __warnattr ("inet_ntop called with bigger length than "
 		 "size of destination buffer");
 
+extern int __inet_pton_chk (int, const char *, void *, size_t);
+
+extern int __REDIRECT_FORTIFY_NTH (__inet_pton_alias,
+				   (int, const char *, void *), inet_pton);
+extern int __REDIRECT_NTH (__inet_pton_chk_warn,
+			   (int, const char *, void *, size_t), __inet_pton_chk)
+     __warnattr ("inet_pton called with a destination buffer size too small");
 #endif /* bits/inet-fortified-decl.h.  */
diff --git a/inet/bits/inet-fortified.h b/inet/bits/inet-fortified.h
index 4f6bc34b0f..2f0e99d6a2 100644
--- a/inet/bits/inet-fortified.h
+++ b/inet/bits/inet-fortified.h
@@ -38,4 +38,24 @@  __NTH (inet_ntop (int __af,
 			  __af, __src, __dst, __dst_size);
 };
 
+__fortify_function __attribute_overloadable__ int
+__NTH (inet_pton (int __af,
+	   const char *__restrict __src,
+	   __fortify_clang_overload_arg (void *, __restrict, __dst)))
+    __fortify_clang_warning_only_if_bos0_lt
+	(4, __dst, "inet_pton called with destination buffer size less than 4")
+{
+  size_t scale = 0;
+  if (__af == AF_INET)
+    scale = 1;
+  else if (__af == AF_INET6)
+    scale = 4;
+  else
+    return __inet_pton_alias (__af, __src, __dst);
+
+  return __glibc_fortify (inet_pton, 4, scale,
+			  __glibc_objsize (__dst),
+			  __af, __src, __dst);
+};
+
 #endif /* bits/inet-fortified.h.  */
diff --git a/manual/maint.texi b/manual/maint.texi
index ce6a556c68..b6ee5b6e3b 100644
--- a/manual/maint.texi
+++ b/manual/maint.texi
@@ -305,6 +305,8 @@  The following functions and macros are fortified in @theglibc{}:
 
 @item @code{inet_ntop}
 
+@item @code{inet_pton}
+
 @item @code{longjmp}
 
 @item @code{mbsnrtowcs}
diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist
index facb01bf8c..0b963dc890 100644
--- a/sysdeps/mach/hurd/i386/libc.abilist
+++ b/sysdeps/mach/hurd/i386/libc.abilist
@@ -2585,6 +2585,7 @@  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 __inet_pton_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 3c76f6ae52..b9e9349b9d 100644
--- a/sysdeps/mach/hurd/x86_64/libc.abilist
+++ b/sysdeps/mach/hurd/x86_64/libc.abilist
@@ -2268,6 +2268,7 @@  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 __inet_pton_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 afbb38fb0e..41f8f39911 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2751,4 +2751,5 @@  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 __inet_pton_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 ea11409903..34efc96781 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -3098,6 +3098,7 @@  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 __inet_pton_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 c6edd66fe4..de7c618d28 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -2512,4 +2512,5 @@  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 __inet_pton_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 00e46c2f7f..96f0314b16 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -2804,6 +2804,7 @@  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 __inet_pton_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 3a87471bfe..635468fa13 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -2801,6 +2801,7 @@  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 __inet_pton_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 b819f40f50..490694ddce 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2788,4 +2788,5 @@  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 __inet_pton_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 5cb0987348..b1905da767 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2825,6 +2825,7 @@  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 __inet_pton_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 1ec48127e1..424ef34a8b 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -3008,6 +3008,7 @@  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 __inet_pton_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 82b6b0d196..420471eb24 100644
--- a/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
@@ -2272,4 +2272,5 @@  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 __inet_pton_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 03818c428f..95a68c7cc1 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -2784,6 +2784,7 @@  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 __inet_pton_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 a2b3d25f48..442e82b6d2 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2951,6 +2951,7 @@  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 __inet_pton_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 bc00403c50..20f7712988 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2837,4 +2837,5 @@  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 __inet_pton_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 5606a7027b..f61ed3bf26 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2834,4 +2834,5 @@  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 __inet_pton_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 5fab619fd6..381120cc16 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2912,6 +2912,7 @@  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 __inet_pton_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 5ba810d096..2f51146084 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2910,6 +2910,7 @@  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 __inet_pton_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 e1b8f13414..e6071be2ae 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2918,6 +2918,7 @@  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 __inet_pton_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 c0ee223f3f..f41e209a2b 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2820,6 +2820,7 @@  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 __inet_pton_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 227746ae57..bbcdb31f09 100644
--- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
+++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
@@ -2262,4 +2262,5 @@  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 __inet_pton_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 46fd69dc86..e0ea22b9c6 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -3141,6 +3141,7 @@  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 __inet_pton_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 9887e117d8..16b9a771f1 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -3186,6 +3186,7 @@  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 __inet_pton_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 2600dc2941..070f6f5a08 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2895,6 +2895,7 @@  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 __inet_pton_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 d803fecff8..4378d1d922 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2971,4 +2971,5 @@  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 __inet_pton_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 a2646bde63..48c6e269a5 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -2515,4 +2515,5 @@  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 __inet_pton_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 ad18f29f40..a8b0c6aca7 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2715,4 +2715,5 @@  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 __inet_pton_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 2f76c27fb9..6c00b8440b 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -3139,6 +3139,7 @@  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 __inet_pton_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 4ea336999c..f866e5d6f3 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2932,6 +2932,7 @@  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 __inet_pton_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 f245f8f755..4f2db8cb9b 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2831,6 +2831,7 @@  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 __inet_pton_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 4c654a51a3..a73473ee32 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2828,6 +2828,7 @@  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 __inet_pton_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 d89a81edcd..dc7e27db2a 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -3160,6 +3160,7 @@  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 __inet_pton_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 ee7b84249c..2ee97f42fb 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2796,6 +2796,7 @@  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 __inet_pton_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 00155d9f3e..a7ada1ea53 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2747,6 +2747,7 @@  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 __inet_pton_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 18765ec3b8..f41ab77c1e 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2766,4 +2766,5 @@  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 __inet_pton_chk F
 GLIBC_2.42 pthread_gettid_np F