[v2,03/15] linux: Add pidfd_send_signal

Message ID 20220207174431.360355-4-adhemerval.zanella@linaro.org
State Committed
Headers
Series linux: Add new syscalls |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent

Commit Message

Adhemerval Zanella Netto Feb. 7, 2022, 5:44 p.m. UTC
  This was added on Linux 5.1 (3eb39f47934f9d5a3027fe00d906a45fe3a15fad)
as a way to avoid the race condition of using kill (where PID might be
reused by the kernel between between obtaining the pid and sending the
signal).

If the siginfo_t argument is NULL then pidfd_send_signal is equivalent
to kill.  If it is not NULL pidfd_send_signal is equivalent to
rt_sigqueueinfo.
---
 NEWS                                                      | 6 +++---
 sysdeps/unix/sysv/linux/Versions                          | 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 +
 sysdeps/unix/sysv/linux/ia64/libc.abilist                 | 1 +
 sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist        | 1 +
 sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist          | 1 +
 sysdeps/unix/sysv/linux/microblaze/be/libc.abilist        | 1 +
 sysdeps/unix/sysv/linux/microblaze/le/libc.abilist        | 1 +
 sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist      | 1 +
 sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist    | 1 +
 sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist      | 1 +
 sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist      | 1 +
 sysdeps/unix/sysv/linux/nios2/libc.abilist                | 1 +
 sysdeps/unix/sysv/linux/or1k/libc.abilist                 | 1 +
 .../unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist    | 1 +
 .../unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist  | 1 +
 sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist | 1 +
 sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist | 1 +
 sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist           | 1 +
 sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist           | 1 +
 sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist         | 1 +
 sysdeps/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 +
 sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist        | 1 +
 sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist        | 1 +
 sysdeps/unix/sysv/linux/sys/pidfd.h                       | 8 ++++++++
 sysdeps/unix/sysv/linux/syscalls.list                     | 1 +
 sysdeps/unix/sysv/linux/x86_64/64/libc.abilist            | 1 +
 sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist           | 1 +
 37 files changed, 46 insertions(+), 3 deletions(-)
  

Comments

Carlos O'Donell May 16, 2022, 9:12 p.m. UTC | #1
On 2/7/22 12:44, Adhemerval Zanella via Libc-alpha wrote:
> This was added on Linux 5.1 (3eb39f47934f9d5a3027fe00d906a45fe3a15fad)
> as a way to avoid the race condition of using kill (where PID might be
> reused by the kernel between between obtaining the pid and sending the
> signal).

The only ABI parts are: the name of the function and the arguments. No new structures
are defined that would have further ABI impact across 32/64-bit (or x32).

OK modulo NEWS change from patch 1.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Tested-by: Carlos O'Donell <carlos@redhat.com>
 
> If the siginfo_t argument is NULL then pidfd_send_signal is equivalent
> to kill.  If it is not NULL pidfd_send_signal is equivalent to
> rt_sigqueueinfo.
> ---
>  NEWS                                                      | 6 +++---
>  sysdeps/unix/sysv/linux/Versions                          | 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 +
>  sysdeps/unix/sysv/linux/ia64/libc.abilist                 | 1 +
>  sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist        | 1 +
>  sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist          | 1 +
>  sysdeps/unix/sysv/linux/microblaze/be/libc.abilist        | 1 +
>  sysdeps/unix/sysv/linux/microblaze/le/libc.abilist        | 1 +
>  sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist      | 1 +
>  sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist    | 1 +
>  sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist      | 1 +
>  sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist      | 1 +
>  sysdeps/unix/sysv/linux/nios2/libc.abilist                | 1 +
>  sysdeps/unix/sysv/linux/or1k/libc.abilist                 | 1 +
>  .../unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist    | 1 +
>  .../unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist  | 1 +
>  sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist | 1 +
>  sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist | 1 +
>  sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist           | 1 +
>  sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist           | 1 +
>  sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist         | 1 +
>  sysdeps/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 +
>  sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist        | 1 +
>  sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist        | 1 +
>  sysdeps/unix/sysv/linux/sys/pidfd.h                       | 8 ++++++++
>  sysdeps/unix/sysv/linux/syscalls.list                     | 1 +
>  sysdeps/unix/sysv/linux/x86_64/64/libc.abilist            | 1 +
>  sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist           | 1 +
>  37 files changed, 46 insertions(+), 3 deletions(-)
> 
> diff --git a/NEWS b/NEWS
> index c28cc28b52..d882d46842 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -9,9 +9,9 @@ Version 2.36
>  
>  Major new features:
>  
> -* On Linux, the pidfd_open and pidfd_getfd functions have been added.
> -  The pidfd functionality help to solve the issue of PID reuse in Unix
> -  systems.
> +* On Linux, the pidfd_open, pidfd_getfd, and pidfd_send_signal functions
> +  have been added.  The pidfd functionality help to solve the issue of PID
> +  reuse in Unix systems.

