summaryrefslogtreecommitdiffstats
path: root/security/integrity/ima/ima_template.c
diff options
context:
space:
mode:
authorRoberto Sassu <roberto.sassu@polito.it>2013-06-07 12:16:35 +0200
committerMimi Zohar <zohar@linux.vnet.ibm.com>2013-10-27 02:32:54 +0100
commit9b9d4ce592d283fc4c01da746c02a840c499bb7e (patch)
treee0778c7a3aef0259a06f03c2f90f271a6789000c /security/integrity/ima/ima_template.c
parentima: add Kconfig default measurement list template (diff)
downloadlinux-9b9d4ce592d283fc4c01da746c02a840c499bb7e.tar.xz
linux-9b9d4ce592d283fc4c01da746c02a840c499bb7e.zip
ima: define kernel parameter 'ima_template=' to change configured default
This patch allows users to specify from the kernel command line the template descriptor, among those defined, that will be used to generate and display measurement entries. If an user specifies a wrong template, IMA reverts to the template descriptor set in the kernel configuration. Signed-off-by: Roberto Sassu <roberto.sassu@polito.it> Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com>
Diffstat (limited to 'security/integrity/ima/ima_template.c')
-rw-r--r--security/integrity/ima/ima_template.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/security/integrity/ima/ima_template.c b/security/integrity/ima/ima_template.c
index c28ff9bf8f32..000221419f6c 100644
--- a/security/integrity/ima/ima_template.c
+++ b/security/integrity/ima/ima_template.c
@@ -12,6 +12,8 @@
* File: ima_template.c
* Helpers to manage template descriptors.
*/
+#include <crypto/hash_info.h>
+
#include "ima.h"
#include "ima_template_lib.h"
@@ -32,6 +34,35 @@ static struct ima_template_field supported_fields[] = {
};
static struct ima_template_desc *ima_template;
+static struct ima_template_desc *lookup_template_desc(const char *name);
+
+static int __init ima_template_setup(char *str)
+{
+ struct ima_template_desc *template_desc;
+ int template_len = strlen(str);
+
+ /*
+ * Verify that a template with the supplied name exists.
+ * If not, use CONFIG_IMA_DEFAULT_TEMPLATE.
+ */
+ template_desc = lookup_template_desc(str);
+ if (!template_desc)
+ return 1;
+
+ /*
+ * Verify whether the current hash algorithm is supported
+ * by the 'ima' template.
+ */
+ if (template_len == 3 && strcmp(str, IMA_TEMPLATE_IMA_NAME) == 0 &&
+ ima_hash_algo != HASH_ALGO_SHA1 && ima_hash_algo != HASH_ALGO_MD5) {
+ pr_err("IMA: template does not support hash alg\n");
+ return 1;
+ }
+
+ ima_template = template_desc;
+ return 1;
+}
+__setup("ima_template=", ima_template_setup);
static struct ima_template_desc *lookup_template_desc(const char *name)
{