diff options
author | jhb <jhb@FreeBSD.org> | 2001-01-25 01:09:44 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2001-01-25 01:09:44 +0000 |
commit | 238ea9ee91a25c8c75403e2864930a6ba1e0512d (patch) | |
tree | b3118dea99c72e5f8deee438dfe15b5ed7fc9dfd /sys | |
parent | 8c6da5a7affcd5b96064c25611a21576dc165aaf (diff) | |
download | FreeBSD-src-238ea9ee91a25c8c75403e2864930a6ba1e0512d.zip FreeBSD-src-238ea9ee91a25c8c75403e2864930a6ba1e0512d.tar.gz |
Back out over-aggressive locking of p->p_cred.
Requested by: alfred
Diffstat (limited to 'sys')
-rw-r--r-- | sys/alpha/osf1/osf1_misc.c | 19 |
1 files changed, 3 insertions, 16 deletions
diff --git a/sys/alpha/osf1/osf1_misc.c b/sys/alpha/osf1/osf1_misc.c index d6f9518..13c835b 100644 --- a/sys/alpha/osf1/osf1_misc.c +++ b/sys/alpha/osf1/osf1_misc.c @@ -1066,35 +1066,26 @@ osf1_setuid(p, uap) register struct pcred *pc; uid = SCARG(uap, uid); - PROC_LOCK(p); pc = p->p_cred; if ((error = suser(p)) != 0 && - uid != pc->p_ruid && uid != pc->p_svuid) { - PROC_UNLOCK(p); + uid != pc->p_ruid && uid != pc->p_svuid) return (error); - } if (error == 0) { if (uid != pc->p_ruid) { - PROC_UNLOCK(p); change_ruid(p, uid); setsugid(p); - PROC_LOCK(p); } if (pc->p_svuid != uid) { - PROC_UNLOCK(p); pc->p_svuid = uid; setsugid(p); - PROC_LOCK(p); } } if (pc->pc_ucred->cr_uid != uid) { - PROC_UNLOCK(p); change_euid(p, uid); setsugid(p); - } else - PROC_UNLOCK(p); + } return (0); } @@ -1116,14 +1107,11 @@ osf1_setgid(p, uap) register struct pcred *pc; gid = SCARG(uap, gid); - PROC_LOCK(p); pc = p->p_cred; if (((error = suser(p)) != 0 ) && - gid != pc->p_rgid && gid != pc->p_svgid) { - PROC_UNLOCK(p); + gid != pc->p_rgid && gid != pc->p_svgid) return (error); - } pc->pc_ucred = crcopy(pc->pc_ucred); pc->pc_ucred->cr_gid = gid; @@ -1131,7 +1119,6 @@ osf1_setgid(p, uap) pc->p_rgid = gid; pc->p_svgid = gid; } - PROC_UNLOCK(p); setsugid(p); return (0); } |