Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Apr 2021 14:56:14 GMT
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: df23288bc0c6 - stable/12 - vfs: honor error code returned by mac_vnode_check_rename_from
Message-ID:  <202104091456.139EuExL005744@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/12 has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=df23288bc0c6d3c16287756c7f43c679fba6a0de

commit df23288bc0c6d3c16287756c7f43c679fba6a0de
Author:     Mateusz Guzik <mjg@FreeBSD.org>
AuthorDate: 2020-07-29 17:04:33 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2021-04-09 14:49:52 +0000

    vfs: honor error code returned by mac_vnode_check_rename_from
    
    (cherry picked from commit fd8c6a48abe0ad2ba64b611fe044830f89b30138)
---
 sys/kern/vfs_syscalls.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 64b2f5d4a18a..f07ee87fce08 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -3499,20 +3499,27 @@ again:
 	NDINIT_ATRIGHTS(&fromnd, DELETE, LOCKPARENT | LOCKLEAF | SAVESTART |
 	    AUDITVNODE1, pathseg, old, oldfd,
 	    &cap_renameat_source_rights, td);
-#else
-	NDINIT_ATRIGHTS(&fromnd, DELETE, WANTPARENT | SAVESTART | AUDITVNODE1,
-	    pathseg, old, oldfd,
-	    &cap_renameat_source_rights, td);
-#endif
-
 	if ((error = namei(&fromnd)) != 0)
 		return (error);
-#ifdef MAC
 	error = mac_vnode_check_rename_from(td->td_ucred, fromnd.ni_dvp,
 	    fromnd.ni_vp, &fromnd.ni_cnd);
 	VOP_UNLOCK(fromnd.ni_dvp, 0);
 	if (fromnd.ni_dvp != fromnd.ni_vp)
 		VOP_UNLOCK(fromnd.ni_vp, 0);
+	if (error != 0) {
+		NDFREE(&fromnd, NDF_ONLY_PNBUF);
+		vrele(fromnd.ni_dvp);
+		vrele(fromnd.ni_vp);
+		if (fromnd.ni_startdir)
+			vrele(fromnd.ni_startdir);
+		return (error);
+	}
+#else
+	NDINIT_ATRIGHTS(&fromnd, DELETE, WANTPARENT | SAVESTART | AUDITVNODE1,
+	    pathseg, old, oldfd,
+	    &cap_renameat_source_rights, td);
+	if ((error = namei(&fromnd)) != 0)
+		return (error);
 #endif
 	fvp = fromnd.ni_vp;
 	NDINIT_ATRIGHTS(&tond, RENAME, LOCKPARENT | LOCKLEAF | NOCACHE |



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202104091456.139EuExL005744>