ima_main.c 16.7 KB
Newer Older
1
/*
2 3
 * Integrity Measurement Architecture
 *
4 5 6 7 8 9 10 11 12 13 14 15 16 17
 * Copyright (C) 2005,2006,2007,2008 IBM Corporation
 *
 * Authors:
 * Reiner Sailer <sailer@watson.ibm.com>
 * Serge Hallyn <serue@us.ibm.com>
 * Kylene Hall <kylene@us.ibm.com>
 * Mimi Zohar <zohar@us.ibm.com>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation, version 2 of the
 * License.
 *
 * File: ima_main.c
18
 *	implements the IMA hooks: ima_bprm_check, ima_file_mmap,
19
 *	and ima_file_check.
20
 */
21 22 23

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

24
#include <linux/module.h>
25 26 27 28
#include <linux/file.h>
#include <linux/binfmts.h>
#include <linux/mount.h>
#include <linux/mman.h>
29
#include <linux/slab.h>
M
Mimi Zohar 已提交
30
#include <linux/xattr.h>
31
#include <linux/ima.h>
32
#include <linux/iversion.h>
33
#include <linux/fs.h>
34 35 36

#include "ima.h"

M
Mimi Zohar 已提交
37 38 39 40 41 42
#ifdef CONFIG_IMA_APPRAISE
int ima_appraise = IMA_APPRAISE_ENFORCE;
#else
int ima_appraise;
#endif

43
int ima_hash_algo = HASH_ALGO_SHA1;
44
static int hash_setup_done;
45

46 47
static int __init hash_setup(char *str)
{
48 49 50 51 52 53 54 55 56 57 58
	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;
59 60
		else
			return 1;
61 62 63
		goto out;
	}

Y
Yisheng Xie 已提交
64 65
	i = match_string(hash_algo_name, HASH_ALGO__LAST, str);
	if (i < 0)
66
		return 1;
Y
Yisheng Xie 已提交
67 68

	ima_hash_algo = i;
69 70
out:
	hash_setup_done = 1;
71 72 73 74
	return 1;
}
__setup("ima_hash=", hash_setup);

M
Mimi Zohar 已提交
75
/*
76
 * ima_rdwr_violation_check
M
Mimi Zohar 已提交
77
 *
78
 * Only invalidate the PCR for measured files:
79
 *	- Opening a file for write when already open for read,
M
Mimi Zohar 已提交
80 81
 *	  results in a time of measure, time of use (ToMToU) error.
 *	- Opening a file for read when already open for write,
82
 *	  could result in a file measurement error.
M
Mimi Zohar 已提交
83 84
 *
 */
85 86
static void ima_rdwr_violation_check(struct file *file,
				     struct integrity_iint_cache *iint,
87
				     int must_measure,
88
				     char **pathbuf,
89 90
				     const char **pathname,
				     char *filename)
M
Mimi Zohar 已提交
91
{
92
	struct inode *inode = file_inode(file);
M
Mimi Zohar 已提交
93
	fmode_t mode = file->f_mode;
94
	bool send_tomtou = false, send_writers = false;
95

M
Mimi Zohar 已提交
96
	if (mode & FMODE_WRITE) {
97
		if (atomic_read(&inode->i_readcount) && IS_IMA(inode)) {
98 99
			if (!iint)
				iint = integrity_iint_find(inode);
100
			/* IMA_MEASURE is set from reader side */
101 102
			if (iint && test_bit(IMA_MUST_MEASURE,
						&iint->atomic_flags))
103 104
				send_tomtou = true;
		}
105
	} else {
106 107
		if (must_measure)
			set_bit(IMA_MUST_MEASURE, &iint->atomic_flags);
N
Nikolay Borisov 已提交
108
		if (inode_is_open_for_write(inode) && must_measure)
109
			send_writers = true;
M
Mimi Zohar 已提交
110
	}
111

112 113 114
	if (!send_tomtou && !send_writers)
		return;

115
	*pathname = ima_d_path(&file->f_path, pathbuf, filename);
116

117
	if (send_tomtou)
118 119
		ima_add_violation(file, *pathname, iint,
				  "invalid_pcr", "ToMToU");
120
	if (send_writers)
121
		ima_add_violation(file, *pathname, iint,
122
				  "invalid_pcr", "open_writers");
M
Mimi Zohar 已提交
123 124
}

