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