exec: Add a per bprm->file version of per_clear
authorEric W. Biederman <ebiederm@xmission.com>
Fri, 29 May 2020 13:24:10 +0000 (08:24 -0500)
committerEric W. Biederman <ebiederm@xmission.com>
Sat, 30 May 2020 02:06:48 +0000 (21:06 -0500)
commita7868323c2638a7c6c5b30b37831b73cbdf0dc15
tree645cd8ae2bb31c07ebb2831b692aa6615cf6fc25
parente32f8879019535b899bc3d51f371e17526f208d1
exec: Add a per bprm->file version of per_clear

There is a small bug in the code that recomputes parts of bprm->cred
for every bprm->file.  The code never recomputes the part of
clear_dangerous_personality_flags it is responsible for.

Which means that in practice if someone creates a sgid script
the interpreter will not be able to use any of:
READ_IMPLIES_EXEC
ADDR_NO_RANDOMIZE
ADDR_COMPAT_LAYOUT
MMAP_PAGE_ZERO.

This accentially clearing of personality flags probably does
not matter in practice because no one has complained
but it does make the code more difficult to understand.

Further remaining bug compatible prevents the recomputation from being
removed and replaced by simply computing bprm->cred once from the
final bprm->file.

Making this change removes the last behavior difference between
computing bprm->creds from the final file and recomputing
bprm->cred several times.  Which allows this behavior change
to be justified for it's own reasons, and for any but hunts
looking into why the behavior changed to wind up here instead
of in the code that will follow that computes bprm->cred
from the final bprm->file.

This small logic bug appears to have existed since the code
started clearing dangerous personality bits.

History Tree: git://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git
Fixes: 1bb0fa189c6a ("[PATCH] NX: clean up legacy binary support")
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
fs/exec.c
include/linux/binfmts.h
include/linux/lsm_hooks.h
security/commoncap.c