125
static void ima_check_last_writer(struct integrity_iint_cache *iint,
M
Mimi Zohar 已提交
126
				  struct inode *inode, struct file *file)
E
Eric Paris 已提交
127
{
A
Al Viro 已提交
128
	fmode_t mode = file->f_mode;
129
	bool update;
E
Eric Paris 已提交
130

M
Mimi Zohar 已提交
131 132 133
	if (!(mode & FMODE_WRITE))
		return;

134
	mutex_lock(&iint->mutex);
135
	if (atomic_read(&inode->i_writecount) == 1) {
136 137
		update = test_and_clear_bit(IMA_UPDATE_XATTR,
					    &iint->atomic_flags);
138
		if (!IS_I_VERSION(inode) ||
139
		    !inode_eq_iversion(inode, iint->version) ||
140 141
		    (iint->flags & IMA_NEW_FILE)) {
			iint->flags &= ~(IMA_DONE_MASK | IMA_NEW_FILE);
142
			iint->measured_pcrs = 0;
143
			if (update)
144 145
				ima_update_xattr(iint, file);
		}
M
Mimi Zohar 已提交
146
	}
147
	mutex_unlock(&iint->mutex);
E
Eric Paris 已提交
148 149
}

150 151 152 153
/**
 * ima_file_free - called on __fput()
 * @file: pointer to file structure being freed
 *
154
 * Flag files that changed, based on i_version
155 156 157
 */
void ima_file_free(struct file *file)
{
A
Al Viro 已提交
158
	struct inode *inode = file_inode(file);
159
	struct integrity_iint_cache *iint;
160

161
	if (!ima_policy_flag || !S_ISREG(inode->i_mode))
162
		return;
163

164
	iint = integrity_iint_find(inode);
M
Mimi Zohar 已提交
165 166
	if (!iint)
		return;
167

M
Mimi Zohar 已提交
168
	ima_check_last_writer(iint, inode, file);
169 170
}

171 172
static int process_measurement(struct file *file, const struct cred *cred,
			       u32 secid, char *buf, loff_t size, int mask,
173
			       enum ima_hooks func)
