From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from eggs.gnu.org (eggs.gnu.org [IPv6:2001:470:142:3::10]) by sourceware.org (Postfix) with ESMTPS id 384823858D3C for ; Wed, 1 Feb 2023 22:36:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 384823858D3C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gnu.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gnu.org Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pNLic-0006mV-Lr; Wed, 01 Feb 2023 17:36:42 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=In-Reply-To:MIME-Version:References:Subject:To:From: Date; bh=girUswAqm5VQY/oAzbBr8k/Qc/Z+y3ygvZeP5iKcwC4=; b=KikbFuDGwx5UBNIkvRok FSf9W2GbPjs+XFXtutbzUBEJax0b8Y5WzkHaDyZUavSg1cZX0zNu8XMc0GHJ6ERa0//kQ7/E0Gp6q kWYmKN/Xw33HChmldzRYfAHw1CHh/0wMoB9IVDwRXhXTuea90plzr2bYwFsQobDz83lKDNk9YhGyS x9qByZNq70quRtKUMceFZZ1ChGNsFJCANvJ5KUsixAhelxZSDtrJP7CMhQBWCnCRI5aAVSgzPxPsO 3v9u78XaOXegJxt2gE3Qp/l/98Ib8c8o52RZ1pzN5OL17yHgjLjW5cq1hyv1GzC9h9yPlbUrRKdCT u6W/m6cgQd8PxA==; Received: from lfbn-bor-1-1163-184.w92-158.abo.wanadoo.fr ([92.158.138.184] helo=begin) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pNLib-000306-Mh; Wed, 01 Feb 2023 17:36:41 -0500 Received: from samy by begin with local (Exim 4.96) (envelope-from ) id 1pNLia-00C1Mq-1b; Wed, 01 Feb 2023 23:36:40 +0100 Date: Wed, 1 Feb 2023 23:36:40 +0100 From: Samuel Thibault To: Sergey Bugaev Cc: bug-hurd@gnu.org, libc-alpha@sourceware.org Subject: Re: [PATCH v2 3/3] hurd: Implement SHM_ANON Message-ID: <20230201223640.voo4p5ccokkzrmqq@begin> Mail-Followup-To: Sergey Bugaev , bug-hurd@gnu.org, libc-alpha@sourceware.org References: <20230130095907.mlvp3pbmtarkhhql@begin> <20230130125216.6254-4-bugaevc@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20230130125216.6254-4-bugaevc@gmail.com> Organization: I am not organized User-Agent: NeoMutt/20170609 (1.8.3) X-Spam-Status: No, score=-11.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,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Applied, thanks! Sergey Bugaev, le lun. 30 janv. 2023 15:52:16 +0300, a ecrit: > This adds a special SHM_ANON value that can be passed into shm_open () > in place of a name. When called in this way, shm_open () will create a > new anonymous shared memory file. The file will be created in the same > way that other shared memory files are created (i.e., under /dev/shm/), > except that it is not given a name and therefore cannot be reached from > the file system, nor by other calls to shm_open (). This is accomplished > by utilizing O_TMPFILE. > > This is intended to be compatible with FreeBSD's API of the same name. > > Signed-off-by: Sergey Bugaev > --- > posix/shm-directory.c | 25 +++++++++++++++++++++---- > rt/shm_open.c | 5 +++++ > sysdeps/mach/hurd/bits/mman_ext.h | 25 +++++++++++++++++++++++++ > 3 files changed, 51 insertions(+), 4 deletions(-) > create mode 100644 sysdeps/mach/hurd/bits/mman_ext.h > > diff --git a/posix/shm-directory.c b/posix/shm-directory.c > index 47e2355d..86d9fd8e 100644 > --- a/posix/shm-directory.c > +++ b/posix/shm-directory.c > @@ -23,17 +23,34 @@ > #include > #include > #include > +#include > +#include > > int > __shm_get_name (struct shmdir_name *result, const char *name, bool sem_prefix) > { > + struct alloc_buffer buffer; > + size_t namelen; > + > + buffer = alloc_buffer_create (result->name, sizeof (result->name)); > + alloc_buffer_copy_bytes (&buffer, SHMDIR, strlen (SHMDIR)); > + > +#if defined (SHM_ANON) && defined (O_TMPFILE) > + if (name == SHM_ANON) > + { > + /* For SHM_ANON, we want shm_open () to pass O_TMPFILE to open (), > + with SHMDIR itself as the path. So, leave it at that. */ > + alloc_buffer_add_byte (&buffer, 0); > + if (alloc_buffer_has_failed (&buffer)) > + return -1; > + return 0; > + } > +#endif > + > while (name[0] == '/') > ++name; > - size_t namelen = strlen (name); > + namelen = strlen (name); > > - struct alloc_buffer buffer > - = alloc_buffer_create (result->name, sizeof (result->name)); > - alloc_buffer_copy_bytes (&buffer, SHMDIR, strlen (SHMDIR)); > if (sem_prefix) > alloc_buffer_copy_bytes (&buffer, "sem.", strlen ("sem.")); > alloc_buffer_copy_bytes (&buffer, name, namelen + 1); > diff --git a/rt/shm_open.c b/rt/shm_open.c > index 48970bbc..6c1f4d60 100644 > --- a/rt/shm_open.c > +++ b/rt/shm_open.c > @@ -23,6 +23,7 @@ > #include > #include > #include > +#include > > /* Open shared memory object. */ > int > @@ -36,6 +37,10 @@ __shm_open (const char *name, int oflag, mode_t mode) > } > > oflag |= O_NOFOLLOW | O_CLOEXEC; > +#if defined (SHM_ANON) && defined (O_TMPFILE) > + if (name == SHM_ANON) > + oflag |= O_TMPFILE; > +#endif > > int fd = __open64_nocancel (dirname.name, oflag, mode); > if (fd == -1 && __glibc_unlikely (errno == EISDIR)) > diff --git a/sysdeps/mach/hurd/bits/mman_ext.h b/sysdeps/mach/hurd/bits/mman_ext.h > new file mode 100644 > index 00000000..f022826e > --- /dev/null > +++ b/sysdeps/mach/hurd/bits/mman_ext.h > @@ -0,0 +1,25 @@ > +/* System-specific extensions of , Hurd version. > + 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 > +# define SHM_ANON ((const char *) 1) > +#endif /* __USE_GNU */ > -- > 2.39.1 > -- Samuel --- Pour une évaluation indépendante, transparente et rigoureuse ! Je soutiens la Commission d'Évaluation de l'Inria.