• Eric W. Biederman's avatar
    exec: Always set cap_ambient in cap_bprm_set_creds · a4ae32c7
    Eric W. Biederman authored
    An invariant of cap_bprm_set_creds is that every field in the new cred
    structure that cap_bprm_set_creds might set, needs to be set every
    time to ensure the fields does not get a stale value.
    
    The field cap_ambient is not set every time cap_bprm_set_creds is
    called, which means that if there is a suid or sgid script with an
    interpreter that has neither the suid nor the sgid bits set the
    interpreter should be able to accept ambient credentials.
    Unfortuantely because cap_ambient is not reset to it's original value
    the interpreter can not accept ambient credentials.
    
    Given that the ambient capability set is expected to be controlled by
    the caller, I don't think this is particularly serious.  But it is
    definitely worth fixing so the code works correctly.
    
    I have tested to verify my reading of the code is correct and the
    interpreter of a sgid can receive ambient capabilities with this
    change and cannot receive ambient capabilities without this change.
    
    Cc: stable@vger.kernel.org
    Cc: Andy Lutomirski <luto@kernel.org>
    Fixes: 58319057 ("capabilities: ambient capabilities")
    Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
    a4ae32c7
commoncap.c 38.9 KB