174
{
A
Al Viro 已提交
175
	struct inode *inode = file_inode(file);
176
	struct integrity_iint_cache *iint = NULL;
177
	struct ima_template_desc *template_desc;
178
	char *pathbuf = NULL;
179
	char filename[NAME_MAX];
180
	const char *pathname = NULL;
181
	int rc = 0, action, must_appraise = 0;
182
	int pcr = CONFIG_IMA_MEASURE_PCR_IDX;
183
	struct evm_ima_xattr_data *xattr_value = NULL;
184
	int xattr_len = 0;
185
	bool violation_check;
186
	enum hash_algo hash_algo;
187

188
	if (!ima_policy_flag || !S_ISREG(inode->i_mode))
189
		return 0;
E
Eric Paris 已提交
190

191 192 193 194
	/* Return an IMA_MEASURE, IMA_APPRAISE, IMA_AUDIT action
	 * bitmask based on the appraise/audit/measurement policy.
	 * Included is the appraise submask.
	 */
195
	action = ima_get_action(inode, cred, secid, mask, func, &pcr);
196
	violation_check = ((func == FILE_CHECK || func == MMAP_CHECK) &&
197 198
			   (ima_policy_flag & IMA_MEASURE));
	if (!action && !violation_check)
M
Mimi Zohar 已提交
199 200 201
		return 0;

	must_appraise = action & IMA_APPRAISE;
E
Eric Paris 已提交
202

203
	/*  Is the appraise rule hook specific?  */
204
	if (action & IMA_FILE_APPRAISE)
205
		func = FILE_CHECK;
206

A
Al Viro 已提交
207
	inode_lock(inode);
M
Mimi Zohar 已提交
208

209 210 211
	if (action) {
		iint = integrity_inode_get(inode);
		if (!iint)
212
			rc = -ENOMEM;
213 214
	}

215
	if (!rc && violation_check)
216
		ima_rdwr_violation_check(file, iint, action & IMA_MEASURE,
217
					 &pathbuf, &pathname, filename);
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233

	inode_unlock(inode);

	if (rc)
		goto out;
	if (!action)
		goto out;

	mutex_lock(&iint->mutex);

	if (test_and_clear_bit(IMA_CHANGE_ATTR, &iint->atomic_flags))
		/* reset appraisal flags if ima_inode_post_setattr was called */
		iint->flags &= ~(IMA_APPRAISE | IMA_APPRAISED |
				 IMA_APPRAISE_SUBMASK | IMA_APPRAISED_SUBMASK |
				 IMA_ACTION_FLAGS);

234 235 236 237 238 239 240
	/*
	 * Re-evaulate the file if either the xattr has changed or the
	 * kernel has no way of detecting file change on the filesystem.
	 * (Limited to privileged mounted filesystems.)
	 */
	if (test_and_clear_bit(IMA_CHANGE_XATTR, &iint->atomic_flags) ||
	    ((inode->i_sb->s_iflags & SB_I_IMA_UNVERIFIABLE_SIGNATURE) &&
241 242
	     !(inode->i_sb->s_iflags & SB_I_UNTRUSTED_MOUNTER) &&
	     !(action & IMA_FAIL_UNVERIFIABLE_SIGS))) {
243
		iint->flags &= ~IMA_DONE_MASK;
244 245
		iint->measured_pcrs = 0;
	}
246

M
Mimi Zohar 已提交
247
	/* Determine if already appraised/measured based on bitmask
248 249 250
	 * (IMA_MEASURE, IMA_MEASURED, IMA_XXXX_APPRAISE, IMA_XXXX_APPRAISED,
	 *  IMA_AUDIT, IMA_AUDITED)
	 */
M
Mimi Zohar 已提交
251
	iint->flags |= action;
252
	action &= IMA_DO_MASK;
253 254 255 256 257
	action &= ~((iint->flags & (IMA_DONE_MASK ^ IMA_MEASURED)) >> 1);

	/* If target pcr is already measured, unset IMA_MEASURE action */
	if ((action & IMA_MEASURE) && (iint->measured_pcrs & (0x1 << pcr)))
		action ^= IMA_MEASURE;
M
Mimi Zohar 已提交
258

259 260 261 262 263 264 265 266 267 268 269 270
	/* HASH sets the digital signature and update flags, nothing else */
	if ((action & IMA_HASH) &&
	    !(test_bit(IMA_DIGSIG, &iint->atomic_flags))) {
		xattr_len = ima_read_xattr(file_dentry(file), &xattr_value);
		if ((xattr_value && xattr_len > 2) &&
		    (xattr_value->type == EVM_IMA_XATTR_DIGSIG))
			set_bit(IMA_DIGSIG, &iint->atomic_flags);
		iint->flags |= IMA_HASHED;
		action ^= IMA_HASH;
		set_bit(IMA_UPDATE_XATTR, &iint->atomic_flags);
	}

M
Mimi Zohar 已提交
271 272
	/* Nothing to do, just return existing appraised status */
	if (!action) {
273
		if (must_appraise)
274
			rc = ima_get_cache_status(iint, func);
275
		goto out_locked;
M
Mimi Zohar 已提交
276
	}
277

278
	template_desc = ima_template_desc_current();
279 280
	if ((action & IMA_APPRAISE_SUBMASK) ||
		    strcmp(template_desc->name, IMA_TEMPLATE_IMA_NAME) != 0)
281
		/* read 'security.ima' */
M
Miklos Szeredi 已提交
282
		xattr_len = ima_read_xattr(file_dentry(file), &xattr_value);
283

284 285
	hash_algo = ima_get_hash_algo(xattr_value, xattr_len);

286
	rc = ima_collect_measurement(iint, file, buf, size, hash_algo);
287
	if (rc != 0 && rc != -EBADF && rc != -EINVAL)
288
		goto out_locked;
289

290 291
	if (!pathbuf)	/* ima_rdwr_violation possibly pre-fetched */
		pathname = ima_d_path(&file->f_path, &pathbuf, filename);
292

M
Mimi Zohar 已提交
293
	if (action & IMA_MEASURE)
294
		ima_store_measurement(iint, file, pathname,
295
				      xattr_value, xattr_len, pcr);
296 297
	if (rc == 0 && (action & IMA_APPRAISE_SUBMASK)) {
		inode_lock(inode);
298
		rc = ima_appraise_measurement(func, iint, file, pathname,
299
					      xattr_value, xattr_len);
300 301
		inode_unlock(inode);
	}
P
Peter Moody 已提交
302
	if (action & IMA_AUDIT)
303
		ima_audit_measurement(iint, pathname);
304

305 306
	if ((file->f_flags & O_DIRECT) && (iint->flags & IMA_PERMIT_DIRECTIO))
		rc = 0;
307 308
out_locked:
	if ((mask & MAY_WRITE) && test_bit(IMA_DIGSIG, &iint->atomic_flags) &&
309
	     !(iint->flags & IMA_NEW_FILE))
310
		rc = -EACCES;
311
	mutex_unlock(&iint->mutex);
312
	kfree(xattr_value);
313
out:
D
Dmitry Kasatkin 已提交
314 315
	if (pathbuf)
		__putname(pathbuf);
316 317 318 319 320 321
	if (must_appraise) {
		if (rc && (ima_appraise & IMA_APPRAISE_ENFORCE))
			return -EACCES;
		if (file->f_mode & FMODE_WRITE)
			set_bit(IMA_UPDATE_XATTR, &iint->atomic_flags);
	}
322
	return 0;
323 324 325 326 327 328 329 330 331 332
}

