[RFC PATCH v4 11/12] security/apparmor: Add enclave_load() implementation
Sean Christopherson
sean.j.christopherson at intel.com
Wed Jun 19 22:24:00 UTC 2019
Require execute permissions when loading an enclave from a file.
Signed-off-by: Sean Christopherson <sean.j.christopherson at intel.com>
---
security/apparmor/include/audit.h | 2 ++
security/apparmor/lsm.c | 14 ++++++++++++++
2 files changed, 16 insertions(+)
diff --git a/security/apparmor/include/audit.h b/security/apparmor/include/audit.h
index ee559bc2acb8..84470483e04d 100644
--- a/security/apparmor/include/audit.h
+++ b/security/apparmor/include/audit.h
@@ -107,6 +107,8 @@ enum audit_type {
#define OP_PROF_LOAD "profile_load"
#define OP_PROF_RM "profile_remove"
+#define OP_ENCL_LOAD "enclave_load"
+
struct apparmor_audit_data {
int error;
diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
index 87500bde5a92..2ed1157e1f58 100644
--- a/security/apparmor/lsm.c
+++ b/security/apparmor/lsm.c
@@ -517,6 +517,17 @@ static int apparmor_file_mprotect(struct vm_area_struct *vma,
!(vma->vm_flags & VM_SHARED) ? MAP_PRIVATE : 0);
}
+#ifdef CONFIG_INTEL_SGX
+static int apparmor_enclave_load(struct vm_area_struct *vma, unsigned long prot,
+ bool measured)
+{
+ if (!(prot & PROT_EXEC))
+ return 0;
+
+ return common_file_perm(OP_ENCL_LOAD, vma->vm_file, AA_EXEC_MMAP);
+}
+#endif
+
static int apparmor_sb_mount(const char *dev_name, const struct path *path,
const char *type, unsigned long flags, void *data)
{
@@ -1243,6 +1254,9 @@ static struct security_hook_list apparmor_hooks[] __lsm_ro_after_init = {
LSM_HOOK_INIT(secid_to_secctx, apparmor_secid_to_secctx),
LSM_HOOK_INIT(secctx_to_secid, apparmor_secctx_to_secid),
LSM_HOOK_INIT(release_secctx, apparmor_release_secctx),
+#ifdef CONFIG_INTEL_SGX
+ LSM_HOOK_INIT(enclave_load, apparmor_enclave_load),
+#endif
};
/*
--
2.21.0
More information about the Linux-security-module-archive
mailing list