1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (C) 2011 IBM Corporation
4 *
5 * Author:
6 * Mimi Zohar <zohar@us.ibm.com>
7 */
8#include <linux/module.h>
9#include <linux/init.h>
10#include <linux/file.h>
11#include <linux/fs.h>
12#include <linux/xattr.h>
13#include <linux/magic.h>
14#include <linux/ima.h>
15#include <linux/evm.h>
16#include <linux/fsverity.h>
17#include <keys/system_keyring.h>
18#include <uapi/linux/fsverity.h>
19
20#include "ima.h"
21
22#ifdef CONFIG_IMA_APPRAISE_BOOTPARAM
23static char *ima_appraise_cmdline_default __initdata;
24core_param(ima_appraise, ima_appraise_cmdline_default, charp, 0);
25
26void __init ima_appraise_parse_cmdline(void)
27{
28	const char *str = ima_appraise_cmdline_default;
29	bool sb_state = arch_ima_get_secureboot();
30	int appraisal_state = ima_appraise;
31
32	if (!str)
33		return;
34
35	if (strncmp(str, "off", 3) == 0)
36		appraisal_state = 0;
37	else if (strncmp(str, "log", 3) == 0)
38		appraisal_state = IMA_APPRAISE_LOG;
39	else if (strncmp(str, "fix", 3) == 0)
40		appraisal_state = IMA_APPRAISE_FIX;
41	else if (strncmp(str, "enforce", 7) == 0)
42		appraisal_state = IMA_APPRAISE_ENFORCE;
43	else
44		pr_err("invalid \"%s\" appraise option", str);
45
46	/* If appraisal state was changed, but secure boot is enabled,
47	 * keep its default */
48	if (sb_state) {
49		if (!(appraisal_state & IMA_APPRAISE_ENFORCE))
50			pr_info("Secure boot enabled: ignoring ima_appraise=%s option",
51				str);
52	} else {
53		ima_appraise = appraisal_state;
54	}
55}
56#endif
57
58/*
59 * is_ima_appraise_enabled - return appraise status
60 *
61 * Only return enabled, if not in ima_appraise="fix" or "log" modes.
62 */
63bool is_ima_appraise_enabled(void)
64{
65	return ima_appraise & IMA_APPRAISE_ENFORCE;
66}
67
68/*
69 * ima_must_appraise - set appraise flag
70 *
71 * Return 1 to appraise or hash
72 */
73int ima_must_appraise(struct mnt_idmap *idmap, struct inode *inode,
74		      int mask, enum ima_hooks func)
75{
76	u32 secid;
77
78	if (!ima_appraise)
79		return 0;
80
81	security_current_getsecid_subj(&secid);
82	return ima_match_policy(idmap, inode, current_cred(), secid,
83				func, mask, IMA_APPRAISE | IMA_HASH, NULL,
84				NULL, NULL, NULL);
85}
86
87static int ima_fix_xattr(struct dentry *dentry, struct ima_iint_cache *iint)
88{
89	int rc, offset;
90	u8 algo = iint->ima_hash->algo;
91
92	if (algo <= HASH_ALGO_SHA1) {
93		offset = 1;
94		iint->ima_hash->xattr.sha1.type = IMA_XATTR_DIGEST;
95	} else {
96		offset = 0;
97		iint->ima_hash->xattr.ng.type = IMA_XATTR_DIGEST_NG;
98		iint->ima_hash->xattr.ng.algo = algo;
99	}
100	rc = __vfs_setxattr_noperm(&nop_mnt_idmap, dentry, XATTR_NAME_IMA,
101				   &iint->ima_hash->xattr.data[offset],
102				   (sizeof(iint->ima_hash->xattr) - offset) +
103				   iint->ima_hash->length, 0);
104	return rc;
105}
106
107/* Return specific func appraised cached result */
108enum integrity_status ima_get_cache_status(struct ima_iint_cache *iint,
109					   enum ima_hooks func)
110{
111	switch (func) {
112	case MMAP_CHECK:
113	case MMAP_CHECK_REQPROT:
114		return iint->ima_mmap_status;
115	case BPRM_CHECK:
116		return iint->ima_bprm_status;
117	case CREDS_CHECK:
118		return iint->ima_creds_status;
119	case FILE_CHECK:
120	case POST_SETATTR:
121		return iint->ima_file_status;
122	case MODULE_CHECK ... MAX_CHECK - 1:
123	default:
124		return iint->ima_read_status;
125	}
126}
127
128static void ima_set_cache_status(struct ima_iint_cache *iint,
129				 enum ima_hooks func,
130				 enum integrity_status status)
131{
132	switch (func) {
133	case MMAP_CHECK:
134	case MMAP_CHECK_REQPROT:
135		iint->ima_mmap_status = status;
136		break;
137	case BPRM_CHECK:
138		iint->ima_bprm_status = status;
139		break;
140	case CREDS_CHECK:
141		iint->ima_creds_status = status;
142		break;
143	case FILE_CHECK:
144	case POST_SETATTR:
145		iint->ima_file_status = status;
146		break;
147	case MODULE_CHECK ... MAX_CHECK - 1:
148	default:
149		iint->ima_read_status = status;
150		break;
151	}
152}
153
154static void ima_cache_flags(struct ima_iint_cache *iint, enum ima_hooks func)
155{
156	switch (func) {
157	case MMAP_CHECK:
158	case MMAP_CHECK_REQPROT:
159		iint->flags |= (IMA_MMAP_APPRAISED | IMA_APPRAISED);
160		break;
161	case BPRM_CHECK:
162		iint->flags |= (IMA_BPRM_APPRAISED | IMA_APPRAISED);
163		break;
164	case CREDS_CHECK:
165		iint->flags |= (IMA_CREDS_APPRAISED | IMA_APPRAISED);
166		break;
167	case FILE_CHECK:
168	case POST_SETATTR:
169		iint->flags |= (IMA_FILE_APPRAISED | IMA_APPRAISED);
170		break;
171	case MODULE_CHECK ... MAX_CHECK - 1:
172	default:
173		iint->flags |= (IMA_READ_APPRAISED | IMA_APPRAISED);
174		break;
175	}
176}
177
178enum hash_algo ima_get_hash_algo(const struct evm_ima_xattr_data *xattr_value,
179				 int xattr_len)
180{
181	struct signature_v2_hdr *sig;
182	enum hash_algo ret;
183
184	if (!xattr_value || xattr_len < 2)
185		/* return default hash algo */
186		return ima_hash_algo;
187
188	switch (xattr_value->type) {
189	case IMA_VERITY_DIGSIG:
190		sig = (typeof(sig))xattr_value;
191		if (sig->version != 3 || xattr_len <= sizeof(*sig) ||
192		    sig->hash_algo >= HASH_ALGO__LAST)
193			return ima_hash_algo;
194		return sig->hash_algo;
195	case EVM_IMA_XATTR_DIGSIG:
196		sig = (typeof(sig))xattr_value;
197		if (sig->version != 2 || xattr_len <= sizeof(*sig)
198		    || sig->hash_algo >= HASH_ALGO__LAST)
199			return ima_hash_algo;
200		return sig->hash_algo;
201	case IMA_XATTR_DIGEST_NG:
202		/* first byte contains algorithm id */
203		ret = xattr_value->data[0];
204		if (ret < HASH_ALGO__LAST)
205			return ret;
206		break;
207	case IMA_XATTR_DIGEST:
208		/* this is for backward compatibility */
209		if (xattr_len == 21) {
210			unsigned int zero = 0;
211			if (!memcmp(&xattr_value->data[16], &zero, 4))
212				return HASH_ALGO_MD5;
213			else
214				return HASH_ALGO_SHA1;
215		} else if (xattr_len == 17)
216			return HASH_ALGO_MD5;
217		break;
218	}
219
220	/* return default hash algo */
221	return ima_hash_algo;
222}
223
224int ima_read_xattr(struct dentry *dentry,
225		   struct evm_ima_xattr_data **xattr_value, int xattr_len)
226{
227	int ret;
228
229	ret = vfs_getxattr_alloc(&nop_mnt_idmap, dentry, XATTR_NAME_IMA,
230				 (char **)xattr_value, xattr_len, GFP_NOFS);
231	if (ret == -EOPNOTSUPP)
232		ret = 0;
233	return ret;
234}
235
236/*
237 * calc_file_id_hash - calculate the hash of the ima_file_id struct data
238 * @type: xattr type [enum evm_ima_xattr_type]
239 * @algo: hash algorithm [enum hash_algo]
240 * @digest: pointer to the digest to be hashed
241 * @hash: (out) pointer to the hash
242 *
243 * IMA signature version 3 disambiguates the data that is signed by
244 * indirectly signing the hash of the ima_file_id structure data.
245 *
246 * Signing the ima_file_id struct is currently only supported for
247 * IMA_VERITY_DIGSIG type xattrs.
248 *
249 * Return 0 on success, error code otherwise.
250 */
251static int calc_file_id_hash(enum evm_ima_xattr_type type,
252			     enum hash_algo algo, const u8 *digest,
253			     struct ima_digest_data *hash)
254{
255	struct ima_file_id file_id = {
256		.hash_type = IMA_VERITY_DIGSIG, .hash_algorithm = algo};
257	unsigned int unused = HASH_MAX_DIGESTSIZE - hash_digest_size[algo];
258
259	if (type != IMA_VERITY_DIGSIG)
260		return -EINVAL;
261
262	memcpy(file_id.hash, digest, hash_digest_size[algo]);
263
264	hash->algo = algo;
265	hash->length = hash_digest_size[algo];
266
267	return ima_calc_buffer_hash(&file_id, sizeof(file_id) - unused, hash);
268}
269
270/*
271 * xattr_verify - verify xattr digest or signature
272 *
273 * Verify whether the hash or signature matches the file contents.
274 *
275 * Return 0 on success, error code otherwise.
276 */
277static int xattr_verify(enum ima_hooks func, struct ima_iint_cache *iint,
278			struct evm_ima_xattr_data *xattr_value, int xattr_len,
279			enum integrity_status *status, const char **cause)
280{
281	struct ima_max_digest_data hash;
282	struct signature_v2_hdr *sig;
283	int rc = -EINVAL, hash_start = 0;
284	int mask;
285
286	switch (xattr_value->type) {
287	case IMA_XATTR_DIGEST_NG:
288		/* first byte contains algorithm id */
289		hash_start = 1;
290		fallthrough;
291	case IMA_XATTR_DIGEST:
292		if (*status != INTEGRITY_PASS_IMMUTABLE) {
293			if (iint->flags & IMA_DIGSIG_REQUIRED) {
294				if (iint->flags & IMA_VERITY_REQUIRED)
295					*cause = "verity-signature-required";
296				else
297					*cause = "IMA-signature-required";
298				*status = INTEGRITY_FAIL;
299				break;
300			}
301			clear_bit(IMA_DIGSIG, &iint->atomic_flags);
302		} else {
303			set_bit(IMA_DIGSIG, &iint->atomic_flags);
304		}
305		if (xattr_len - sizeof(xattr_value->type) - hash_start >=
306				iint->ima_hash->length)
307			/*
308			 * xattr length may be longer. md5 hash in previous
309			 * version occupied 20 bytes in xattr, instead of 16
310			 */
311			rc = memcmp(&xattr_value->data[hash_start],
312				    iint->ima_hash->digest,
313				    iint->ima_hash->length);
314		else
315			rc = -EINVAL;
316		if (rc) {
317			*cause = "invalid-hash";
318			*status = INTEGRITY_FAIL;
319			break;
320		}
321		*status = INTEGRITY_PASS;
322		break;
323	case EVM_IMA_XATTR_DIGSIG:
324		set_bit(IMA_DIGSIG, &iint->atomic_flags);
325
326		mask = IMA_DIGSIG_REQUIRED | IMA_VERITY_REQUIRED;
327		if ((iint->flags & mask) == mask) {
328			*cause = "verity-signature-required";
329			*status = INTEGRITY_FAIL;
330			break;
331		}
332
333		sig = (typeof(sig))xattr_value;
334		if (sig->version >= 3) {
335			*cause = "invalid-signature-version";
336			*status = INTEGRITY_FAIL;
337			break;
338		}
339		rc = integrity_digsig_verify(INTEGRITY_KEYRING_IMA,
340					     (const char *)xattr_value,
341					     xattr_len,
342					     iint->ima_hash->digest,
343					     iint->ima_hash->length);
344		if (rc == -EOPNOTSUPP) {
345			*status = INTEGRITY_UNKNOWN;
346			break;
347		}
348		if (IS_ENABLED(CONFIG_INTEGRITY_PLATFORM_KEYRING) && rc &&
349		    func == KEXEC_KERNEL_CHECK)
350			rc = integrity_digsig_verify(INTEGRITY_KEYRING_PLATFORM,
351						     (const char *)xattr_value,
352						     xattr_len,
353						     iint->ima_hash->digest,
354						     iint->ima_hash->length);
355		if (rc) {
356			*cause = "invalid-signature";
357			*status = INTEGRITY_FAIL;
358		} else {
359			*status = INTEGRITY_PASS;
360		}
361		break;
362	case IMA_VERITY_DIGSIG:
363		set_bit(IMA_DIGSIG, &iint->atomic_flags);
364
365		if (iint->flags & IMA_DIGSIG_REQUIRED) {
366			if (!(iint->flags & IMA_VERITY_REQUIRED)) {
367				*cause = "IMA-signature-required";
368				*status = INTEGRITY_FAIL;
369				break;
370			}
371		}
372
373		sig = (typeof(sig))xattr_value;
374		if (sig->version != 3) {
375			*cause = "invalid-signature-version";
376			*status = INTEGRITY_FAIL;
377			break;
378		}
379
380		rc = calc_file_id_hash(IMA_VERITY_DIGSIG, iint->ima_hash->algo,
381				       iint->ima_hash->digest, &hash.hdr);
382		if (rc) {
383			*cause = "sigv3-hashing-error";
384			*status = INTEGRITY_FAIL;
385			break;
386		}
387
388		rc = integrity_digsig_verify(INTEGRITY_KEYRING_IMA,
389					     (const char *)xattr_value,
390					     xattr_len, hash.digest,
391					     hash.hdr.length);
392		if (rc) {
393			*cause = "invalid-verity-signature";
394			*status = INTEGRITY_FAIL;
395		} else {
396			*status = INTEGRITY_PASS;
397		}
398
399		break;
400	default:
401		*status = INTEGRITY_UNKNOWN;
402		*cause = "unknown-ima-data";
403		break;
404	}
405
406	return rc;
407}
408
409/*
410 * modsig_verify - verify modsig signature
411 *
412 * Verify whether the signature matches the file contents.
413 *
414 * Return 0 on success, error code otherwise.
415 */
416static int modsig_verify(enum ima_hooks func, const struct modsig *modsig,
417			 enum integrity_status *status, const char **cause)
418{
419	int rc;
420
421	rc = integrity_modsig_verify(INTEGRITY_KEYRING_IMA, modsig);
422	if (IS_ENABLED(CONFIG_INTEGRITY_PLATFORM_KEYRING) && rc &&
423	    func == KEXEC_KERNEL_CHECK)
424		rc = integrity_modsig_verify(INTEGRITY_KEYRING_PLATFORM,
425					     modsig);
426	if (rc) {
427		*cause = "invalid-signature";
428		*status = INTEGRITY_FAIL;
429	} else {
430		*status = INTEGRITY_PASS;
431	}
432
433	return rc;
434}
435
436/*
437 * ima_check_blacklist - determine if the binary is blacklisted.
438 *
439 * Add the hash of the blacklisted binary to the measurement list, based
440 * on policy.
441 *
442 * Returns -EPERM if the hash is blacklisted.
443 */
444int ima_check_blacklist(struct ima_iint_cache *iint,
445			const struct modsig *modsig, int pcr)
446{
447	enum hash_algo hash_algo;
448	const u8 *digest = NULL;
449	u32 digestsize = 0;
450	int rc = 0;
451
452	if (!(iint->flags & IMA_CHECK_BLACKLIST))
453		return 0;
454
455	if (iint->flags & IMA_MODSIG_ALLOWED && modsig) {
456		ima_get_modsig_digest(modsig, &hash_algo, &digest, &digestsize);
457
458		rc = is_binary_blacklisted(digest, digestsize);
459	} else if (iint->flags & IMA_DIGSIG_REQUIRED && iint->ima_hash)
460		rc = is_binary_blacklisted(iint->ima_hash->digest, iint->ima_hash->length);
461
462	if ((rc == -EPERM) && (iint->flags & IMA_MEASURE))
463		process_buffer_measurement(&nop_mnt_idmap, NULL, digest, digestsize,
464					   "blacklisted-hash", NONE,
465					   pcr, NULL, false, NULL, 0);
466
467	return rc;
468}
469
470/*
471 * ima_appraise_measurement - appraise file measurement
472 *
473 * Call evm_verifyxattr() to verify the integrity of 'security.ima'.
474 * Assuming success, compare the xattr hash with the collected measurement.
475 *
476 * Return 0 on success, error code otherwise
477 */
478int ima_appraise_measurement(enum ima_hooks func, struct ima_iint_cache *iint,
479			     struct file *file, const unsigned char *filename,
480			     struct evm_ima_xattr_data *xattr_value,
481			     int xattr_len, const struct modsig *modsig)
482{
483	static const char op[] = "appraise_data";
484	const char *cause = "unknown";
485	struct dentry *dentry = file_dentry(file);
486	struct inode *inode = d_backing_inode(dentry);
487	enum integrity_status status = INTEGRITY_UNKNOWN;
488	int rc = xattr_len;
489	bool try_modsig = iint->flags & IMA_MODSIG_ALLOWED && modsig;
490
491	/* If not appraising a modsig, we need an xattr. */
492	if (!(inode->i_opflags & IOP_XATTR) && !try_modsig)
493		return INTEGRITY_UNKNOWN;
494
495	/* If reading the xattr failed and there's no modsig, error out. */
496	if (rc <= 0 && !try_modsig) {
497		if (rc && rc != -ENODATA)
498			goto out;
499
500		if (iint->flags & IMA_DIGSIG_REQUIRED) {
501			if (iint->flags & IMA_VERITY_REQUIRED)
502				cause = "verity-signature-required";
503			else
504				cause = "IMA-signature-required";
505		} else {
506			cause = "missing-hash";
507		}
508
509		status = INTEGRITY_NOLABEL;
510		if (file->f_mode & FMODE_CREATED)
511			iint->flags |= IMA_NEW_FILE;
512		if ((iint->flags & IMA_NEW_FILE) &&
513		    (!(iint->flags & IMA_DIGSIG_REQUIRED) ||
514		     (inode->i_size == 0)))
515			status = INTEGRITY_PASS;
516		goto out;
517	}
518
519	status = evm_verifyxattr(dentry, XATTR_NAME_IMA, xattr_value,
520				 rc < 0 ? 0 : rc);
521	switch (status) {
522	case INTEGRITY_PASS:
523	case INTEGRITY_PASS_IMMUTABLE:
524	case INTEGRITY_UNKNOWN:
525		break;
526	case INTEGRITY_NOXATTRS:	/* No EVM protected xattrs. */
527		/* It's fine not to have xattrs when using a modsig. */
528		if (try_modsig)
529			break;
530		fallthrough;
531	case INTEGRITY_NOLABEL:		/* No security.evm xattr. */
532		cause = "missing-HMAC";
533		goto out;
534	case INTEGRITY_FAIL_IMMUTABLE:
535		set_bit(IMA_DIGSIG, &iint->atomic_flags);
536		cause = "invalid-fail-immutable";
537		goto out;
538	case INTEGRITY_FAIL:		/* Invalid HMAC/signature. */
539		cause = "invalid-HMAC";
540		goto out;
541	default:
542		WARN_ONCE(true, "Unexpected integrity status %d\n", status);
543	}
544
545	if (xattr_value)
546		rc = xattr_verify(func, iint, xattr_value, xattr_len, &status,
547				  &cause);
548
549	/*
550	 * If we have a modsig and either no imasig or the imasig's key isn't
551	 * known, then try verifying the modsig.
552	 */
553	if (try_modsig &&
554	    (!xattr_value || xattr_value->type == IMA_XATTR_DIGEST_NG ||
555	     rc == -ENOKEY))
556		rc = modsig_verify(func, modsig, &status, &cause);
557
558out:
559	/*
560	 * File signatures on some filesystems can not be properly verified.
561	 * When such filesystems are mounted by an untrusted mounter or on a
562	 * system not willing to accept such a risk, fail the file signature
563	 * verification.
564	 */
565	if ((inode->i_sb->s_iflags & SB_I_IMA_UNVERIFIABLE_SIGNATURE) &&
566	    ((inode->i_sb->s_iflags & SB_I_UNTRUSTED_MOUNTER) ||
567	     (iint->flags & IMA_FAIL_UNVERIFIABLE_SIGS))) {
568		status = INTEGRITY_FAIL;
569		cause = "unverifiable-signature";
570		integrity_audit_msg(AUDIT_INTEGRITY_DATA, inode, filename,
571				    op, cause, rc, 0);
572	} else if (status != INTEGRITY_PASS) {
573		/* Fix mode, but don't replace file signatures. */
574		if ((ima_appraise & IMA_APPRAISE_FIX) && !try_modsig &&
575		    (!xattr_value ||
576		     xattr_value->type != EVM_IMA_XATTR_DIGSIG)) {
577			if (!ima_fix_xattr(dentry, iint))
578				status = INTEGRITY_PASS;
579		}
580
581		/*
582		 * Permit new files with file/EVM portable signatures, but
583		 * without data.
584		 */
585		if (inode->i_size == 0 && iint->flags & IMA_NEW_FILE &&
586		    test_bit(IMA_DIGSIG, &iint->atomic_flags)) {
587			status = INTEGRITY_PASS;
588		}
589
590		integrity_audit_msg(AUDIT_INTEGRITY_DATA, inode, filename,
591				    op, cause, rc, 0);
592	} else {
593		ima_cache_flags(iint, func);
594	}
595
596	ima_set_cache_status(iint, func, status);
597	return status;
598}
599
600/*
601 * ima_update_xattr - update 'security.ima' hash value
602 */
603void ima_update_xattr(struct ima_iint_cache *iint, struct file *file)
604{
605	struct dentry *dentry = file_dentry(file);
606	int rc = 0;
607
608	/* do not collect and update hash for digital signatures */
609	if (test_bit(IMA_DIGSIG, &iint->atomic_flags))
610		return;
611
612	if ((iint->ima_file_status != INTEGRITY_PASS) &&
613	    !(iint->flags & IMA_HASH))
614		return;
615
616	rc = ima_collect_measurement(iint, file, NULL, 0, ima_hash_algo, NULL);
617	if (rc < 0)
618		return;
619
620	inode_lock(file_inode(file));
621	ima_fix_xattr(dentry, iint);
622	inode_unlock(file_inode(file));
623}
624
625/**
626 * ima_inode_post_setattr - reflect file metadata changes
627 * @idmap:  idmap of the mount the inode was found from
628 * @dentry: pointer to the affected dentry
629 * @ia_valid: for the UID and GID status
630 *
631 * Changes to a dentry's metadata might result in needing to appraise.
632 *
633 * This function is called from notify_change(), which expects the caller
634 * to lock the inode's i_mutex.
635 */
636static void ima_inode_post_setattr(struct mnt_idmap *idmap,
637				   struct dentry *dentry, int ia_valid)
638{
639	struct inode *inode = d_backing_inode(dentry);
640	struct ima_iint_cache *iint;
641	int action;
642
643	if (!(ima_policy_flag & IMA_APPRAISE) || !S_ISREG(inode->i_mode)
644	    || !(inode->i_opflags & IOP_XATTR))
645		return;
646
647	action = ima_must_appraise(idmap, inode, MAY_ACCESS, POST_SETATTR);
648	iint = ima_iint_find(inode);
649	if (iint) {
650		set_bit(IMA_CHANGE_ATTR, &iint->atomic_flags);
651		if (!action)
652			clear_bit(IMA_UPDATE_XATTR, &iint->atomic_flags);
653	}
654}
655
656/*
657 * ima_protect_xattr - protect 'security.ima'
658 *
659 * Ensure that not just anyone can modify or remove 'security.ima'.
660 */
661static int ima_protect_xattr(struct dentry *dentry, const char *xattr_name,
662			     const void *xattr_value, size_t xattr_value_len)
663{
664	if (strcmp(xattr_name, XATTR_NAME_IMA) == 0) {
665		if (!capable(CAP_SYS_ADMIN))
666			return -EPERM;
667		return 1;
668	}
669	return 0;
670}
671
672static void ima_reset_appraise_flags(struct inode *inode, int digsig)
673{
674	struct ima_iint_cache *iint;
675
676	if (!(ima_policy_flag & IMA_APPRAISE) || !S_ISREG(inode->i_mode))
677		return;
678
679	iint = ima_iint_find(inode);
680	if (!iint)
681		return;
682	iint->measured_pcrs = 0;
683	set_bit(IMA_CHANGE_XATTR, &iint->atomic_flags);
684	if (digsig)
685		set_bit(IMA_DIGSIG, &iint->atomic_flags);
686	else
687		clear_bit(IMA_DIGSIG, &iint->atomic_flags);
688}
689
690/**
691 * validate_hash_algo() - Block setxattr with unsupported hash algorithms
692 * @dentry: object of the setxattr()
693 * @xattr_value: userland supplied xattr value
694 * @xattr_value_len: length of xattr_value
695 *
696 * The xattr value is mapped to its hash algorithm, and this algorithm
697 * must be built in the kernel for the setxattr to be allowed.
698 *
699 * Emit an audit message when the algorithm is invalid.
700 *
701 * Return: 0 on success, else an error.
702 */
703static int validate_hash_algo(struct dentry *dentry,
704			      const struct evm_ima_xattr_data *xattr_value,
705			      size_t xattr_value_len)
706{
707	char *path = NULL, *pathbuf = NULL;
708	enum hash_algo xattr_hash_algo;
709	const char *errmsg = "unavailable-hash-algorithm";
710	unsigned int allowed_hashes;
711
712	xattr_hash_algo = ima_get_hash_algo(xattr_value, xattr_value_len);
713
714	allowed_hashes = atomic_read(&ima_setxattr_allowed_hash_algorithms);
715
716	if (allowed_hashes) {
717		/* success if the algorithm is allowed in the ima policy */
718		if (allowed_hashes & (1U << xattr_hash_algo))
719			return 0;
720
721		/*
722		 * We use a different audit message when the hash algorithm
723		 * is denied by a policy rule, instead of not being built
724		 * in the kernel image
725		 */
726		errmsg = "denied-hash-algorithm";
727	} else {
728		if (likely(xattr_hash_algo == ima_hash_algo))
729			return 0;
730
731		/* allow any xattr using an algorithm built in the kernel */
732		if (crypto_has_alg(hash_algo_name[xattr_hash_algo], 0, 0))
733			return 0;
734	}
735
736	pathbuf = kmalloc(PATH_MAX, GFP_KERNEL);
737	if (!pathbuf)
738		return -EACCES;
739
740	path = dentry_path(dentry, pathbuf, PATH_MAX);
741
742	integrity_audit_msg(AUDIT_INTEGRITY_DATA, d_inode(dentry), path,
743			    "set_data", errmsg, -EACCES, 0);
744
745	kfree(pathbuf);
746
747	return -EACCES;
748}
749
750static int ima_inode_setxattr(struct mnt_idmap *idmap, struct dentry *dentry,
751			      const char *xattr_name, const void *xattr_value,
752			      size_t xattr_value_len, int flags)
753{
754	const struct evm_ima_xattr_data *xvalue = xattr_value;
755	int digsig = 0;
756	int result;
757	int err;
758
759	result = ima_protect_xattr(dentry, xattr_name, xattr_value,
760				   xattr_value_len);
761	if (result == 1) {
762		if (!xattr_value_len || (xvalue->type >= IMA_XATTR_LAST))
763			return -EINVAL;
764
765		err = validate_hash_algo(dentry, xvalue, xattr_value_len);
766		if (err)
767			return err;
768
769		digsig = (xvalue->type == EVM_IMA_XATTR_DIGSIG);
770	} else if (!strcmp(xattr_name, XATTR_NAME_EVM) && xattr_value_len > 0) {
771		digsig = (xvalue->type == EVM_XATTR_PORTABLE_DIGSIG);
772	}
773	if (result == 1 || evm_revalidate_status(xattr_name)) {
774		ima_reset_appraise_flags(d_backing_inode(dentry), digsig);
775		if (result == 1)
776			result = 0;
777	}
778	return result;
779}
780
781static int ima_inode_set_acl(struct mnt_idmap *idmap, struct dentry *dentry,
782			     const char *acl_name, struct posix_acl *kacl)
783{
784	if (evm_revalidate_status(acl_name))
785		ima_reset_appraise_flags(d_backing_inode(dentry), 0);
786
787	return 0;
788}
789
790static int ima_inode_removexattr(struct mnt_idmap *idmap, struct dentry *dentry,
791				 const char *xattr_name)
792{
793	int result;
794
795	result = ima_protect_xattr(dentry, xattr_name, NULL, 0);
796	if (result == 1 || evm_revalidate_status(xattr_name)) {
797		ima_reset_appraise_flags(d_backing_inode(dentry), 0);
798		if (result == 1)
799			result = 0;
800	}
801	return result;
802}
803
804static int ima_inode_remove_acl(struct mnt_idmap *idmap, struct dentry *dentry,
805				const char *acl_name)
806{
807	return ima_inode_set_acl(idmap, dentry, acl_name, NULL);
808}
809
810static struct security_hook_list ima_appraise_hooks[] __ro_after_init = {
811	LSM_HOOK_INIT(inode_post_setattr, ima_inode_post_setattr),
812	LSM_HOOK_INIT(inode_setxattr, ima_inode_setxattr),
813	LSM_HOOK_INIT(inode_set_acl, ima_inode_set_acl),
814	LSM_HOOK_INIT(inode_removexattr, ima_inode_removexattr),
815	LSM_HOOK_INIT(inode_remove_acl, ima_inode_remove_acl),
816};
817
818void __init init_ima_appraise_lsm(const struct lsm_id *lsmid)
819{
820	security_add_hooks(ima_appraise_hooks, ARRAY_SIZE(ima_appraise_hooks),
821			   lsmid);
822}
823