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 |
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to