History

ima: verify mprotect change is consistent with mmap policy

Files can be mmap'ed read/write and later changed to execute to circumvent IMA's mmap appraise policy rules. Due to locking issues (mmap semaphore would be taken prior to i_mutex), files can not be measured or appraised at this point. Eliminate this integrity gap, by denying the mprotect PROT_EXECUTE change, if an mmap appraise policy rule exists. On mprotect change success, return 0. On failure, return -EACESS.

Mimi Zohar committed 6 years ago

Commit 8eb613c1 parent 0c4395f3 files · +64 −1Browse files

Showing the changes to include/linux (1 of 3 files). Show all

Unified · Split

include/linux/ima.h+7−0
@@ -18,6 +18,7 @@ extern int ima_file_check(struct file *file, int mask); · 17 unmodified lines
1818 extern void ima_post_create_tmpfile(struct inode *inode);
1919 extern void ima_file_free(struct file *file);
2020 extern int ima_file_mmap(struct file *file, unsigned long prot);
21+extern int ima_file_mprotect(struct vm_area_struct *vma, unsigned long prot);
2122 extern int ima_load_data(enum kernel_load_data_id id);
2223 extern int ima_read_file(struct file *file, enum kernel_read_file_id id);
2324 extern int ima_post_read_file(struct file *file, void *buf, loff_t size,
@@ -70,6 +71,12 @@ static inline int ima_file_mmap(struct file *file, unsigned long prot) · 46 unmodified lines
7071 return 0;
7172 }
7273
74+static inline int ima_file_mprotect(struct vm_area_struct *vma,
75+ unsigned long prot)
76+{
77+ return 0;
78+}
79+
7380 static inline int ima_load_data(enum kernel_load_data_id id)
7481 {
7582 return 0;