Remove Giant from the setuid(), seteuid(), setgid(), setegid(),

setgroups(), setreuid(), setregid(), setresuid(), and setresgid() syscalls
as well as the cred_update_thread() function.
This commit is contained in:
John Baldwin 2003-05-01 21:21:42 +00:00
parent aaa2c2ab24
commit 52c3844c7a

View File

@ -496,7 +496,6 @@ setuid(struct thread *td, struct setuid_args *uap)
struct uidinfo *uip;
int error;
mtx_lock(&Giant);
uid = uap->uid;
newcred = crget();
uip = uifind(uid);
@ -531,7 +530,6 @@ setuid(struct thread *td, struct setuid_args *uap)
PROC_UNLOCK(p);
uifree(uip);
crfree(newcred);
mtx_unlock(&Giant);
return (error);
}
@ -582,7 +580,6 @@ setuid(struct thread *td, struct setuid_args *uap)
PROC_UNLOCK(p);
uifree(uip);
crfree(oldcred);
mtx_unlock(&Giant);
return (0);
}
@ -605,7 +602,6 @@ seteuid(struct thread *td, struct seteuid_args *uap)
int error;
euid = uap->euid;
mtx_lock(&Giant);
newcred = crget();
euip = uifind(euid);
PROC_LOCK(p);
@ -616,7 +612,6 @@ seteuid(struct thread *td, struct seteuid_args *uap)
PROC_UNLOCK(p);
uifree(euip);
crfree(newcred);
mtx_unlock(&Giant);
return (error);
}
/*
@ -632,7 +627,6 @@ seteuid(struct thread *td, struct seteuid_args *uap)
PROC_UNLOCK(p);
uifree(euip);
crfree(oldcred);
mtx_unlock(&Giant);
return (0);
}
@ -654,7 +648,6 @@ setgid(struct thread *td, struct setgid_args *uap)
int error;
gid = uap->gid;
mtx_lock(&Giant);
newcred = crget();
PROC_LOCK(p);
oldcred = p->p_ucred;
@ -680,7 +673,6 @@ setgid(struct thread *td, struct setgid_args *uap)
(error = suser_cred(oldcred, PRISON_ROOT)) != 0) {
PROC_UNLOCK(p);
crfree(newcred);
mtx_unlock(&Giant);
return (error);
}
@ -727,7 +719,6 @@ setgid(struct thread *td, struct setgid_args *uap)
p->p_ucred = newcred;
PROC_UNLOCK(p);
crfree(oldcred);
mtx_unlock(&Giant);
return (0);
}
@ -749,7 +740,6 @@ setegid(struct thread *td, struct setegid_args *uap)
int error;
egid = uap->egid;
mtx_lock(&Giant);
newcred = crget();
PROC_LOCK(p);
oldcred = p->p_ucred;
@ -758,7 +748,6 @@ setegid(struct thread *td, struct setegid_args *uap)
(error = suser_cred(oldcred, PRISON_ROOT)) != 0) {
PROC_UNLOCK(p);
crfree(newcred);
mtx_unlock(&Giant);
return (error);
}
crcopy(newcred, oldcred);
@ -769,7 +758,6 @@ setegid(struct thread *td, struct setegid_args *uap)
p->p_ucred = newcred;
PROC_UNLOCK(p);
crfree(oldcred);
mtx_unlock(&Giant);
return (0);
}
@ -794,12 +782,10 @@ setgroups(struct thread *td, struct setgroups_args *uap)
ngrp = uap->gidsetsize;
if (ngrp > NGROUPS)
return (EINVAL);
mtx_lock(&Giant);
tempcred = crget();
error = copyin(uap->gidset, tempcred->cr_groups, ngrp * sizeof(gid_t));
if (error != 0) {
crfree(tempcred);
mtx_unlock(&Giant);
return (error);
}
newcred = crget();
@ -810,7 +796,6 @@ setgroups(struct thread *td, struct setgroups_args *uap)
PROC_UNLOCK(p);
crfree(newcred);
crfree(tempcred);
mtx_unlock(&Giant);
return (error);
}
@ -837,7 +822,6 @@ setgroups(struct thread *td, struct setgroups_args *uap)
PROC_UNLOCK(p);
crfree(tempcred);
crfree(oldcred);
mtx_unlock(&Giant);
return (0);
}
@ -862,7 +846,6 @@ setreuid(register struct thread *td, struct setreuid_args *uap)
euid = uap->euid;
ruid = uap->ruid;
mtx_lock(&Giant);
newcred = crget();
euip = uifind(euid);
ruip = uifind(ruid);
@ -877,7 +860,6 @@ setreuid(register struct thread *td, struct setreuid_args *uap)
uifree(ruip);
uifree(euip);
crfree(newcred);
mtx_unlock(&Giant);
return (error);
}
crcopy(newcred, oldcred);
@ -899,7 +881,6 @@ setreuid(register struct thread *td, struct setreuid_args *uap)
uifree(ruip);
uifree(euip);
crfree(oldcred);
mtx_unlock(&Giant);
return (0);
}
@ -923,7 +904,6 @@ setregid(register struct thread *td, struct setregid_args *uap)
egid = uap->egid;
rgid = uap->rgid;
mtx_lock(&Giant);
newcred = crget();
PROC_LOCK(p);
oldcred = p->p_ucred;
@ -934,7 +914,6 @@ setregid(register struct thread *td, struct setregid_args *uap)
(error = suser_cred(oldcred, PRISON_ROOT)) != 0) {
PROC_UNLOCK(p);
crfree(newcred);
mtx_unlock(&Giant);
return (error);
}
@ -955,7 +934,6 @@ setregid(register struct thread *td, struct setregid_args *uap)
p->p_ucred = newcred;
PROC_UNLOCK(p);
crfree(oldcred);
mtx_unlock(&Giant);
return (0);
}
@ -987,7 +965,6 @@ setresuid(register struct thread *td, struct setresuid_args *uap)
euid = uap->euid;
ruid = uap->ruid;
suid = uap->suid;
mtx_lock(&Giant);
newcred = crget();
euip = uifind(euid);
ruip = uifind(ruid);
@ -1007,7 +984,6 @@ setresuid(register struct thread *td, struct setresuid_args *uap)
uifree(ruip);
uifree(euip);
crfree(newcred);
mtx_unlock(&Giant);
return (error);
}
@ -1029,7 +1005,6 @@ setresuid(register struct thread *td, struct setresuid_args *uap)
uifree(ruip);
uifree(euip);
crfree(oldcred);
mtx_unlock(&Giant);
return (0);
}
@ -1060,7 +1035,6 @@ setresgid(register struct thread *td, struct setresgid_args *uap)
egid = uap->egid;
rgid = uap->rgid;
sgid = uap->sgid;
mtx_lock(&Giant);
newcred = crget();
PROC_LOCK(p);
oldcred = p->p_ucred;
@ -1076,7 +1050,6 @@ setresgid(register struct thread *td, struct setresgid_args *uap)
(error = suser_cred(oldcred, PRISON_ROOT)) != 0) {
PROC_UNLOCK(p);
crfree(newcred);
mtx_unlock(&Giant);
return (error);
}
@ -1096,7 +1069,6 @@ setresgid(register struct thread *td, struct setresgid_args *uap)
p->p_ucred = newcred;
PROC_UNLOCK(p);
crfree(oldcred);
mtx_unlock(&Giant);
return (0);
}
@ -1822,13 +1794,11 @@ cred_update_thread(struct thread *td)
p = td->td_proc;
cred = td->td_ucred;
mtx_lock(&Giant);
PROC_LOCK(p);
td->td_ucred = crhold(p->p_ucred);
PROC_UNLOCK(p);
if (cred != NULL)
crfree(cred);
mtx_unlock(&Giant);
}
/*