From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lj1-x229.google.com (mail-lj1-x229.google.com [IPv6:2a00:1450:4864:20::229]) by sourceware.org (Postfix) with ESMTPS id E0C75385F3E2 for ; Mon, 12 Dec 2022 11:47:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E0C75385F3E2 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-lj1-x229.google.com with SMTP id g14so8240249ljh.10 for ; Mon, 12 Dec 2022 03:47:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BYwj4St3AD/N5kylbm1IoK54VFllSlMgmB88IU3J6k0=; b=GY/nhHTIfc8mkBnafBsrkxtcl2OIwmn1F/QLFn4dIewy6E+EC+ILvSbb0kW5QqYesY XydzoG4hWVyzQ1mVonCPsnW1/ZY8jLtmyG/j29b/H0zfqkOkxlUnLbPWEROyRT+/lCd6 WMIxNF3EbPpFhFbJTqf2x6sv5xF+k5EP5eySAWI1uUsH+qDRII2LmdQ6YU8nlYtZ/B2I 0nrNSTBpcdBEsehiqlIQvkN5MoSwDBLMulpGNuzMIIh3AVWJ8t6dxLDg8cvg88MUtNJK 5IC2t+ro+Oanim3Pjj4/1xc/x8Nm5dYOOOQAytEeAFPb9xd1dvQi73NK60+mfS5DxUQ4 HLKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BYwj4St3AD/N5kylbm1IoK54VFllSlMgmB88IU3J6k0=; b=RQJ3PK291uywDTwBlfis/WGk6yShrl++oo+GZZpU6tSxmg1J05d964IpmcxvyMfOyU rJfJuWg0MCnEfi4deuR9PU+5fZuCJlZu1ZclcMDB1EtSQG57eNUToc+X2TZqPx8GUbG2 QnzMzzKWlCGum3Bv6sdrAgBHvAi05L5On9c+9Pr1EsX2tpR7Eew4ErADQg2AuhzKrq69 7h4waLum7dLx7SLqW9IiPwA09dhaCl59TRWwvNSNkA8bYqQx8XaYe1CwSgoau/k6Yql5 rX0PqgJ+1OhrBPaVb7JEIOTzSx8VN9og+2BruDxgf2kEVHZjRK/gm1mewOBEhbIqTIzs H+dg== X-Gm-Message-State: ANoB5pnNO6fEfxqIh1rBo2Sc0tn0DvWxk3sQHjpGfBRuo8MPJo+/M4sj HtRwJDyfYY/7FEJukZw8xog= X-Google-Smtp-Source: AA0mqf5HXFloXZARnFYmn/CnjBXAwsY2lb+DQsU9NS/Romzl1ulPmbi9oDWMw4I46R1j+5fwrM5xSA== X-Received: by 2002:a05:651c:1608:b0:277:c03:72cd with SMTP id f8-20020a05651c160800b002770c0372cdmr3607430ljq.28.1670845621525; Mon, 12 Dec 2022 03:47:01 -0800 (PST) Received: from surface-pro-6.. ([194.190.106.50]) by smtp.gmail.com with ESMTPSA id g42-20020a0565123baa00b00497b198987bsm1606514lfv.26.2022.12.12.03.47.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Dec 2022 03:47:01 -0800 (PST) From: Sergey Bugaev To: bug-hurd@gnu.org, libc-alpha@sourceware.org, samuel.thibault@gnu.org Cc: Sergey Bugaev Subject: [RFC PATCH 3/3] hurd: Implement SHM_ANON Date: Mon, 12 Dec 2022 14:46:36 +0300 Message-Id: <20221212114636.74222-4-bugaevc@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221212114636.74222-1-bugaevc@gmail.com> References: <20221212114636.74222-1-bugaevc@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,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: 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. --- 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 76ea825b..12cc683e 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 11cb7cc7..6524776e 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.38.1