From owner-svn-src-head@freebsd.org Sun Jan 5 04:06:41 2020 Return-Path: Delivered-To: svn-src-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 528521D7706; Sun, 5 Jan 2020 04:06:41 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 47r4p90yY5z3Jlr; Sun, 5 Jan 2020 04:06:41 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1480E1FCA5; Sun, 5 Jan 2020 04:06:41 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 00546e6w047399; Sun, 5 Jan 2020 04:06:40 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 00546eN9047396; Sun, 5 Jan 2020 04:06:40 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <202001050406.00546eN9047396@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Sun, 5 Jan 2020 04:06:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r356372 - in head/sys: compat/cloudabi kern sys X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: in head/sys: compat/cloudabi kern sys X-SVN-Commit-Revision: 356372 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jan 2020 04:06:41 -0000 Author: kevans Date: Sun Jan 5 04:06:40 2020 New Revision: 356372 URL: https://svnweb.freebsd.org/changeset/base/356372 Log: shm: correct KPI mistake introduced around memfd_create When file sealing and shm_open2 were introduced, we should have grown a new kern_shm_open2 helper that did the brunt of the work with the new interface while kern_shm_open remains the same. Instead, more complexity was introduced to kern_shm_open to handle the additional features and consumers had to keep changing in somewhat awkward ways, and a kern_shm_open2 was added to wrap kern_shm_open. Backpedal on this and correct the situation- kern_shm_open returns to the interface it had prior to file sealing being introduced, and neither function needs an initial_seals argument anymore as it's handled in kern_shm_open2 based on the shmflags. Modified: head/sys/compat/cloudabi/cloudabi_fd.c head/sys/kern/uipc_shm.c head/sys/sys/syscallsubr.h Modified: head/sys/compat/cloudabi/cloudabi_fd.c ============================================================================== --- head/sys/compat/cloudabi/cloudabi_fd.c Sun Jan 5 03:15:16 2020 (r356371) +++ head/sys/compat/cloudabi/cloudabi_fd.c Sun Jan 5 04:06:40 2020 (r356372) @@ -96,7 +96,7 @@ cloudabi_sys_fd_create1(struct thread *td, cap_rights_init(&fcaps.fc_rights, CAP_FSTAT, CAP_FTRUNCATE, CAP_MMAP_RWX); return (kern_shm_open(td, SHM_ANON, O_RDWR | O_CLOEXEC, 0, - &fcaps, F_SEAL_SEAL)); + &fcaps)); default: return (EINVAL); } Modified: head/sys/kern/uipc_shm.c ============================================================================== --- head/sys/kern/uipc_shm.c Sun Jan 5 03:15:16 2020 (r356371) +++ head/sys/kern/uipc_shm.c Sun Jan 5 04:06:40 2020 (r356372) @@ -731,8 +731,8 @@ shm_remove(char *path, Fnv32_t fnv, struct ucred *ucre } int -kern_shm_open(struct thread *td, const char *userpath, int flags, mode_t mode, - struct filecaps *fcaps, int initial_seals) +kern_shm_open2(struct thread *td, const char *userpath, int flags, mode_t mode, + int shmflags, struct filecaps *fcaps, const char *name __unused) { struct filedesc *fdp; struct shmfd *shmfd; @@ -741,8 +741,15 @@ kern_shm_open(struct thread *td, const char *userpath, void *rl_cookie; Fnv32_t fnv; mode_t cmode; - int fd, error; + int error, fd, initial_seals; + if ((shmflags & ~SHM_ALLOW_SEALING) != 0) + return (EINVAL); + + initial_seals = F_SEAL_SEAL; + if ((shmflags & SHM_ALLOW_SEALING) != 0) + initial_seals &= ~F_SEAL_SEAL; + #ifdef CAPABILITY_MODE /* * shm_open(2) is only allowed for anonymous objects. @@ -923,8 +930,8 @@ int freebsd12_shm_open(struct thread *td, struct freebsd12_shm_open_args *uap) { - return (kern_shm_open(td, uap->path, uap->flags | O_CLOEXEC, uap->mode, - NULL, F_SEAL_SEAL)); + return (kern_shm_open(td, uap->path, uap->flags | O_CLOEXEC, + uap->mode, NULL)); } #endif @@ -1476,18 +1483,11 @@ SYSCTL_PROC(_kern_ipc, OID_AUTO, posix_shm_list, "POSIX SHM list"); int -kern_shm_open2(struct thread *td, const char *path, int flags, mode_t mode, - int shmflags, const char *name __unused) +kern_shm_open(struct thread *td, const char *path, int flags, mode_t mode, + struct filecaps *caps) { - int initial_seals; - if ((shmflags & ~SHM_ALLOW_SEALING) != 0) - return (EINVAL); - - initial_seals = F_SEAL_SEAL; - if ((shmflags & SHM_ALLOW_SEALING) != 0) - initial_seals &= ~F_SEAL_SEAL; - return (kern_shm_open(td, path, flags, mode, NULL, initial_seals)); + return (kern_shm_open2(td, path, flags, mode, 0, caps, NULL)); } /* @@ -1505,5 +1505,5 @@ sys_shm_open2(struct thread *td, struct shm_open2_args { return (kern_shm_open2(td, uap->path, uap->flags, uap->mode, - uap->shmflags, uap->name)); + uap->shmflags, NULL, uap->name)); } Modified: head/sys/sys/syscallsubr.h ============================================================================== --- head/sys/sys/syscallsubr.h Sun Jan 5 03:15:16 2020 (r356371) +++ head/sys/sys/syscallsubr.h Sun Jan 5 04:06:40 2020 (r356372) @@ -257,9 +257,10 @@ int kern_setsockopt(struct thread *td, int s, int leve int kern_settimeofday(struct thread *td, struct timeval *tv, struct timezone *tzp); int kern_shm_open(struct thread *td, const char *userpath, int flags, - mode_t mode, struct filecaps *fcaps, int initial_seals); + mode_t mode, struct filecaps *fcaps); int kern_shm_open2(struct thread *td, const char *path, int flags, - mode_t mode, int shmflags, const char *name); + mode_t mode, int shmflags, struct filecaps *fcaps, + const char *name); int kern_shmat(struct thread *td, int shmid, const void *shmaddr, int shmflg); int kern_shmctl(struct thread *td, int shmid, int cmd, void *buf,