ima_main.c 16.5 KB
Newer Older
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3 4
 * Integrity Measurement Architecture
 *
5 6 7 8 9 10 11 12 13
 * 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>
 *
 * File: ima_main.c
14
 *	implements the IMA hooks: ima_bprm_check, ima_file_mmap,
15
 *	and ima_file_check.
16
 */
17 18 19

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

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

#include "ima.h"

M
Mimi Zohar 已提交
33 34 35 36 37 38
#ifdef CONFIG_IMA_APPRAISE
int ima_appraise = IMA_APPRAISE_ENFORCE;
#else
int ima_appraise;
#endif

39
int ima_hash_algo = HASH_ALGO_SHA1;
40
static int hash_setup_done;
41

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

Y
Yisheng Xie 已提交
60 61
	i = match_string(hash_algo_name, HASH_ALGO__LAST, str);
	if (i < 0)
62
		return 1;
Y
Yisheng Xie 已提交
63 64

	ima_hash_algo = i;
65 66
out:
	hash_setup_done = 1;
67 68 69 70
	return 1;
}
__setup("ima_hash=", hash_setup);

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

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

108 109 110
	if (!send_tomtou && !send_writers)
		return;

111
	*pathname = ima_d_path(&file->f_path, pathbuf, filename);
112

113
	if (send_tomtou)
114 115
		ima_add_violation(file, *pathname, iint,
				  "invalid_pcr", "ToMToU");
116
	if (send_writers)
117
		ima_add_violation(file, *pathname, iint,
118
				  "invalid_pcr", "open_writers");
M
Mimi Zohar 已提交
119 120
}

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

M
Mimi Zohar 已提交
127 128 129
	if (!(mode & FMODE_WRITE))
		return;

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

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

157
	if (!ima_policy_flag || !S_ISREG(inode->i_mode))
158
		return;
159

160
	iint = integrity_iint_find(inode);
M
Mimi Zohar 已提交
161 162
	if (!iint)
		return;
163

M
Mimi Zohar 已提交
164
	ima_check_last_writer(iint, inode, file);
165 166
}

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

184
	if (!ima_policy_flag || !S_ISREG(inode->i_mode))
185
		return 0;
E
Eric Paris 已提交
186

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

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

199
	/*  Is the appraise rule hook specific?  */
200
	if (action & IMA_FILE_APPRAISE)
201
		func = FILE_CHECK;
202

A
Al Viro 已提交
203
	inode_lock(inode);
M
Mimi Zohar 已提交
204

205 206 207
	if (action) {
		iint = integrity_inode_get(inode);
		if (!iint)
208
			rc = -ENOMEM;
209 210
	}

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

	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);

230 231 232 233 234 235 236
	/*
	 * 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) &&
237 238
	     !(inode->i_sb->s_iflags & SB_I_UNTRUSTED_MOUNTER) &&
	     !(action & IMA_FAIL_UNVERIFIABLE_SIGS))) {
239
		iint->flags &= ~IMA_DONE_MASK;
240 241
		iint->measured_pcrs = 0;
	}
242

M
Mimi Zohar 已提交
243
	/* Determine if already appraised/measured based on bitmask
244 245 246
	 * (IMA_MEASURE, IMA_MEASURED, IMA_XXXX_APPRAISE, IMA_XXXX_APPRAISED,
	 *  IMA_AUDIT, IMA_AUDITED)
	 */
M
Mimi Zohar 已提交
247
	iint->flags |= action;
248
	action &= IMA_DO_MASK;
249 250 251 252 253
	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 已提交
254

255 256 257 258 259 260 261 262 263 264 265 266
	/* 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 已提交
267 268
	/* Nothing to do, just return existing appraised status */
	if (!action) {
269
		if (must_appraise)
270
			rc = ima_get_cache_status(iint, func);
271
		goto out_locked;
M
Mimi Zohar 已提交
272
	}
273

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

280 281
	hash_algo = ima_get_hash_algo(xattr_value, xattr_len);

282
	rc = ima_collect_measurement(iint, file, buf, size, hash_algo);
283
	if (rc != 0 && rc != -EBADF && rc != -EINVAL)
284
		goto out_locked;
285

286 287
	if (!pathbuf)	/* ima_rdwr_violation possibly pre-fetched */
		pathname = ima_d_path(&file->f_path, &pathbuf, filename);
288

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

301 302
	if ((file->f_flags & O_DIRECT) && (iint->flags & IMA_PERMIT_DIRECTIO))
		rc = 0;
303 304
out_locked:
	if ((mask & MAY_WRITE) && test_bit(IMA_DIGSIG, &iint->atomic_flags) &&
305
	     !(iint->flags & IMA_NEW_FILE))
306
		rc = -EACCES;
307
	mutex_unlock(&iint->mutex);
308
	kfree(xattr_value);
309
out:
D
Dmitry Kasatkin 已提交
310 311
	if (pathbuf)
		__putname(pathbuf);
312 313 314 315 316 317
	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);
	}
318
	return 0;
319 320 321 322 323 324 325 326 327 328
}

