From nobody Sun Jun 28 00:30:15 2026 X-Original-To: dev-commits-src-all@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 4gnr0S3cVpz6jDZH for ; Sun, 28 Jun 2026 00:30:16 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gnr0R6pYQz3dRY for ; Sun, 28 Jun 2026 00:30:15 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782606616; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=WuqEVqk1bYHzysfAzK4djt/n1gGDAwYYmrtLbt/CLTc=; b=lNK06XxsrEME0dH85xSarh6XyxZ2U/AwrocJ4SVs4QIagTiFtXfR6GoDhPWhmgeNxOf5pq 9OruJ3NPpueojnIIonYEsoJ6mICzhPqvrOfgnp06AhfaTQ01A8xO5NAJaBdu7k2GYb0Fsz GHrVn7WLSJ0456Ks0Y1EU7uJcgmiFfvtqYA3ibTzwUrD6AgAx1V1mFsPb+WWzkBqXDoxFF qdBq90aezCiyoQKNXDw0ebQ5Xr+QlZdTi0WxzhL5g8waCG2E/02dW5jog8Xe2YojflvQpB nUGRQKV6miAMbhoBWtN3O+NLmjfGjpcQp9jpCxkyofAePqNWPpub1JJqeHzfMw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1782606616; a=rsa-sha256; cv=none; b=LB3cNZxrwdS79EWdKGrLHoA5T5z2IkO9l1p/CMNYExZV6WyKgOLypuAJdzEk09ryWrSCLY 7ovyPLOKpBRmWBVm9mNYvSlZGuWhsinnQZTO7BA4+xRYWpqbGI51XD67Jxp7f4tY/TkT5n tWfLEw85NIK6+XGMqtmjJPLMsNYX3uL6OWSdlWXSWJMl2VrGB+sVqxUlNU2zpJyQd1N3st PSEu5tO0Ari1m15H7SLXvRIbp/VsL75J036bh7SKVFCZURckSAI+37+sVSpiBB0rDyaJai kUS38cN9kWHFlJLfclQRPYSbZFVhtNlQkDCrHg/IbNdqf5r7OFS6ubYoBiXRzA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782606616; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=WuqEVqk1bYHzysfAzK4djt/n1gGDAwYYmrtLbt/CLTc=; b=W46QWnbMMCW83bNCpYFVdX1GgL3qE59TYOlea9xp2StQImJv4RmJloBYuqUmcSwm5ndSwA iegD1RZnVOl+STF6APk4fGrKRjoU9Irf9QM7RUPpCxzEhh1J9Qerw91fiGBVJyh9SVG3vm 7eOjSzO4/RdjOesEviJBT0VuhJDcN7MtoKUai/12lchRUTQzq3AD8JZTj8TD4fc6khInk3 dl0o3TEboGBHsVR+ju90WaQYfR+TbFwqQK4Nb2LFofDwfJWSmVd60/WPJUo1Yc/AHNtazR BoMafdYR4U/524OcNafC7E1+XNyYwzO0u3YJTcDjLMPa3gSKFFoSw1bfqrCQ+g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gnr0R5jskzmD2 for ; Sun, 28 Jun 2026 00:30:15 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3f325 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 28 Jun 2026 00:30:15 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: ec0d7d01d6c4 - stable/14 - pseudofs: ensure that the target process vmspace is stable for VOP_READ/WRITE List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: ec0d7d01d6c45eff4043cf178addf65d1933d62a Auto-Submitted: auto-generated Date: Sun, 28 Jun 2026 00:30:15 +0000 Message-Id: <6a406b17.3f325.6bb8dde6@gitrepo.freebsd.org> The branch stable/14 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=ec0d7d01d6c45eff4043cf178addf65d1933d62a commit ec0d7d01d6c45eff4043cf178addf65d1933d62a Author: Konstantin Belousov AuthorDate: 2026-06-07 19:39:42 +0000 Commit: Konstantin Belousov CommitDate: 2026-06-28 00:29:03 +0000 pseudofs: ensure that the target process vmspace is stable for VOP_READ/WRITE (cherry picked from commit a4993bac41350e85bc9affb862d2974a1a09bb5e) --- sys/fs/pseudofs/pseudofs_vnops.c | 59 ++++++++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/sys/fs/pseudofs/pseudofs_vnops.c b/sys/fs/pseudofs/pseudofs_vnops.c index 6850c3683a2d..059e8fd0e8b2 100644 --- a/sys/fs/pseudofs/pseudofs_vnops.c +++ b/sys/fs/pseudofs/pseudofs_vnops.c @@ -676,6 +676,7 @@ pfs_read(struct vop_read_args *va) struct pfs_node *pn = pvd->pvd_pn; struct uio *uio = va->a_uio; struct proc *proc; + struct thread *td; struct sbuf *sb = NULL; int error, locked; off_t buflen, buflim; @@ -694,21 +695,30 @@ pfs_read(struct vop_read_args *va) if (pn->pn_fill == NULL) PFS_RETURN (EIO); + td = curthread; + /* * This is necessary because either process' privileges may * have changed since the open() call. */ - if (!pfs_visible(curthread, pn, pvd->pvd_pid, &proc)) + if (!pfs_visible(td, pn, pvd->pvd_pid, &proc)) PFS_RETURN (EIO); - if (proc != NULL) { - _PHOLD(proc); - PROC_UNLOCK(proc); - } vhold(vn); locked = VOP_ISLOCKED(vn); VOP_UNLOCK(vn); + if (proc != NULL) { + _PHOLD(proc); + execve_block_wait(td, proc); + if (!pfs_visible_proc(td, pn, proc)) { + PROC_UNLOCK(proc); + error = EIO; + goto ret; + } + PROC_UNLOCK(proc); + } + if (pn->pn_flags & PFS_RAWRD) { PFS_TRACE(("%zd resid", uio->uio_resid)); error = pn_fill(curthread, proc, pn, NULL, uio); @@ -778,8 +788,12 @@ pfs_read(struct vop_read_args *va) ret: vn_lock(vn, locked | LK_RETRY); vdrop(vn); - if (proc != NULL) - PRELE(proc); + if (proc != NULL) { + PROC_LOCK(proc); + execve_unblock(td, proc); + _PRELE(proc); + PROC_UNLOCK(proc); + } PFS_RETURN (error); } @@ -1087,6 +1101,7 @@ pfs_write(struct vop_write_args *va) struct pfs_node *pn = pvd->pvd_pn; struct uio *uio = va->a_uio; struct proc *proc; + struct thread *td; struct sbuf sb; int error; @@ -1106,36 +1121,44 @@ pfs_write(struct vop_write_args *va) if (uio->uio_resid > PFS_MAXBUFSIZ) PFS_RETURN (EIO); + td = curthread; + /* * This is necessary because either process' privileges may * have changed since the open() call. */ - if (!pfs_visible(curthread, pn, pvd->pvd_pid, &proc)) + if (!pfs_visible(td, pn, pvd->pvd_pid, &proc)) PFS_RETURN (EIO); if (proc != NULL) { _PHOLD(proc); + execve_block_wait(td, proc); + if (!pfs_visible_proc(td, pn, proc)) { + PROC_UNLOCK(proc); + error = EIO; + goto out; + } PROC_UNLOCK(proc); } if (pn->pn_flags & PFS_RAWWR) { error = pn_fill(curthread, proc, pn, NULL, uio); - if (proc != NULL) - PRELE(proc); - PFS_RETURN (error); + goto out; } sbuf_uionew(&sb, uio, &error); - if (error) { - if (proc != NULL) - PRELE(proc); - PFS_RETURN (error); - } + if (error != 0) + goto out; error = pn_fill(curthread, proc, pn, &sb, uio); sbuf_delete(&sb); - if (proc != NULL) - PRELE(proc); +out: + if (proc != NULL) { + PROC_LOCK(proc); + execve_unblock(td, proc); + _PRELE(proc); + PROC_UNLOCK(proc); + } PFS_RETURN (error); }