git: df23288bc0c6 - stable/12 - vfs: honor error code returned by mac_vnode_check_rename_from
Mark Johnston
markj at FreeBSD.org
Fri Apr 9 14:56:14 UTC 2021
The branch stable/12 has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=df23288bc0c6d3c16287756c7f43c679fba6a0de
commit df23288bc0c6d3c16287756c7f43c679fba6a0de
Author: Mateusz Guzik <mjg at FreeBSD.org>
AuthorDate: 2020-07-29 17:04:33 +0000
Commit: Mark Johnston <markj at 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 |
More information about the dev-commits-src-all
mailing list