From nobody Sun Oct 10 18:24:36 2021 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4590E17EAC95; Sun, 10 Oct 2021 18:24:37 +0000 (UTC) (envelope-from git@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) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4HS9Ls1Y6Yz3mvl; Sun, 10 Oct 2021 18:24:37 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 157AA12A9F; Sun, 10 Oct 2021 18:24:37 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 19AIOacb024464; Sun, 10 Oct 2021 18:24:36 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 19AIOapi024463; Sun, 10 Oct 2021 18:24:36 GMT (envelope-from git) Date: Sun, 10 Oct 2021 18:24:36 GMT Message-Id: <202110101824.19AIOapi024463@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mateusz Guzik Subject: git: a0558fe90d3b - main - Retire code added to support CloudABI List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mjg X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a0558fe90d3bebdf8583888cc96b4c170eab8cfb Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by mjg: URL: https://cgit.FreeBSD.org/src/commit/?id=a0558fe90d3bebdf8583888cc96b4c170eab8cfb commit a0558fe90d3bebdf8583888cc96b4c170eab8cfb Author: Mateusz Guzik AuthorDate: 2021-04-28 20:55:03 +0000 Commit: Mateusz Guzik CommitDate: 2021-10-10 18:24:29 +0000 Retire code added to support CloudABI CloudABI was removed in cf0ee8738e31aa9e6fbf4dca4dac56d89226a71a --- sys/kern/kern_descrip.c | 97 ++----------------------------------------------- sys/kern/kern_exec.c | 88 ++++---------------------------------------- sys/kern/kern_fork.c | 4 +- sys/kern/subr_syscall.c | 2 - sys/sys/filedesc.h | 5 --- sys/sys/imgact.h | 3 -- sys/sys/proc.h | 2 +- 7 files changed, 14 insertions(+), 187 deletions(-) diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c index 755b5df51c6a..b10dcc2f9469 100644 --- a/sys/kern/kern_descrip.c +++ b/sys/kern/kern_descrip.c @@ -906,7 +906,7 @@ kern_dup(struct thread *td, u_int mode, int flags, int old, int new) FILEDESC_XLOCK(fdp); if (fget_locked(fdp, old) == NULL) goto unlock; - if ((mode == FDDUP_FIXED || mode == FDDUP_MUSTREPLACE) && old == new) { + if (mode == FDDUP_FIXED && old == new) { td->td_retval[0] = new; if (flags & FDDUP_FLAG_CLOEXEC) fdp->fd_ofiles[new].fde_flags |= UF_EXCLOSE; @@ -932,13 +932,6 @@ kern_dup(struct thread *td, u_int mode, int flags, int old, int new) goto unlock; } break; - case FDDUP_MUSTREPLACE: - /* Target file descriptor must exist. */ - if (fget_locked(fdp, new) == NULL) { - fdrop(oldfp, td); - goto unlock; - } - break; case FDDUP_FIXED: if (new >= fdp->fd_nfiles) { /* @@ -2320,14 +2313,6 @@ pdunshare(struct thread *td) p->p_pd = pdp; } -void -fdinstall_remapped(struct thread *td, struct filedesc *fdp) -{ - - fdescfree(td); - td->td_proc->p_fd = fdp; -} - /* * Copy a filedesc structure. A NULL pointer in returns a NULL reference, * this is to ease callers, not catch errors. @@ -2380,66 +2365,6 @@ pdcopy(struct pwddesc *pdp) return (newpdp); } -/* - * Copies a filedesc structure, while remapping all file descriptors - * stored inside using a translation table. - * - * File descriptors are copied over to the new file descriptor table, - * regardless of whether the close-on-exec flag is set. - */ -int -fdcopy_remapped(struct filedesc *fdp, const int *fds, size_t nfds, - struct filedesc **ret) -{ - struct filedesc *newfdp; - struct filedescent *nfde, *ofde; - int error, i, lastfile; - - MPASS(fdp != NULL); - - newfdp = fdinit(fdp, true, &lastfile); - if (nfds > lastfile + 1) { - /* New table cannot be larger than the old one. */ - error = E2BIG; - goto bad; - } - /* Copy all passable descriptors (i.e. not kqueue). */ - newfdp->fd_freefile = nfds; - for (i = 0; i < nfds; ++i) { - if (fds[i] < 0 || fds[i] > lastfile) { - /* File descriptor out of bounds. */ - error = EBADF; - goto bad; - } - ofde = &fdp->fd_ofiles[fds[i]]; - if (ofde->fde_file == NULL) { - /* Unused file descriptor. */ - error = EBADF; - goto bad; - } - if ((ofde->fde_file->f_ops->fo_flags & DFLAG_PASSABLE) == 0) { - /* File descriptor cannot be passed. */ - error = EINVAL; - goto bad; - } - if (!fhold(ofde->fde_file)) { - error = EBADF; - goto bad; - } - nfde = &newfdp->fd_ofiles[i]; - *nfde = *ofde; - filecaps_copy(&ofde->fde_caps, &nfde->fde_caps, true); - fdused_init(newfdp, i); - } - FILEDESC_SUNLOCK(fdp); - *ret = newfdp; - return (0); -bad: - FILEDESC_SUNLOCK(fdp); - fdescfree_remapped(newfdp); - return (error); -} - /* * Clear POSIX style locks. This is only used when fdp looses a reference (i.e. * one of processes using it exits) and the table used to be shared. @@ -2526,7 +2451,7 @@ retry: * Release a filedesc structure. */ static void -fdescfree_fds(struct thread *td, struct filedesc *fdp, bool needclose) +fdescfree_fds(struct thread *td, struct filedesc *fdp) { struct filedesc0 *fdp0; struct freetable *ft, *tft; @@ -2551,10 +2476,7 @@ fdescfree_fds(struct thread *td, struct filedesc *fdp, bool needclose) fp = fde->fde_file; if (fp != NULL) { fdefree_last(fde); - if (needclose) - (void) closef(fp, td); - else - fdrop(fp, td); + (void) closef(fp, td); } } @@ -2598,7 +2520,7 @@ fdescfree(struct thread *td) if (refcount_release(&fdp->fd_refcnt) == 0) return; - fdescfree_fds(td, fdp, 1); + fdescfree_fds(td, fdp); } void @@ -2621,17 +2543,6 @@ pdescfree(struct thread *td) pddrop(pdp); } -void -fdescfree_remapped(struct filedesc *fdp) -{ -#ifdef INVARIANTS - /* fdescfree_fds() asserts that fd_refcnt == 0. */ - if (!refcount_release(&fdp->fd_refcnt)) - panic("%s: fd table %p has extra references", __func__, fdp); -#endif - fdescfree_fds(curthread, fdp, 0); -} - /* * For setugid programs, we don't want to people to use that setugidness * to generate error messages which write to a file which otherwise would diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index 7ec405ee6a62..50e75fda6cfb 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -704,21 +704,14 @@ interpret: goto exec_fail_dealloc; } - if (args->fdp != NULL) { - /* Install a brand new file descriptor table. */ - fdinstall_remapped(td, args->fdp); - args->fdp = NULL; - } else { - /* - * Keep on using the existing file descriptor table. For - * security and other reasons, the file descriptor table - * cannot be shared after an exec. - */ - fdunshare(td); - pdunshare(td); - /* close files on exec */ - fdcloseexec(td); - } + /* + * For security and other reasons, the file descriptor table cannot be + * shared after an exec. + */ + fdunshare(td); + pdunshare(td); + /* close files on exec */ + fdcloseexec(td); /* * Malloc things before we need locks. @@ -1239,69 +1232,6 @@ err_exit: return (error); } -int -exec_copyin_data_fds(struct thread *td, struct image_args *args, - const void *data, size_t datalen, const int *fds, size_t fdslen) -{ - struct filedesc *ofdp; - const char *p; - int *kfds; - int error; - - memset(args, '\0', sizeof(*args)); - ofdp = td->td_proc->p_fd; - if (datalen >= ARG_MAX || fdslen >= ofdp->fd_nfiles) - return (E2BIG); - error = exec_alloc_args(args); - if (error != 0) - return (error); - - args->begin_argv = args->buf; - args->stringspace = ARG_MAX; - - if (datalen > 0) { - /* - * Argument buffer has been provided. Copy it into the - * kernel as a single string and add a terminating null - * byte. - */ - error = copyin(data, args->begin_argv, datalen); - if (error != 0) - goto err_exit; - args->begin_argv[datalen] = '\0'; - args->endp = args->begin_argv + datalen + 1; - args->stringspace -= datalen + 1; - - /* - * Traditional argument counting. Count the number of - * null bytes. - */ - for (p = args->begin_argv; p < args->endp; ++p) - if (*p == '\0') - ++args->argc; - } else { - /* No argument buffer provided. */ - args->endp = args->begin_argv; - } - - /* Create new file descriptor table. */ - kfds = malloc(fdslen * sizeof(int), M_TEMP, M_WAITOK); - error = copyin(fds, kfds, fdslen * sizeof(int)); - if (error != 0) { - free(kfds, M_TEMP); - goto err_exit; - } - error = fdcopy_remapped(ofdp, kfds, fdslen, &args->fdp); - free(kfds, M_TEMP); - if (error != 0) - goto err_exit; - - return (0); -err_exit: - exec_free_args(args); - return (error); -} - struct exec_args_kva { vm_offset_t addr; u_int gen; @@ -1438,8 +1368,6 @@ exec_free_args(struct image_args *args) free(args->fname_buf, M_TEMP); args->fname_buf = NULL; } - if (args->fdp != NULL) - fdescfree_remapped(args->fdp); } /* diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 2d8381894a7c..606801283a1f 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -597,8 +597,7 @@ do_fork(struct thread *td, struct fork_req *fr, struct proc *p2, struct thread * * been preserved. */ p2->p_flag |= p1->p_flag & P_SUGID; - td2->td_pflags |= (td->td_pflags & (TDP_ALTSTACK | - TDP_SIGFASTBLOCK)) | TDP_FORKING; + td2->td_pflags |= (td->td_pflags & (TDP_ALTSTACK | TDP_SIGFASTBLOCK)); SESS_LOCK(p1->p_session); if (p1->p_session->s_ttyvp != NULL && p1->p_flag & P_CONTROLT) p2->p_flag |= P_CONTROLT; @@ -1100,7 +1099,6 @@ fork_exit(void (*callout)(void *, struct trapframe *), void *arg, if (p->p_sysent->sv_schedtail != NULL) (p->p_sysent->sv_schedtail)(td); - td->td_pflags &= ~TDP_FORKING; } /* diff --git a/sys/kern/subr_syscall.c b/sys/kern/subr_syscall.c index 2304e3e7f3f9..ada2053bc87c 100644 --- a/sys/kern/subr_syscall.c +++ b/sys/kern/subr_syscall.c @@ -215,8 +215,6 @@ syscallret(struct thread *td) ksiginfo_t ksi; int traced; - KASSERT((td->td_pflags & TDP_FORKING) == 0, - ("fork() did not clear TDP_FORKING upon completion")); KASSERT(td->td_errno != ERELOOKUP, ("ERELOOKUP not consumed syscall %d", td->td_sa.code)); diff --git a/sys/sys/filedesc.h b/sys/sys/filedesc.h index f17fdf601ba1..30392c1bf0fd 100644 --- a/sys/sys/filedesc.h +++ b/sys/sys/filedesc.h @@ -203,7 +203,6 @@ enum { FDDUP_NORMAL, /* dup() behavior. */ FDDUP_FCNTL, /* fcntl()-style errors. */ FDDUP_FIXED, /* Force fixed allocation. */ - FDDUP_MUSTREPLACE, /* Target must exist. */ FDDUP_LASTMODE, }; @@ -250,12 +249,8 @@ void fdclose(struct thread *td, struct file *fp, int idx); void fdcloseexec(struct thread *td); void fdsetugidsafety(struct thread *td); struct filedesc *fdcopy(struct filedesc *fdp); -int fdcopy_remapped(struct filedesc *fdp, const int *fds, size_t nfds, - struct filedesc **newfdp); -void fdinstall_remapped(struct thread *td, struct filedesc *fdp); void fdunshare(struct thread *td); void fdescfree(struct thread *td); -void fdescfree_remapped(struct filedesc *fdp); int fdlastfile(struct filedesc *fdp); int fdlastfile_single(struct filedesc *fdp); struct filedesc *fdinit(struct filedesc *fdp, bool prepfiles, int *lastfile); diff --git a/sys/sys/imgact.h b/sys/sys/imgact.h index cd130551c050..ef4de48c3e6d 100644 --- a/sys/sys/imgact.h +++ b/sys/sys/imgact.h @@ -55,7 +55,6 @@ struct image_args { int argc; /* count of argument strings */ int envc; /* count of environment strings */ int fd; /* file descriptor of the executable */ - struct filedesc *fdp; /* new file descriptor table */ }; struct image_params { @@ -120,8 +119,6 @@ void exec_setregs(struct thread *, struct image_params *, uintptr_t); int exec_shell_imgact(struct image_params *); int exec_copyin_args(struct image_args *, const char *, enum uio_seg, char **, char **); -int exec_copyin_data_fds(struct thread *, struct image_args *, const void *, - size_t, const int *, size_t); void exec_stackgap(struct image_params *imgp, uintptr_t *dp); int pre_execve(struct thread *td, struct vmspace **oldvmspace); void post_execve(struct thread *td, int error, struct vmspace *oldvmspace); diff --git a/sys/sys/proc.h b/sys/sys/proc.h index 691bdae8b41a..1e3d7359a55b 100644 --- a/sys/sys/proc.h +++ b/sys/sys/proc.h @@ -524,7 +524,7 @@ do { \ #define TDP_RESETSPUR 0x04000000 /* Reset spurious page fault history. */ #define TDP_NERRNO 0x08000000 /* Last errno is already in td_errno */ #define TDP_UIOHELD 0x10000000 /* Current uio has pages held in td_ma */ -#define TDP_FORKING 0x20000000 /* Thread is being created through fork() */ +#define TDP_UNUSED0 0x20000000 /* UNUSED */ #define TDP_EXECVMSPC 0x40000000 /* Execve destroyed old vmspace */ #define TDP_SIGFASTPENDING 0x80000000 /* Pending signal due to sigfastblock */