exec: clarify reasoning for euid/egid reset
Subsystems (2)
PATCH 1/1 exec: clarify reasoning for euid/egid reset
This section of code initially looks redundant, but is required. This improves the comment to explain more clearly why the reset is needed.
Signed-off-by Kees Cook <[email protected]>
--- fs/exec.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
fs/exec.c +6 -1
@@ -1387,7 +1387,12 @@ static void bprm_fill_uid(struct linux_binprm *bprm)kuid_t uid;kgid_t gid; -/* clear any previous set[ug]id data from a previous binary */ +/* +* Since this can be called multiple times (via prepare_binprm), +* we must clear any previous work done when setting set[ug]id +* bits from any earlier bprm->file uses (for example when run +* first for a script then for its interpreter). +*/ bprm->cred->euid =current_euid (); bprm->cred->egid =current_egid ();
Signature · 6 lines
2.6.3 -- Kees Cook Chrome OS & Brillo Security
Quoted 4 lines · Kees Cook
This section of code initially looks redundant, but is required. This improves the comment to explain more clearly why the reset is needed.
Signed-off-by Kees Cook <[email protected]>
Thanks, Kees.
Acked-by Serge E. Hallyn <[email protected]>
Quoted 29 lines
--- fs/exec.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)fs/exec.c +6
-1@@ -1387,7 +1387,12 @@ static void bprm_fill_uid(struct linux_binprm *bprm)kuid_t uid;kgid_t gid; -/* clear any previous set[ug]id data from a previous binary */ +/* +* Since this can be called multiple times (via prepare_binprm), +* we must clear any previous work done when setting set[ug]id +* bits from any earlier bprm->file uses (for example when run +* first for a script then for its interpreter). +*/ bprm->cred->euid =current_euid (); bprm->cred->egid =current_egid ();Signature · 6 lines
2.6.3 -- Kees Cook Chrome OS & Brillo Security
fs/exec.c static void bprm_fill_uid(struct linux_binprm *bprm) · line 1397
Quoted 9 lines · Kees Cook
fs/exec.c +6
-1-/* clear any previous set[ug]id data from a previous binary */ +/* +* Since this can be called multiple times (via prepare_binprm), +* we must clear any previous work done when setting set[ug]id +* bits from any earlier bprm->file uses (for example when run +* first for a script then for its interpreter). +*/ bprm->cred->euid =current_euid (); bprm->cred->egid =current_egid ();
I would further add that this is where we deal with setuid scripts.
David