/**
 * ima_file_mmap - based on policy, collect/store measurement.
 * @file: pointer to the file to be measured (May be NULL)
 * @prot: contains the protection that will be applied by the kernel.
 *
 * Measure files being mmapped executable based on the ima_must_measure()
 * policy decision.
 *
333 334
 * On success return 0.  On integrity appraisal error, assuming the file
 * is in policy and IMA-appraisal is in enforcing mode, return -EACCES.
335 336 337
 */
int ima_file_mmap(struct file *file, unsigned long prot)
{
338 339 340 341 342
	u32 secid;

	if (file && (prot & PROT_EXEC)) {
		security_task_getsecid(current, &secid);
		return process_measurement(file, current_cred(), secid, NULL,
343
					   0, MAY_EXEC, MMAP_CHECK);
344 345
	}

346
	return 0;
347 348 349 350 351 352 353 354 355 356 357 358
}

/**
 * ima_bprm_check - based on policy, collect/store measurement.
 * @bprm: contains the linux_binprm structure
 *
 * The OS protects against an executable file, already open for write,
 * from being executed in deny_write_access() and an executable file,
 * already open for execute, from being modified in get_write_access().
 * So we can be certain that what we verify and measure here is actually
 * what is being executed.
 *
359 360
 * On success return 0.  On integrity appraisal error, assuming the file
 * is in policy and IMA-appraisal is in enforcing mode, return -EACCES.
361 362 363
 */
int ima_bprm_check(struct linux_binprm *bprm)
{
364 365 366 367 368
	int ret;
	u32 secid;

	security_task_getsecid(current, &secid);
	ret = process_measurement(bprm->file, current_cred(), secid, NULL, 0,
369
				  MAY_EXEC, BPRM_CHECK);
370 371 372 373 374
	if (ret)
		return ret;

	security_cred_getsecid(bprm->cred, &secid);
	return process_measurement(bprm->file, bprm->cred, secid, NULL, 0,
375
				   MAY_EXEC, CREDS_CHECK);
376 377
}

M
Mimi Zohar 已提交
378 379 380
/**
 * ima_path_check - based on policy, collect/store measurement.
 * @file: pointer to the file to be measured
L
Lans Zhang 已提交
381
 * @mask: contains MAY_READ, MAY_WRITE, MAY_EXEC or MAY_APPEND
M
Mimi Zohar 已提交
382 383 384
 *
 * Measure files based on the ima_must_measure() policy decision.
 *
385 386
 * On success return 0.  On integrity appraisal error, assuming the file
 * is in policy and IMA-appraisal is in enforcing mode, return -EACCES.
M
Mimi Zohar 已提交
387
 */