/**
 * 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.
 *
329 330
 * On success return 0.  On integrity appraisal error, assuming the file
 * is in policy and IMA-appraisal is in enforcing mode, return -EACCES.
331 332 333
 */
int ima_file_mmap(struct file *file, unsigned long prot)
{
334 335 336 337 338
	u32 secid;

	if (file && (prot & PROT_EXEC)) {
		security_task_getsecid(current, &secid);
		return process_measurement(file, current_cred(), secid, NULL,
339
					   0, MAY_EXEC, MMAP_CHECK);
340 341
	}

342
	return 0;
343 344 345 346 347 348 349 350 351 352 353 354
}

/**
 * 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.
 *
355 356
 * On success return 0.  On integrity appraisal error, assuming the file
 * is in policy and IMA-appraisal is in enforcing mode, return -EACCES.
357 358 359
 */
int ima_bprm_check(struct linux_binprm *bprm)
{
360 361 362 363 364
	int ret;
	u32 secid;

	security_task_getsecid(current, &secid);
	ret = process_measurement(bprm->file, current_cred(), secid, NULL, 0,
365
				  MAY_EXEC, BPRM_CHECK);
366 367 368 369 370
	if (ret)
		return ret;

	security_cred_getsecid(bprm->cred, &secid);
	return process_measurement(bprm->file, bprm->cred, secid, NULL, 0,
371
				   MAY_EXEC, CREDS_CHECK);
372 373
}

M
Mimi Zohar 已提交
374 375 376
/**
 * ima_path_check - based on policy, collect/store measurement.
 * @file: pointer to the file to be measured
L
Lans Zhang 已提交
377
 * @mask: contains MAY_READ, MAY_WRITE, MAY_EXEC or MAY_APPEND
M
Mimi Zohar 已提交
378 379 380
 *
 * Measure files based on the ima_must_measure() policy decision.
 *
381 382
 * 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 已提交
383
 */
384
int ima_file_check(struct file *file, int mask)
M
Mimi Zohar 已提交
385
{
386 387 388 389
	u32 secid;

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

395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421
/**
 * 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;
}

422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438
/**
 * 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;

439
	/* Nothing to do if we can't allocate memory */
440
	iint = integrity_inode_get(inode);
441 442 443 444 445
	if (!iint)
		return;

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

448 449 450 451 452 453 454 455 456 457 458 459 460
/**
 * 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)
{
461 462 463 464 465 466 467 468
	/*
	 * 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?
	 */
469 470 471
	return 0;
}

472
static const int read_idmap[READING_MAX_ID] = {
473
	[READING_FIRMWARE] = FIRMWARE_CHECK,
474
	[READING_FIRMWARE_PREALLOC_BUFFER] = FIRMWARE_CHECK,
475 476 477
	[READING_MODULE] = MODULE_CHECK,
	[READING_KEXEC_IMAGE] = KEXEC_KERNEL_CHECK,
	[READING_KEXEC_INITRAMFS] = KEXEC_INITRAMFS_CHECK,
478
	[READING_POLICY] = POLICY_CHECK
479 480
};

481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496
/**
 * 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)
{
497
	enum ima_hooks func;
498
	u32 secid;
499

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

509 510 511 512
	/* permit signed certs */
	if (!file && read_id == READING_X509_CERTIFICATE)
		return 0;

513 514 515 516 517 518
	if (!file || !buf || size == 0) { /* should never happen */
		if (ima_appraise & IMA_APPRAISE_ENFORCE)
			return -EACCES;
		return 0;
	}

519
	func = read_idmap[read_id] ?: FILE_CHECK;
520 521
	security_task_getsecid(current, &secid);
	return process_measurement(file, current_cred(), secid, buf, size,
522
				   MAY_READ, func);
523 524
}

525 526 527 528 529 530 531 532 533 534 535 536
/**
 * 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)
{
537
	bool ima_enforce, sig_enforce;
538

539 540
	ima_enforce =
		(ima_appraise & IMA_APPRAISE_ENFORCE) == IMA_APPRAISE_ENFORCE;
541 542 543

	switch (id) {
	case LOADING_KEXEC_IMAGE:
544 545 546 547 548 549 550
		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)) {
551 552 553
			pr_err("impossible to appraise a kernel image without a file descriptor; try using kexec_file_load syscall.\n");
			return -EACCES;	/* INTEGRITY_UNKNOWN */
		}
554 555
		break;
	case LOADING_FIRMWARE:
556
		if (ima_enforce && (ima_appraise & IMA_APPRAISE_FIRMWARE)) {
557 558 559
			pr_err("Prevent firmware sysfs fallback loading.\n");
			return -EACCES;	/* INTEGRITY_UNKNOWN */
		}
560 561 562 563
		break;
	case LOADING_MODULE:
		sig_enforce = is_module_sig_enforced();

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

575 576 577 578
static int __init init_ima(void)
{
	int error;

579
	ima_init_template_list();
580
	hash_setup(CONFIG_IMA_DEFAULT_HASH);
581
	error = ima_init();
582 583 584 585 586 587 588 589 590 591

	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();
	}

592
	if (!error)
593
		ima_update_policy_flag();
594

595 596 597 598
	return error;
}

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