summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2001-01-25 01:09:44 +0000
committerjhb <jhb@FreeBSD.org>2001-01-25 01:09:44 +0000
commit238ea9ee91a25c8c75403e2864930a6ba1e0512d (patch)
treeb3118dea99c72e5f8deee438dfe15b5ed7fc9dfd
parent8c6da5a7affcd5b96064c25611a21576dc165aaf (diff)
downloadFreeBSD-src-238ea9ee91a25c8c75403e2864930a6ba1e0512d.zip
FreeBSD-src-238ea9ee91a25c8c75403e2864930a6ba1e0512d.tar.gz
Back out over-aggressive locking of p->p_cred.
Requested by: alfred
-rw-r--r--sys/alpha/osf1/osf1_misc.c19
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);
}
OpenPOWER on IntegriCloud