388
int ima_file_check(struct file *file, int mask)
M
Mimi Zohar 已提交
389
{
390 391 392 393
	u32 secid;

	security_task_getsecid(current, &secid);
	return process_measurement(file, current_cred(), secid, NULL, 0,
L
Lans Zhang 已提交
394
				   mask & (MAY_READ | MAY_WRITE | MAY_EXEC |
395
					   MAY_APPEND), FILE_CHECK);
M
Mimi Zohar 已提交
396
}
397
EXPORT_SYMBOL_GPL(ima_file_check);
M
Mimi Zohar 已提交
398

399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425
/**
 * ima_post_create_tmpfile - mark newly created tmpfile as new
 * @file : newly created tmpfile
 *
 * No measuring, appraising or auditing of newly created tmpfiles is needed.
 * Skip calling process_measurement(), but indicate which newly, created
 * tmpfiles are in policy.
 */
void ima_post_create_tmpfile(struct inode *inode)
{
	struct integrity_iint_cache *iint;
	int must_appraise;

	must_appraise = ima_must_appraise(inode, MAY_ACCESS, FILE_CHECK);
	if (!must_appraise)
		return;

	/* Nothing to do if we can't allocate memory */
	iint = integrity_inode_get(inode);
	if (!iint)
		return;

	/* needed for writing the security xattrs */
	set_bit(IMA_UPDATE_XATTR, &iint->atomic_flags);
	iint->ima_file_status = INTEGRITY_PASS;
}

426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442
/**
 * ima_post_path_mknod - mark as a new inode
 * @dentry: newly created dentry
 *
 * Mark files created via the mknodat syscall as new, so that the
 * file data can be written later.
 */
void ima_post_path_mknod(struct dentry *dentry)
{
	struct integrity_iint_cache *iint;
	struct inode *inode = dentry->d_inode;
	int must_appraise;

	must_appraise = ima_must_appraise(inode, MAY_ACCESS, FILE_CHECK);
	if (!must_appraise)
		return;

443
	/* Nothing to do if we can't allocate memory */
444
	iint = integrity_inode_get(inode);
445 446 447 448 449
	if (!iint)
		return;

	/* needed for re-opening empty files */
	iint->flags |= IMA_NEW_FILE;
450 451
}

452 453 454 455 456 457 458 459 460 461 462 463 464
/**
 * ima_read_file - pre-measure/appraise hook decision based on policy
 * @file: pointer to the file to be measured/appraised/audit
 * @read_id: caller identifier
 *
 * Permit reading a file based on policy. The policy rules are written
 * in terms of the policy identifier.  Appraising the integrity of
 * a file requires a file descriptor.
 *
 * For permission return 0, otherwise return -EACCES.
 */
int ima_read_file(struct file *file, enum kernel_read_file_id read_id)
{
465 466 467 468 469 470 471 472
	/*
	 * READING_FIRMWARE_PREALLOC_BUFFER
	 *
	 * Do devices using pre-allocated memory run the risk of the
	 * firmware being accessible to the device prior to the completion
	 * of IMA's signature verification any more than when using two
	 * buffers?
	 */
473 474 475
	return 0;
}

476
static const int read_idmap[READING_MAX_ID] = {
477
	[READING_FIRMWARE] = FIRMWARE_CHECK,
478
	[READING_FIRMWARE_PREALLOC_BUFFER] = FIRMWARE_CHECK,
479 480 481
	[READING_MODULE] = MODULE_CHECK,
	[READING_KEXEC_IMAGE] = KEXEC_KERNEL_CHECK,
	[READING_KEXEC_INITRAMFS] = KEXEC_INITRAMFS_CHECK,
482
	[READING_POLICY] = POLICY_CHECK
483 484
};

485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500
/**
 * ima_post_read_file - in memory collect/appraise/audit measurement
 * @file: pointer to the file to be measured/appraised/audit
 * @buf: pointer to in memory file contents
 * @size: size of in memory file contents
 * @read_id: caller identifier
 *
 * Measure/appraise/audit in memory file based on policy.  Policy rules
 * are written in terms of a policy identifier.
 *
 * On success return 0.  On integrity appraisal error, assuming the file
 * is in policy and IMA-appraisal is in enforcing mode, return -EACCES.
 */
