Skip to content

Commit 30d68cb

Browse files
fredlawlrobertosassu
authored andcommitted
ima: process_measurement() needlessly takes inode_lock() on MAY_READ
On IMA policy update, if a measure rule exists in the policy, IMA_MEASURE is set for ima_policy_flags which makes the violation_check variable always true. Coupled with a no-action on MAY_READ for a FILE_CHECK call, we're always taking the inode_lock(). This becomes a performance problem for extremely heavy read-only workloads. Therefore, prevent this only in the case there's no action to be taken. Signed-off-by: Frederick Lawler <fred@cloudflare.com> Acked-by: Roberto Sassu <roberto.sassu@huawei.com> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
1 parent 9c32cda commit 30d68cb

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

security/integrity/ima/ima_main.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,9 @@ static int process_measurement(struct file *file, const struct cred *cred,
245245
&allowed_algos);
246246
violation_check = ((func == FILE_CHECK || func == MMAP_CHECK ||
247247
func == MMAP_CHECK_REQPROT) &&
248-
(ima_policy_flag & IMA_MEASURE));
248+
(ima_policy_flag & IMA_MEASURE) &&
249+
((action & IMA_MEASURE) ||
250+
(file->f_mode & FMODE_WRITE)));
249251
if (!action && !violation_check)
250252
return 0;
251253

0 commit comments

Comments
 (0)