From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id F025A383820A for ; Thu, 2 Jun 2022 13:30:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F025A383820A Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-576-JeaF52H5N8OhrwyLVl8LDw-1; Thu, 02 Jun 2022 09:30:53 -0400 X-MC-Unique: JeaF52H5N8OhrwyLVl8LDw-1 Received: by mail-qt1-f197.google.com with SMTP id w8-20020ac87e88000000b002fc7b026e66so3637226qtj.20 for ; Thu, 02 Jun 2022 06:30:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:references:from:organization:in-reply-to :content-transfer-encoding; bh=hL+mJIPOQqPu0OFg7i13VIy9ENN/LM1CcxBMWoddx9M=; b=5VN7ToG2qLsdsojtV256wvi72LSjws1+vWmc3/uiN5CWbi4AiNdDjB2nC9t6EC1oGm cIOYJbIZOXVBENfkt8H542VLMW6pN0yrWCIYj7sNbwpP8k9h6Fq2BHtG9/EafklUzfVH 7Ej1ZDED+WruuTBgd/By3oS6fLhExYd5WZCAxA+ljBQV3/S7i5RyIbD0qD8DzmG7pHD0 23zSQBr1F1rgHW60jYeajy0NmX7K388Ddzo3/mEMIYawPOuai8maELcAw88Z2l0f23w6 jcR8M4rwL7rPuGWBx0RuhoUFzSiSgoWKbaBUSjG3nP9TRQFMXd1iigQvNDQjGY2acyYT qQhQ== X-Gm-Message-State: AOAM5327SnMKBxzDRf7InxrxzHuHOuWZdH06Cd7lOQu9kosAaE6vdcwZ RkRvdM1hYWA8av2WoW2khhVEO/awCuMJONmbRpf/NlgNW00BEN8GFMRB4Eqi/lXoB9POJVNi8Iz CBVSZpMRKyrnsk/xdssn9 X-Received: by 2002:a05:622a:1212:b0:303:8ea3:2070 with SMTP id y18-20020a05622a121200b003038ea32070mr3598606qtx.269.1654176652339; Thu, 02 Jun 2022 06:30:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxje0Mx3kHFpknRL4uRt8yO940jRNNTXWwaejbqSs3Gu3OKobJoS7xpz+oCxpTEQU0wRrp5vQ== X-Received: by 2002:a05:622a:1212:b0:303:8ea3:2070 with SMTP id y18-20020a05622a121200b003038ea32070mr3598558qtx.269.1654176651780; Thu, 02 Jun 2022 06:30:51 -0700 (PDT) Received: from [192.168.0.241] (135-23-175-80.cpe.pppoe.ca. [135.23.175.80]) by smtp.gmail.com with ESMTPSA id d16-20020ac81190000000b002f93ece0df3sm2782972qtj.71.2022.06.02.06.30.50 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 02 Jun 2022 06:30:51 -0700 (PDT) Message-ID: Date: Thu, 2 Jun 2022 09:30:50 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.0 Subject: Re: [PATCH v4 1/2] linux: Add process_madvise To: Adhemerval Zanella , libc-alpha@sourceware.org References: <20220602122659.949754-1-adhemerval.zanella@linaro.org> From: Carlos O'Donell Organization: Red Hat In-Reply-To: <20220602122659.949754-1-adhemerval.zanella@linaro.org> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-16.3 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Jun 2022 13:30:59 -0000 On 6/2/22 08:26, Adhemerval Zanella wrote: > It was added on Linux 5.10 (ecb8ac8b1f146915aa6b96449b66dd48984caacc) > with the same functionality as madvise but using a pidfd of the target > process. LGTM. Reviewed-by: Carlos O'Donell > Checked on x86_64-linux-gnu and i686-linux-gnu. > --- > NEWS | 4 + > bits/mman_ext.h | 21 +++ > misc/sys/mman.h | 3 + > posix/Makefile | 2 +- > sysdeps/unix/sysv/linux/Makefile | 5 + > 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/bits/mman_ext.h | 33 ++++ > 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 + > .../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/nios2/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 + > sysdeps/unix/sysv/linux/syscalls.list | 1 + > sysdeps/unix/sysv/linux/tst-process_madvise.c | 141 ++++++++++++++++++ > .../unix/sysv/linux/x86_64/64/libc.abilist | 1 + > .../unix/sysv/linux/x86_64/x32/libc.abilist | 1 + > 42 files changed, 243 insertions(+), 1 deletion(-) > create mode 100644 bits/mman_ext.h > create mode 100644 sysdeps/unix/sysv/linux/bits/mman_ext.h > create mode 100644 sysdeps/unix/sysv/linux/tst-process_madvise.c > > diff --git a/NEWS b/NEWS > index ad0c08d8ca..5032f5fce5 100644 > --- a/NEWS > +++ b/NEWS > @@ -20,6 +20,10 @@ Major new features: > have been added. The pidfd functionality provides access to a process > while avoiding the issue of PID reuse on tranditional Unix systems. > > +* On Linux, the process_madvise function has been added. It has the > + same functionality as madvise but alters the target process identified > + by the pidfd. OK. Awesome. Thanks :-) > + > Deprecated and removed features, and other changes affecting compatibility: > > * Support for prelink will be removed in the next release; this includes > diff --git a/bits/mman_ext.h b/bits/mman_ext.h > new file mode 100644 > index 0000000000..3ac42ab606 > --- /dev/null > +++ b/bits/mman_ext.h > @@ -0,0 +1,21 @@ > +/* System-specific extensions of , generic version. OK. Single-line desc. > + Copyright (C) 2022 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 > + . */ > + > +#ifndef _SYS_MMAN_H > +# error "Never include directly; use instead." > +#endif > diff --git a/misc/sys/mman.h b/misc/sys/mman.h > index 311d44cfb1..02896a0acc 100644 > --- a/misc/sys/mman.h > +++ b/misc/sys/mman.h > @@ -146,6 +146,9 @@ extern int shm_open (const char *__name, int __oflag, mode_t __mode); > /* Remove shared memory segment. */ > extern int shm_unlink (const char *__name); > > +/* System-specific extensions. */ > +#include OK. New installed header. > + > __END_DECLS > > #endif /* sys/mman.h */ > diff --git a/posix/Makefile b/posix/Makefile > index cfebb8ef06..d1df7c27cb 100644 > --- a/posix/Makefile > +++ b/posix/Makefile > @@ -32,7 +32,7 @@ headers := sys/utsname.h sys/times.h sys/wait.h sys/types.h unistd.h \ > bits/waitflags.h bits/waitstatus.h sys/unistd.h sched.h \ > bits/sched.h bits/cpu-set.h re_comp.h wait.h bits/environments.h \ > cpio.h spawn.h bits/unistd.h bits/types/struct_sched_param.h \ > - bits/unistd_ext.h bits/types/idtype_t.h > + bits/unistd_ext.h bits/types/idtype_t.h bits/mman_ext.h OK. New installed header included in install list. > > routines := \ > uname \ > diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile > index 98b2324a21..627506daad 100644 > --- a/sysdeps/unix/sysv/linux/Makefile > +++ b/sysdeps/unix/sysv/linux/Makefile > @@ -131,6 +131,11 @@ tests += tst-clone tst-clone2 tst-clone3 tst-fanotify tst-personality \ > tst-pidfd \ > # tests > > +# process_madvise requires CAP_SYS_ADMIN. > +xtests += \ > + tst-process_madvise \ > + # xtests OK. New xtests. > + > # For +depfiles in Makerules. > extra-test-objs += tst-sysconf-iov_max-uapi.o > > diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions > index 694c64a5bc..c13a3c4fe7 100644 > --- a/sysdeps/unix/sysv/linux/Versions > +++ b/sysdeps/unix/sysv/linux/Versions > @@ -303,6 +303,7 @@ libc { > pidfd_open; > pidfd_getfd; > pidfd_send_signal; > + process_madvise; OK. New function in Versions list. > } > 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 7602129631..4d8e64ce04 100644 > --- a/sysdeps/unix/sysv/linux/aarch64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/aarch64/libc.abilist > @@ -2619,3 +2619,4 @@ 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.36 process_madvise F > diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist > index 5b39d6023c..36f3129257 100644 > --- a/sysdeps/unix/sysv/linux/alpha/libc.abilist > +++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist > @@ -2716,6 +2716,7 @@ 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.36 process_madvise 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 e413302f2e..2a1e346d4b 100644 > --- a/sysdeps/unix/sysv/linux/arc/libc.abilist > +++ b/sysdeps/unix/sysv/linux/arc/libc.abilist > @@ -2380,3 +2380,4 @@ 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.36 process_madvise F > diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist > index ade1b93d13..25de8a018c 100644 > --- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist > @@ -499,6 +499,7 @@ 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.36 process_madvise 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 10e91537fa..e9cf9b1593 100644 > --- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist > @@ -496,6 +496,7 @@ 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.36 process_madvise 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/bits/mman_ext.h b/sysdeps/unix/sysv/linux/bits/mman_ext.h > new file mode 100644 > index 0000000000..20960e7df5 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/bits/mman_ext.h > @@ -0,0 +1,33 @@ > +/* System-specific extensions of , Linux version. OK. > + Copyright (C) 2022 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 > + . */ > + > +#ifndef _SYS_MMAN_H > +# error "Never include directly; use instead." > +#endif > + > +#ifdef __USE_GNU > +#include > + > +/* > + */ > +extern __ssize_t process_madvise (int __pid_fd, const struct iovec* __iov, > + size_t __count, int __advice, > + unsigned __flags) OK. > + __THROW; > + > +#endif /* __USE_GNU */ > diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist > index 22618c7aaa..66c2f28c43 100644 > --- a/sysdeps/unix/sysv/linux/csky/libc.abilist > +++ b/sysdeps/unix/sysv/linux/csky/libc.abilist > @@ -2655,3 +2655,4 @@ 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.36 process_madvise F > diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist > index e2aea90c74..527880dc06 100644 > --- a/sysdeps/unix/sysv/linux/hppa/libc.abilist > +++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist > @@ -2604,6 +2604,7 @@ 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.36 process_madvise 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 29ecca26bb..1497b8a2c3 100644 > --- a/sysdeps/unix/sysv/linux/i386/libc.abilist > +++ b/sysdeps/unix/sysv/linux/i386/libc.abilist > @@ -2788,6 +2788,7 @@ 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.36 process_madvise 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 69a2ca2391..abe351d0b4 100644 > --- a/sysdeps/unix/sysv/linux/ia64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist > @@ -2554,6 +2554,7 @@ 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.36 process_madvise 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 23cc4ddd8a..130f7a6b04 100644 > --- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist > +++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist > @@ -500,6 +500,7 @@ 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.36 process_madvise 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 2d1d8a3d0c..cf59edb383 100644 > --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist > +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist > @@ -2731,6 +2731,7 @@ 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.36 process_madvise 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 7b6e88bdb9..f1b927d63d 100644 > --- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist > @@ -2704,3 +2704,4 @@ 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.36 process_madvise F > diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist > index 155c974790..9bb7c76f94 100644 > --- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist > @@ -2701,3 +2701,4 @@ 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.36 process_madvise F > diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist > index 7a811120ea..03e7820eea 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist > @@ -2696,6 +2696,7 @@ 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.36 process_madvise 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 7d28dca5c1..3d70dc1140 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist > @@ -2694,6 +2694,7 @@ 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.36 process_madvise 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 41790f0d63..5498e2ee30 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist > @@ -2702,6 +2702,7 @@ 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.36 process_madvise 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 9c15006c12..dbebed5d36 100644 > --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist > @@ -2605,6 +2605,7 @@ 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.36 process_madvise 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 27c0498b60..a0bfa86068 100644 > --- a/sysdeps/unix/sysv/linux/nios2/libc.abilist > +++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist > @@ -2743,3 +2743,4 @@ 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.36 process_madvise F > diff --git a/sysdeps/unix/sysv/linux/or1k/libc.abilist b/sysdeps/unix/sysv/linux/or1k/libc.abilist > index e500d4756f..7d09a03d0e 100644 > --- a/sysdeps/unix/sysv/linux/or1k/libc.abilist > +++ b/sysdeps/unix/sysv/linux/or1k/libc.abilist > @@ -2126,3 +2126,4 @@ GLIBC_2.35 wscanf F > GLIBC_2.36 pidfd_getfd F > GLIBC_2.36 pidfd_open F > GLIBC_2.36 pidfd_send_signal F > +GLIBC_2.36 process_madvise F > diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist > index adb21db204..db8fc28e75 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist > @@ -2758,6 +2758,7 @@ 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.36 process_madvise 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 28a08c4afb..e6cbb83b26 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist > @@ -2791,6 +2791,7 @@ 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.36 process_madvise 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 98c5f3e61c..162241fc68 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libc.abilist > @@ -2513,6 +2513,7 @@ 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.36 process_madvise 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 31e5aa90cd..2845ee2015 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libc.abilist > @@ -2815,3 +2815,4 @@ 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.36 process_madvise F > diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist > index 87d90bf668..277f6fbe95 100644 > --- a/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/riscv/rv32/libc.abilist > @@ -2382,3 +2382,4 @@ 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.36 process_madvise F > diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist > index b4a8f56aa2..6f2a4d4504 100644 > --- a/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/riscv/rv64/libc.abilist > @@ -2582,3 +2582,4 @@ 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.36 process_madvise F > diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist > index e4a58cc145..bfb317488d 100644 > --- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist > @@ -2756,6 +2756,7 @@ 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.36 process_madvise 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 ef0f0c3fa1..beef516979 100644 > --- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist > @@ -2550,6 +2550,7 @@ 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.36 process_madvise 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 603d50668f..c326c9320a 100644 > --- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist > @@ -2611,6 +2611,7 @@ 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.36 process_madvise 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 078cdf05a7..704f489a8e 100644 > --- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist > @@ -2608,6 +2608,7 @@ 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.36 process_madvise 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 735505ac51..b9e8a34153 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist > @@ -2751,6 +2751,7 @@ 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.36 process_madvise 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 48df7952cd..e921a8dd76 100644 > --- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist > @@ -2577,6 +2577,7 @@ 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.36 process_madvise 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/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list > index d9653bb433..2d664ea3f5 100644 > --- a/sysdeps/unix/sysv/linux/syscalls.list > +++ b/sysdeps/unix/sysv/linux/syscalls.list > @@ -43,6 +43,7 @@ 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 > +process_madvise EXTRA process_madvise i:iPniU process_madvise > 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/tst-process_madvise.c b/sysdeps/unix/sysv/linux/tst-process_madvise.c > new file mode 100644 > index 0000000000..a674e80b76 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/tst-process_madvise.c > @@ -0,0 +1,141 @@ > +/* Basic tests for Linux process_madvise. OK. > + Copyright (C) 2022 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 > + . */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +/* The pair of sockets used for coordination. The subprocess uses > + sockets[1]. */ > +static int sockets[2]; > + > +static long int page_size; > + > +static void > +exit_subprocess (int dummy) > +{ > + exit (EXIT_FAILURE); > +} > + > +static void > +subprocess (void) > +{ > + /* In case something goes wrong with parent before pidfd_send_signal. */ > + support_create_timer (5, 0, false, exit_subprocess); OK. > + > + void *p1 = xmmap (NULL, page_size * 2, PROT_READ | PROT_WRITE, > + MAP_PRIVATE | MAP_ANONYMOUS, -1); > + > + void *p2 = xmmap (NULL, page_size, PROT_READ | PROT_WRITE, > + MAP_PRIVATE | MAP_ANONYMOUS, -1); > + xmunmap(p2, page_size); > + > + xsendto (sockets[1], &(struct iovec) { p1, page_size * 2 }, > + sizeof (struct iovec), 0, NULL, 0); > + > + xsendto (sockets[1], &(struct iovec) { p2, page_size }, > + sizeof (struct iovec), 0, NULL, 0); > + > + pause (); > + > + _exit (0); > +} > + > +static int > +do_test (void) > +{ > + page_size = sysconf (_SC_PAGE_SIZE); > + > + { > + int r = pidfd_open (-1, 0); > + TEST_COMPARE (r, -1); > + if (errno == ENOSYS) > + FAIL_UNSUPPORTED ("kernel does not support pidfd_open, skipping test"); > + > + TEST_COMPARE (errno, EINVAL); > + } > + > + TEST_COMPARE (socketpair (AF_UNIX, SOCK_STREAM, 0, sockets), 0); > + > + pid_t pid = xfork (); > + if (pid == 0) > + { > + xclose (sockets[0]); > + subprocess (); > + } > + xclose (sockets[1]); > + > + int pidfd = pidfd_open (pid, 0); > + TEST_VERIFY (pidfd != -1); > + > + /* The target process is going to send us two iovec's. The first one points > + to a valid mapping, the other points to a previously valid mapping which > + has now been unmapped. */ OK. > + { > + struct iovec iv; > + xrecvfrom (sockets[0], &iv, sizeof (iv), 0, NULL, 0); > + > + /* We expect this to succeed in the target process because the mapping > + is valid. */ > + TEST_COMPARE (process_madvise (pidfd, &iv, 1, MADV_COLD, 0), > + 2 * page_size); > + } > + > + { > + struct iovec iv; > + xrecvfrom (sockets[0], &iv, sizeof (iv), 0, NULL, 0); > + > + /* We expect this to fail in the target process because the second iovec > + points to an unmapped region. The target process arranges for this to > + be the case. */ > + TEST_COMPARE (process_madvise (pidfd, &iv, 1, MADV_COLD, 0), -1); > + TEST_COMPARE (errno, ENOMEM); OK. > + } > + > + { > + struct iovec iv[IOV_MAX + 1]; > + TEST_COMPARE (process_madvise (pidfd, iv, array_length (iv), MADV_COLD, > + 0), -1); > + TEST_COMPARE (errno, EINVAL); OK. Excellent. Thanks for the extra coverage. > + } > + > + TEST_COMPARE (pidfd_send_signal (pidfd, SIGKILL, NULL, 0), 0); > + { > + siginfo_t info; > + int r = waitid (P_PIDFD, pidfd, &info, WEXITED); > + TEST_COMPARE (r, 0); > + TEST_COMPARE (info.si_status, SIGKILL); > + TEST_COMPARE (info.si_code, CLD_KILLED); > + } > + > + TEST_COMPARE (pidfd_send_signal (pidfd, SIGKILL, NULL, 0), -1); > + TEST_COMPARE (errno, ESRCH); OK. Yes! Full life-cycle checked. > + > + return 0; > +} > + > +#include > diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist > index 1629fb7762..8948dc2705 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist > +++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist > @@ -2528,6 +2528,7 @@ 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.36 process_madvise 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 ee9674ff75..0988804f24 100644 > --- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist > +++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist > @@ -2634,3 +2634,4 @@ 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.36 process_madvise F -- Cheers, Carlos.