int ima_post_read_file(struct file *file, void *buf, loff_t size,
		       enum kernel_read_file_id read_id)
{
501
	enum ima_hooks func;
502
	u32 secid;
503

504 505
	if (!file && read_id == READING_FIRMWARE) {
		if ((ima_appraise & IMA_APPRAISE_FIRMWARE) &&
506 507
		    (ima_appraise & IMA_APPRAISE_ENFORCE)) {
			pr_err("Prevent firmware loading_store.\n");
508
			return -EACCES;	/* INTEGRITY_UNKNOWN */
509
		}
510 511 512
		return 0;
	}

513 514 515 516
	/* permit signed certs */
	if (!file && read_id == READING_X509_CERTIFICATE)
		return 0;

517 518 519 520 521 522
	if (!file || !buf || size == 0) { /* should never happen */
		if (ima_appraise & IMA_APPRAISE_ENFORCE)
			return -EACCES;
		return 0;
	}

523
	func = read_idmap[read_id] ?: FILE_CHECK;
524 525
	security_task_getsecid(current, &secid);
	return process_measurement(file, current_cred(), secid, buf, size,
526
				   MAY_READ, func);
527 528
}

529 530 531 532 533 534 535 536 537 538 539 540
/**
 * ima_load_data - appraise decision based on policy
 * @id: kernel load data caller identifier
 *
 * Callers of this LSM hook can not measure, appraise, or audit the
 * data provided by userspace.  Enforce policy rules requring a file
 * signature (eg. kexec'ed kernel image).
 *
 * For permission return 0, otherwise return -EACCES.
 */
int ima_load_data(enum kernel_load_data_id id)
{
541
	bool ima_enforce, sig_enforce;
542

543 544
	ima_enforce =
		(ima_appraise & IMA_APPRAISE_ENFORCE) == IMA_APPRAISE_ENFORCE;
545 546 547

	switch (id) {
	case LOADING_KEXEC_IMAGE:
548 549 550 551 552 553 554
		if (IS_ENABLED(CONFIG_KEXEC_VERIFY_SIG)
		    && arch_ima_get_secureboot()) {
			pr_err("impossible to appraise a kernel image without a file descriptor; try using kexec_file_load syscall.\n");
			return -EACCES;
		}

		if (ima_enforce && (ima_appraise & IMA_APPRAISE_KEXEC)) {
555 556 557
			pr_err("impossible to appraise a kernel image without a file descriptor; try using kexec_file_load syscall.\n");
			return -EACCES;	/* INTEGRITY_UNKNOWN */
		}
558 559
		break;
	case LOADING_FIRMWARE:
560
		if (ima_enforce && (ima_appraise & IMA_APPRAISE_FIRMWARE)) {
561 562 563
			pr_err("Prevent firmware sysfs fallback loading.\n");
			return -EACCES;	/* INTEGRITY_UNKNOWN */
		}
564 565 566 567
		break;
	case LOADING_MODULE:
		sig_enforce = is_module_sig_enforced();

568 569
		if (ima_enforce && (!sig_enforce
				    && (ima_appraise & IMA_APPRAISE_MODULES))) {
570 571 572
			pr_err("impossible to appraise a module without a file descriptor. sig_enforce kernel parameter might help\n");
			return -EACCES;	/* INTEGRITY_UNKNOWN */
		}
573 574 575 576 577 578
	default:
		break;
	}
	return 0;
}

579 580 581 582
static int __init init_ima(void)
{
	int error;

583
	ima_init_template_list();
584
	hash_setup(CONFIG_IMA_DEFAULT_HASH);
585
	error = ima_init();
586 587 588 589 590 591 592 593 594 595

	if (error && strcmp(hash_algo_name[ima_hash_algo],
			    CONFIG_IMA_DEFAULT_HASH) != 0) {
		pr_info("Allocating %s failed, going to use default hash algorithm %s\n",
			hash_algo_name[ima_hash_algo], CONFIG_IMA_DEFAULT_HASH);
		hash_setup_done = 0;
		hash_setup(CONFIG_IMA_DEFAULT_HASH);
		error = ima_init();
	}

596
	if (!error)
597
		ima_update_policy_flag();
598

599 600 601 602
	return error;
}

late_initcall(init_ima);	/* Start IMA after the TPM is available */