The
do_setresuid and
do_setresgid functions are used to implement the various system calls that allow a process to change its real, effective, and saved uid and gid values.
The
do_setresuid function sets the specified processes real user ID to
ruid, its effective user ID to
euid, and its saved user ID to
svuid. If any of the uid arguments are -1 then that assignment is skipped.
If
suser() is true, then any values may be assigned, otherwise the new uid values must match one of the existing values and the caller must have set the relevant bit in
flags.
The
flags argument specifies which of the existing uid values the new value must match. It should be set to a logical OR of ID_{R,E,S}_EQ_{R,E,S}, where ID_E_EQ_R means that it is valid to set the effective ID to the current value of the real ID.
The
do_setresgid function sets the group IDs but otherwise behaves in the same manner as
do_setresuid. The processes group list is neither examined nor effected.