summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortrasz <trasz@FreeBSD.org>2010-08-25 21:32:08 +0000
committertrasz <trasz@FreeBSD.org>2010-08-25 21:32:08 +0000
commit4cbbeb5cda5d384d501811ef68b598a5dc83e515 (patch)
tree07d741feae3938787844602dd8ca4e38416bcd09
parent17590dfe29d971d11bc5574d29869c4868d0d95b (diff)
downloadFreeBSD-src-4cbbeb5cda5d384d501811ef68b598a5dc83e515.zip
FreeBSD-src-4cbbeb5cda5d384d501811ef68b598a5dc83e515.tar.gz
Revert r210194, adding a comment explaining why calls to chgproccnt()
in unionfs are actually needed. I have a better fix in trasz_hrl p4 branch, but now is not a good moment to commit it. Reported by: Alex Kozlov
-rw-r--r--sys/fs/unionfs/union_subr.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/fs/unionfs/union_subr.c b/sys/fs/unionfs/union_subr.c
index dbed54e..2e74844 100644
--- a/sys/fs/unionfs/union_subr.c
+++ b/sys/fs/unionfs/union_subr.c
@@ -775,6 +775,11 @@ unionfs_mkshadowdir(struct unionfs_mount *ump, struct vnode *udvp,
/* Authority change to root */
rootinfo = uifind((uid_t)0);
cred = crdup(cnp->cn_cred);
+ /*
+ * The calls to chgproccnt() are needed to compensate for change_ruid()
+ * calling chgproccnt().
+ */
+ chgproccnt(cred->cr_ruidinfo, 1, 0);
change_euid(cred, rootinfo);
change_ruid(cred, rootinfo);
change_svuid(cred, (uid_t)0);
@@ -824,6 +829,7 @@ unionfs_mkshadowdir_free_out:
unionfs_mkshadowdir_abort:
cnp->cn_cred = credbk;
+ chgproccnt(cred->cr_ruidinfo, -1, 0);
crfree(cred);
return (error);
OpenPOWER on IntegriCloud