MCPcopy Create free account
hub / github.com/F-Stack/f-stack / sys_setreuid

Function sys_setreuid

freebsd/kern/kern_prot.c:879–945  ·  view source on GitHub ↗

ARGSUSED */

Source from the content-addressed store, hash-verified

877#endif
878/* ARGSUSED */
879int
880sys_setreuid(struct thread *td, struct setreuid_args *uap)
881{
882 struct proc *p = td->td_proc;
883 struct ucred *newcred, *oldcred;
884 uid_t euid, ruid;
885 struct uidinfo *euip, *ruip;
886 int error;
887
888 euid = uap->euid;
889 ruid = uap->ruid;
890 AUDIT_ARG_EUID(euid);
891 AUDIT_ARG_RUID(ruid);
892 newcred = crget();
893 euip = uifind(euid);
894 ruip = uifind(ruid);
895 PROC_LOCK(p);
896 oldcred = crcopysafe(p, newcred);
897
898#ifdef MAC
899 error = mac_cred_check_setreuid(oldcred, ruid, euid);
900 if (error)
901 goto fail;
902#endif
903
904 if (((ruid != (uid_t)-1 && ruid != oldcred->cr_ruid &&
905 ruid != oldcred->cr_svuid) ||
906 (euid != (uid_t)-1 && euid != oldcred->cr_uid &&
907 euid != oldcred->cr_ruid && euid != oldcred->cr_svuid)) &&
908 (error = priv_check_cred(oldcred, PRIV_CRED_SETREUID)) != 0)
909 goto fail;
910
911 if (euid != (uid_t)-1 && oldcred->cr_uid != euid) {
912 change_euid(newcred, euip);
913 setsugid(p);
914 }
915 if (ruid != (uid_t)-1 && oldcred->cr_ruid != ruid) {
916 change_ruid(newcred, ruip);
917 setsugid(p);
918 }
919 if ((ruid != (uid_t)-1 || newcred->cr_uid != newcred->cr_ruid) &&
920 newcred->cr_svuid != newcred->cr_uid) {
921 change_svuid(newcred, newcred->cr_uid);
922 setsugid(p);
923 }
924 proc_set_cred(p, newcred);
925#ifdef RACCT
926 racct_proc_ucred_changed(p, oldcred, newcred);
927 crhold(newcred);
928#endif
929 PROC_UNLOCK(p);
930#ifdef RCTL
931 rctl_proc_ucred_changed(p, newcred);
932 crfree(newcred);
933#endif
934 uifree(ruip);
935 uifree(euip);
936 crfree(oldcred);

Callers

nothing calls this directly

Calls 15

crcopysafeFunction · 0.85
mac_cred_check_setreuidFunction · 0.85
change_euidFunction · 0.85
setsugidFunction · 0.85
change_ruidFunction · 0.85
change_svuidFunction · 0.85
proc_set_credFunction · 0.85
racct_proc_ucred_changedFunction · 0.85
rctl_proc_ucred_changedFunction · 0.85
uifreeFunction · 0.85
crgetFunction · 0.70
uifindFunction · 0.70

Tested by

no test coverage detected