• Jann Horn's avatar
    LSM: SafeSetID: fix check for setresuid(new1, new2, new3) · 7ef6b306
    Jann Horn authored
    With the old code, when a process with the (real,effective,saved) UID set
    (1,1,1) calls setresuid(2,3,4), safesetid_task_fix_setuid() only checks
    whether the transition 1->2 is permitted; the transitions 1->3 and 1->4 are
    not checked. Fix this.
    
    This is also a good opportunity to refactor safesetid_task_fix_setuid() to
    be less verbose - having one branch per set*uid() syscall is unnecessary.
    
    Note that this slightly changes semantics: The UID transition check for
    UIDs that were not in the old cred struct is now always performed against
    the policy of the RUID. I think that's more consistent anyway, since the
    RUID is also the one that decides whether any policy is enforced at all.
    Signed-off-by: default avatarJann Horn <jannh@google.com>
    Signed-off-by: default avatarMicah Morton <mortonm@chromium.org>
    7ef6b306
lsm.c 5.86 KB