aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Morris <james.l.morris@oracle.com>2013-01-06 20:11:37 -0500
committerJames Morris <james.l.morris@oracle.com>2013-01-06 20:11:37 -0500
commitade24c93ab173b392a905ef8d510874dfb05a417 (patch)
treef984a9b428cdf1866566cf9dba808d8fcc60d468
parent5f243b9b46a22e5790dbbc36f574c2417af49a41 (diff)
parenta7f2a366f62319dfebf8d4dfe8b211f631c78457 (diff)
Merge branch 'for-Linus' of git://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity into for-linus
Pulled from Mimi's tree.
-rw-r--r--security/integrity/ima/ima.h1
-rw-r--r--security/integrity/ima/ima_main.c12
-rw-r--r--security/integrity/ima/ima_policy.c3
3 files changed, 11 insertions, 5 deletions
diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h
index 3b2adb794f15..079a85dc37b2 100644
--- a/security/integrity/ima/ima.h
+++ b/security/integrity/ima/ima.h
@@ -139,6 +139,7 @@ void ima_delete_rules(void);
139/* Appraise integrity measurements */ 139/* Appraise integrity measurements */
140#define IMA_APPRAISE_ENFORCE 0x01 140#define IMA_APPRAISE_ENFORCE 0x01
141#define IMA_APPRAISE_FIX 0x02 141#define IMA_APPRAISE_FIX 0x02
142#define IMA_APPRAISE_MODULES 0x04
142 143
143#ifdef CONFIG_IMA_APPRAISE 144#ifdef CONFIG_IMA_APPRAISE
144int ima_appraise_measurement(struct integrity_iint_cache *iint, 145int ima_appraise_measurement(struct integrity_iint_cache *iint,
diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
index 45de18e9a6f2..dba965de90d3 100644
--- a/security/integrity/ima/ima_main.c
+++ b/security/integrity/ima/ima_main.c
@@ -291,11 +291,15 @@ EXPORT_SYMBOL_GPL(ima_file_check);
291 */ 291 */
292int ima_module_check(struct file *file) 292int ima_module_check(struct file *file)
293{ 293{
294 int rc; 294 int rc = 0;
295 295
296 if (!file) 296 if (!file) {
297 rc = INTEGRITY_UNKNOWN; 297 if (ima_appraise & IMA_APPRAISE_MODULES) {
298 else 298#ifndef CONFIG_MODULE_SIG_FORCE
299 rc = -EACCES; /* INTEGRITY_UNKNOWN */
300#endif
301 }
302 } else
299 rc = process_measurement(file, file->f_dentry->d_name.name, 303 rc = process_measurement(file, file->f_dentry->d_name.name,
300 MAY_EXEC, MODULE_CHECK); 304 MAY_EXEC, MODULE_CHECK);
301 return (ima_appraise & IMA_APPRAISE_ENFORCE) ? rc : 0; 305 return (ima_appraise & IMA_APPRAISE_ENFORCE) ? rc : 0;
diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c
index af7d182d5a46..479fca940bb5 100644
--- a/security/integrity/ima/ima_policy.c
+++ b/security/integrity/ima/ima_policy.c
@@ -523,7 +523,8 @@ static int ima_parse_rule(char *rule, struct ima_rule_entry *entry)
523 } 523 }
524 if (!result && (entry->action == UNKNOWN)) 524 if (!result && (entry->action == UNKNOWN))
525 result = -EINVAL; 525 result = -EINVAL;
526 526 else if (entry->func == MODULE_CHECK)
527 ima_appraise |= IMA_APPRAISE_MODULES;
527 audit_log_format(ab, "res=%d", !result); 528 audit_log_format(ab, "res=%d", !result);
528 audit_log_end(ab); 529 audit_log_end(ab);
529 return result; 530 return result;