OK. Modulo patch 1 suggestion.

>  
>  Deprecated and removed features, and other changes affecting compatibility:
>  
> diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
> index 78912c0484..694c64a5bc 100644
> --- a/sysdeps/unix/sysv/linux/Versions
> +++ b/sysdeps/unix/sysv/linux/Versions
> @@ -302,6 +302,7 @@ libc {
>    GLIBC_2.36 {
>      pidfd_open;
>      pidfd_getfd;
> +    pidfd_send_signal;

OK.

>    }
>    GLIBC_PRIVATE {
>      # functions used in other libraries
> diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> index 1acaa31519..7602129631 100644
> --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
> @@ -2618,3 +2618,4 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> index fa2018b88a..5b39d6023c 100644
> --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
> @@ -2715,6 +2715,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
>  GLIBC_2.4 _IO_sprintf F
> diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
> index 4ed3f76c4f..e413302f2e 100644
> --- a/sysdeps/unix/sysv/linux/arc/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
> @@ -2379,3 +2379,4 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> index edc7cf524e..ade1b93d13 100644
> --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
> @@ -498,6 +498,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
>  GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
> diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> index 6554476cd2..10e91537fa 100644
> --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
> @@ -495,6 +495,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
>  GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
> diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
> index 201ec9a966..22618c7aaa 100644
> --- a/sysdeps/unix/sysv/linux/csky/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
> @@ -2654,3 +2654,4 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> index 116369f238..e2aea90c74 100644
> --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
> @@ -2603,6 +2603,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
> index 2c5aea2d0d..29ecca26bb 100644
> --- a/sysdeps/unix/sysv/linux/i386/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
> @@ -2787,6 +2787,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> index 4bb67cc684..69a2ca2391 100644
> --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
> @@ -2553,6 +2553,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> index dbe82628b0..23cc4ddd8a 100644
> --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
> @@ -499,6 +499,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 _Exit F
>  GLIBC_2.4 _IO_2_1_stderr_ D 0x98
>  GLIBC_2.4 _IO_2_1_stdin_ D 0x98
> diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> index e42d47632e..2d1d8a3d0c 100644
> --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
> @@ -2730,6 +2730,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> index 0b79ff3a37..7b6e88bdb9 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
> @@ -2703,3 +2703,4 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> index d2f0713d1f..155c974790 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
> @@ -2700,3 +2700,4 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> index 382852234f..7a811120ea 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
> @@ -2695,6 +2695,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> index cb02b6df77..7d28dca5c1 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
> @@ -2693,6 +2693,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> index 7e62a8b7fc..41790f0d63 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
> @@ -2701,6 +2701,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> index 63840726fe..9c15006c12 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
> @@ -2604,6 +2604,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> index e4608208a8..27c0498b60 100644
> --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
> @@ -2742,3 +2742,4 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> index 97c37b3f52..e500d4756f 100644
> --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
> @@ -2125,3 +2125,4 @@ GLIBC_2.35 writev F
>  GLIBC_2.35 wscanf F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> index 0d017c3119..adb21db204 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
> @@ -2757,6 +2757,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
>  GLIBC_2.4 _IO_sprintf F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> index 5e61dfbd78..28a08c4afb 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
> @@ -2790,6 +2790,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
>  GLIBC_2.4 _IO_sprintf F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> index a7ddc5022e..98c5f3e61c 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
> @@ -2512,6 +2512,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
>  GLIBC_2.4 _IO_sprintf F
> diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> index 78117f1dea..31e5aa90cd 100644
> --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
> @@ -2814,3 +2814,4 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> index 8d935d09aa..87d90bf668 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
> @@ -2381,3 +2381,4 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> index f373fa0e25..b4a8f56aa2 100644
> --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
> @@ -2581,3 +2581,4 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> index 33a00c0a03..e4a58cc145 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
> @@ -2755,6 +2755,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
>  GLIBC_2.4 _IO_sprintf F
> diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> index 32c3e171ad..ef0f0c3fa1 100644
> --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
> @@ -2549,6 +2549,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
>  GLIBC_2.4 _IO_sprintf F
> diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> index acc7b4a3b7..603d50668f 100644
> --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
> @@ -2610,6 +2610,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> index 10c0727830..078cdf05a7 100644
> --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
> @@ -2607,6 +2607,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> index 1c389b2fa9..735505ac51 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
> @@ -2750,6 +2750,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 _IO_fprintf F
>  GLIBC_2.4 _IO_printf F
>  GLIBC_2.4 _IO_sprintf F
> diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> index 4c49c781e0..48df7952cd 100644
> --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
> @@ -2576,6 +2576,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/sys/pidfd.h b/sysdeps/unix/sysv/linux/sys/pidfd.h
> index 7194fc2a14..7bbc5e4863 100644
> --- a/sysdeps/unix/sysv/linux/sys/pidfd.h
> +++ b/sysdeps/unix/sysv/linux/sys/pidfd.h
> @@ -38,4 +38,12 @@ extern int pidfd_open (__pid_t __pid, unsigned int __flags) __THROW;
>  extern int pidfd_getfd (int __pidfd, int __targetfd,
>  			unsigned int __flags) __THROW;
>  
> +/* Sends the signal SIG to the target process referred by the PIDFD.  If
> +   INFO points to a siginfo_t buffer, it will be populated.
> +
> +   The FLAGS argument is reserved for future use, it must be specified
> +   as 0.  */
> +extern int pidfd_send_signal (int __pidfd, int __sig, siginfo_t *__info,
> +			      unsigned int __flags) __THROW;

OK.

> +
>  #endif /* _PIDFD_H  */
> diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
> index 5dd7a12b76..d9653bb433 100644
> --- a/sysdeps/unix/sysv/linux/syscalls.list
> +++ b/sysdeps/unix/sysv/linux/syscalls.list
> @@ -42,6 +42,7 @@ pipe2		-	pipe2		i:fi	__pipe2		pipe2
>  pidfd_open	EXTRA	pidfd_open	i:iU	pidfd_open
>  pidfd_getfd	EXTRA	pidfd_getfd	i:iiU	pidfd_getfd
>  pivot_root	EXTRA	pivot_root	i:ss	pivot_root
> +pidfd_send_signal	EXTRA	pidfd_send_signal	i:iiPU	pidfd_send_signal

OK.

>  query_module	EXTRA	query_module	i:sipip	__compat_query_module	query_module@GLIBC_2.0:GLIBC_2.23
>  quotactl	EXTRA	quotactl	i:isip	quotactl
>  remap_file_pages -	remap_file_pages i:pUiUi	__remap_file_pages remap_file_pages
> diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> index cef6e65933..1629fb7762 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
> @@ -2527,6 +2527,7 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
>  GLIBC_2.4 __confstr_chk F
>  GLIBC_2.4 __fgets_chk F
>  GLIBC_2.4 __fgets_unlocked_chk F
> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> index 4ac98b6823..ee9674ff75 100644
> --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
> @@ -2633,3 +2633,4 @@ GLIBC_2.35 epoll_pwait2 F
>  GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
>  GLIBC_2.36 pidfd_getfd F
>  GLIBC_2.36 pidfd_open F
> +GLIBC_2.36 pidfd_send_signal F
  

Patch

diff --git a/NEWS b/NEWS
index c28cc28b52..d882d46842 100644
--- a/NEWS
+++ b/NEWS
@@ -9,9 +9,9 @@  Version 2.36
 
 Major new features:
 
-* On Linux, the pidfd_open and pidfd_getfd functions have been added.
-  The pidfd functionality help to solve the issue of PID reuse in Unix
-  systems.
+* On Linux, the pidfd_open, pidfd_getfd, and pidfd_send_signal functions
+  have been added.  The pidfd functionality help to solve the issue of PID
+  reuse in Unix systems.
 
 Deprecated and removed features, and other changes affecting compatibility:
 
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index 78912c0484..694c64a5bc 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -302,6 +302,7 @@  libc {
   GLIBC_2.36 {
     pidfd_open;
     pidfd_getfd;
+    pidfd_send_signal;
   }
   GLIBC_PRIVATE {
     # functions used in other libraries
diff --git a/sysdeps/unix/sysv/linux/aarch64/libc.abilist b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
index 1acaa31519..7602129631 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist
@@ -2618,3 +2618,4 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index fa2018b88a..5b39d6023c 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2715,6 +2715,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
diff --git a/sysdeps/unix/sysv/linux/arc/libc.abilist b/sysdeps/unix/sysv/linux/arc/libc.abilist
index 4ed3f76c4f..e413302f2e 100644
--- a/sysdeps/unix/sysv/linux/arc/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arc/libc.abilist
@@ -2379,3 +2379,4 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index edc7cf524e..ade1b93d13 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -498,6 +498,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index 6554476cd2..10e91537fa 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -495,6 +495,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
 GLIBC_2.4 _IO_2_1_stdin_ D 0xa0
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index 201ec9a966..22618c7aaa 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2654,3 +2654,4 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 116369f238..e2aea90c74 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2603,6 +2603,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 2c5aea2d0d..29ecca26bb 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2787,6 +2787,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index 4bb67cc684..69a2ca2391 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -2553,6 +2553,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index dbe82628b0..23cc4ddd8a 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -499,6 +499,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0x98
 GLIBC_2.4 _IO_2_1_stdin_ D 0x98
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index e42d47632e..2d1d8a3d0c 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2730,6 +2730,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 0b79ff3a37..7b6e88bdb9 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2703,3 +2703,4 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index d2f0713d1f..155c974790 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2700,3 +2700,4 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index 382852234f..7a811120ea 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2695,6 +2695,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index cb02b6df77..7d28dca5c1 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2693,6 +2693,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 7e62a8b7fc..41790f0d63 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2701,6 +2701,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 63840726fe..9c15006c12 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2604,6 +2604,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index e4608208a8..27c0498b60 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -2742,3 +2742,4 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist
index 97c37b3f52..e500d4756f 100644
--- a/sysdeps/unix/sysv/linux/or1k/libc.abilist
+++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist
@@ -2125,3 +2125,4 @@  GLIBC_2.35 writev F
 GLIBC_2.35 wscanf F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 0d017c3119..adb21db204 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2757,6 +2757,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 5e61dfbd78..28a08c4afb 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2790,6 +2790,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
index a7ddc5022e..98c5f3e61c 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist
@@ -2512,6 +2512,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
index 78117f1dea..31e5aa90cd 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist
@@ -2814,3 +2814,4 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
index 8d935d09aa..87d90bf668 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist
@@ -2381,3 +2381,4 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
index f373fa0e25..b4a8f56aa2 100644
--- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist
@@ -2581,3 +2581,4 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 33a00c0a03..e4a58cc145 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2755,6 +2755,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 32c3e171ad..ef0f0c3fa1 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -2549,6 +2549,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index acc7b4a3b7..603d50668f 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2610,6 +2610,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index 10c0727830..078cdf05a7 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2607,6 +2607,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 1c389b2fa9..735505ac51 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2750,6 +2750,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 _IO_fprintf F
 GLIBC_2.4 _IO_printf F
 GLIBC_2.4 _IO_sprintf F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 4c49c781e0..48df7952cd 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -2576,6 +2576,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/sys/pidfd.h b/sysdeps/unix/sysv/linux/sys/pidfd.h
index 7194fc2a14..7bbc5e4863 100644
--- a/sysdeps/unix/sysv/linux/sys/pidfd.h
+++ b/sysdeps/unix/sysv/linux/sys/pidfd.h
@@ -38,4 +38,12 @@  extern int pidfd_open (__pid_t __pid, unsigned int __flags) __THROW;
 extern int pidfd_getfd (int __pidfd, int __targetfd,
 			unsigned int __flags) __THROW;
 
+/* Sends the signal SIG to the target process referred by the PIDFD.  If
+   INFO points to a siginfo_t buffer, it will be populated.
+
+   The FLAGS argument is reserved for future use, it must be specified
+   as 0.  */
+extern int pidfd_send_signal (int __pidfd, int __sig, siginfo_t *__info,
+			      unsigned int __flags) __THROW;
+
 #endif /* _PIDFD_H  */
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index 5dd7a12b76..d9653bb433 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -42,6 +42,7 @@  pipe2		-	pipe2		i:fi	__pipe2		pipe2
 pidfd_open	EXTRA	pidfd_open	i:iU	pidfd_open
 pidfd_getfd	EXTRA	pidfd_getfd	i:iiU	pidfd_getfd
 pivot_root	EXTRA	pivot_root	i:ss	pivot_root
+pidfd_send_signal	EXTRA	pidfd_send_signal	i:iiPU	pidfd_send_signal
 query_module	EXTRA	query_module	i:sipip	__compat_query_module	query_module@GLIBC_2.0:GLIBC_2.23
 quotactl	EXTRA	quotactl	i:isip	quotactl
 remap_file_pages -	remap_file_pages i:pUiUi	__remap_file_pages remap_file_pages
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index cef6e65933..1629fb7762 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -2527,6 +2527,7 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F
 GLIBC_2.4 __confstr_chk F
 GLIBC_2.4 __fgets_chk F
 GLIBC_2.4 __fgets_unlocked_chk F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 4ac98b6823..ee9674ff75 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2633,3 +2633,4 @@  GLIBC_2.35 epoll_pwait2 F
 GLIBC_2.35 posix_spawn_file_actions_addtcsetpgrp_np F
 GLIBC_2.36 pidfd_getfd F
 GLIBC_2.36 pidfd_open F
+GLIBC_2.36 pidfd_send_signal F