From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_MSPIKE_H2,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 14219 invoked from network); 18 Aug 2022 00:35:47 -0000 Received: from second.openwall.net (193.110.157.125) by inbox.vuxu.org with ESMTPUTF8; 18 Aug 2022 00:35:47 -0000 Received: (qmail 1785 invoked by uid 550); 18 Aug 2022 00:35:45 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 1753 invoked from network); 18 Aug 2022 00:35:45 -0000 Date: Wed, 17 Aug 2022 20:35:32 -0400 From: Rich Felker To: Guilherme Janczak Cc: musl@lists.openwall.com Message-ID: <20220818003531.GG7074@brightrain.aerifal.cx> References: <20220810130311.dwk7zxwkz32igrdm@yandex.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220810130311.dwk7zxwkz32igrdm@yandex.com> User-Agent: Mutt/1.5.21 (2010-09-15) Subject: Re: [musl] [PATCH] add close_range() syscall wrapper On Wed, Aug 10, 2022 at 01:03:11PM +0000, Guilherme Janczak wrote: > close_range() is a syscall present in FreeBSD 8.0 and Linux 5.9. glibc > 2.34 added a wrapper. > --- The existence of this operation has been controversial, and it's arguable that it should be excluded by policy not to support UB (it's UB to close fds you don't own that might be used internally by the implementation) though I'm not sure it really helps since folks who want to use it will just make the syscall directly. We should probably at least consider it for inclusion. > include/unistd.h | 3 +++ > src/linux/close_range.c | 8 ++++++++ > 2 files changed, 11 insertions(+) > create mode 100644 src/linux/close_range.c > > diff --git a/include/unistd.h b/include/unistd.h > index 80be3b26..e4b8cbb1 100644 > --- a/include/unistd.h > +++ b/include/unistd.h > @@ -161,6 +161,9 @@ unsigned ualarm(unsigned, unsigned); > #define L_INCR 1 > #define L_XTND 2 > int brk(void *); > +#define CLOSE_RANGE_UNSHARE 0x01 > +#define CLOSE_RANGE_CLOEXEC 0x02 > +int close_range(unsigned int, unsigned int, int); > void *sbrk(intptr_t); > pid_t vfork(void); > int vhangup(void); > diff --git a/src/linux/close_range.c b/src/linux/close_range.c > new file mode 100644 > index 00000000..4c5cd68c > --- /dev/null > +++ b/src/linux/close_range.c > @@ -0,0 +1,8 @@ > +#define _GNU_SOURCE This should probably be _BSD_SOURCE if it's exposed under _BSD_SOURCE. > +#include > +#include "syscall.h" > + > +int close_range(unsigned int first, unsigned int last, int flags) > +{ > + return syscall(SYS_close_range, first, last, (unsigned int)flags); > +} > -- > 2.35.1 Can you elaborate on what the cast to unsigned is for? Rich