|
@@ -37,11 +37,32 @@ int ima_appraise;
|
|
|
#endif
|
|
|
|
|
|
int ima_hash_algo = HASH_ALGO_SHA1;
|
|
|
+static int hash_setup_done;
|
|
|
|
|
|
static int __init hash_setup(char *str)
|
|
|
{
|
|
|
- if (strncmp(str, "md5", 3) == 0)
|
|
|
- ima_hash_algo = HASH_ALGO_MD5;
|
|
|
+ struct ima_template_desc *template_desc = ima_template_desc_current();
|
|
|
+ int i;
|
|
|
+
|
|
|
+ if (hash_setup_done)
|
|
|
+ return 1;
|
|
|
+
|
|
|
+ if (strcmp(template_desc->name, IMA_TEMPLATE_IMA_NAME) == 0) {
|
|
|
+ if (strncmp(str, "sha1", 4) == 0)
|
|
|
+ ima_hash_algo = HASH_ALGO_SHA1;
|
|
|
+ else if (strncmp(str, "md5", 3) == 0)
|
|
|
+ ima_hash_algo = HASH_ALGO_MD5;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (i = 0; i < HASH_ALGO__LAST; i++) {
|
|
|
+ if (strcmp(str, hash_algo_name[i]) == 0) {
|
|
|
+ ima_hash_algo = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+out:
|
|
|
+ hash_setup_done = 1;
|
|
|
return 1;
|
|
|
}
|
|
|
__setup("ima_hash=", hash_setup);
|
|
@@ -306,6 +327,7 @@ static int __init init_ima(void)
|
|
|
{
|
|
|
int error;
|
|
|
|
|
|
+ hash_setup(CONFIG_IMA_DEFAULT_HASH);
|
|
|
error = ima_init();
|
|
|
if (!error)
|
|
|
ima_initialized = 1;
|