Re: [PATCH v2 1/8] exec: Teach prepare_exec_creds how exec treats uids & gids
From: Eric W. Biederman
Date: Tue May 19 2020 - 15:00:59 EST
Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> writes:
> On Tue, May 19, 2020 at 11:03 AM Kees Cook <keescook@xxxxxxxxxxxx> wrote:
>>
>> One question, though: why add this, since the repeat calling of the caps
>> LSM hook will do this?
>
> I assume it's for the "preserve_creds" case where we don't even end up
> setting creds at all.
>
> Yeah, at some point we'll hit a bprm handler that doesn't set
> 'preserve_creds', and it all does get set in the end, but that's not
> statically all that obvious.
>
> I think it makes sense to initialize as much as possible from the
> generic code, and rely as little as possible on what the binfmt
> handlers end up actually doing.
Where this initially came from was I was looking at how to clean up the
case of no_new_privs/ptrace of a suid executable when we don't have
enough permissions. Just being able to create creds that kept
everything as they were looked very useful and there was just this one
little bit missing.
I included the change to prepare_exec_creds in this patchset to
emphasize that neither security_bprm_creds_for_exec nor
security_bprm_repopulate_creds need to do anything if there is nothing
special going on.
At the very least that helps me think through what the LSMs are required
to do, and what those hooks are for. AKA privilege changing execs.
So I was thinking rely on the LSMs as little as possible rather than
rely on the binfmt handlers as little as possible. But it is the same
idea.
And yes it makes everything easier to analyze if everything starts off
in a known good state.
Eric