IMA: Support using new creds in appraisal policy
authorMatthew Garrett <mjg59@google.com>
Mon, 8 Jan 2018 21:36:20 +0000 (13:36 -0800)
committerMimi Zohar <zohar@linux.vnet.ibm.com>
Fri, 23 Mar 2018 10:31:11 +0000 (06:31 -0400)
commitd906c10d8a31654cb9167c9a2ebc7d3e43820bad
treeb82b0c49a7d88ee82fc7f083a8bf62250e8164f9
parent3ec30113264a7bcd389f51d1738e42da0f41bb5a
IMA: Support using new creds in appraisal policy

The existing BPRM_CHECK functionality in IMA validates against the
credentials of the existing process, not any new credentials that the
child process may transition to. Add an additional CREDS_CHECK target
and refactor IMA to pass the appropriate creds structure. In
ima_bprm_check(), check with both the existing process credentials and
the credentials that will be committed when the new process is started.
This will not change behaviour unless the system policy is extended to
include CREDS_CHECK targets - BPRM_CHECK will continue to check the same
credentials that it did previously.

After this patch, an IMA policy rule along the lines of:

measure func=CREDS_CHECK subj_type=unconfined_t

will trigger if a process is executed and runs as unconfined_t, ignoring
the context of the parent process. This is in contrast to:

measure func=BPRM_CHECK subj_type=unconfined_t

which will trigger if the process that calls exec() is already executing
in unconfined_t, ignoring the context that the child process executes
into.

Signed-off-by: Matthew Garrett <mjg59@google.com>
Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com>
Changelog:
- initialize ima_creds_status
Documentation/ABI/testing/ima_policy
security/integrity/iint.c
security/integrity/ima/ima.h
security/integrity/ima/ima_api.c
security/integrity/ima/ima_appraise.c
security/integrity/ima/ima_main.c
security/integrity/ima/ima_policy.c
security/integrity/integrity.h