]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/miscfs/synthfs/synthfs_vfsops.c
xnu-792.25.20.tar.gz
[apple/xnu.git] / bsd / miscfs / synthfs / synthfs_vfsops.c
index 39e8d6a6cdc26e701735d20a52683fdcc9fad8c9..742de36d1becdb0d9b1c30c874ea4988e180fe41 100644 (file)
@@ -400,12 +400,13 @@ vn_mkdir(struct proc *p, char *path, int mode)
        int error;
 
        context.vc_proc = p;
-       context.vc_ucred = proc_ucred(p);       /* XXX kauth_cred_get() ??? proxy */
+       context.vc_ucred = kauth_cred_proc_ref(p);      /* XXX kauth_cred_get() ??? proxy */
 
        NDINIT(&nd, CREATE, LOCKPARENT, UIO_SYSSPACE32, CAST_USER_ADDR_T(path), &context);
        error = namei(&nd);
        if (error) {
                DBG_VOP(("vn_mkdir: error from namei, error = %d.\n", error));
+               kauth_cred_unref(&context.vc_ucred);
                return (error);
        };
        vp = nd.ni_vp;
@@ -427,6 +428,7 @@ vn_mkdir(struct proc *p, char *path, int mode)
                vnode_put(nd.ni_vp);
        nameidone(&nd);
 
+       kauth_cred_unref(&context.vc_ucred);
        return (error);
 }
 
@@ -440,10 +442,13 @@ vn_symlink(struct proc *p, char *path, char *link) {
        int error;
 
        context.vc_proc = p;
-       context.vc_ucred = proc_ucred(p);       /* XXX kauth_cred_get() ??? proxy */
+       context.vc_ucred = kauth_cred_proc_ref(p);      /* XXX kauth_cred_get() ??? proxy */
 
        NDINIT(&nd, CREATE, LOCKPARENT, UIO_SYSSPACE32, CAST_USER_ADDR_T(link), &context);
-       if ((error = namei(&nd))) return error;
+       if ((error = namei(&nd))) {
+               kauth_cred_unref(&context.vc_ucred);
+               return error;
+       }
 
        if (nd.ni_vp == NULL) {
                VATTR_INIT(&va);
@@ -459,6 +464,7 @@ vn_symlink(struct proc *p, char *path, char *link) {
                vnode_put(nd.ni_vp);
        nameidone(&nd);
 
+       kauth_cred_unref(&context.vc_ucred);
        return (error);
 }