svn commit: r363667 - head/sys/kern

Mateusz Guzik mjg at FreeBSD.org
Wed Jul 29 17:04:34 UTC 2020


Author: mjg
Date: Wed Jul 29 17:04:33 2020
New Revision: 363667
URL: https://svnweb.freebsd.org/changeset/base/363667

Log:
  vfs: honor error code returned by mac_vnode_check_rename_from
  
  MFC after:	3 days

Modified:
  head/sys/kern/vfs_syscalls.c

Modified: head/sys/kern/vfs_syscalls.c
==============================================================================
--- head/sys/kern/vfs_syscalls.c	Wed Jul 29 15:46:17 2020	(r363666)
+++ head/sys/kern/vfs_syscalls.c	Wed Jul 29 17:04:33 2020	(r363667)
@@ -3556,20 +3556,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);
 	if (fromnd.ni_dvp != fromnd.ni_vp)
 		VOP_UNLOCK(fromnd.ni_vp);
+	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 |


More information about the svn-src-all mailing list