^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (C) 2009-2010 IBM Corporation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Authors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Mimi Zohar <zohar@us.ibm.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #ifdef pr_fmt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #undef pr_fmt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/integrity.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <crypto/sha.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include <linux/key.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #include <linux/audit.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) /* iint action cache flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define IMA_MEASURE 0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define IMA_MEASURED 0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define IMA_APPRAISE 0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define IMA_APPRAISED 0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) /*#define IMA_COLLECT 0x00000010 do not use this flag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define IMA_COLLECTED 0x00000020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define IMA_AUDIT 0x00000040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define IMA_AUDITED 0x00000080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define IMA_HASH 0x00000100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define IMA_HASHED 0x00000200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) /* iint cache flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #define IMA_ACTION_FLAGS 0xff000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #define IMA_DIGSIG_REQUIRED 0x01000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define IMA_PERMIT_DIRECTIO 0x02000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define IMA_NEW_FILE 0x04000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define EVM_IMMUTABLE_DIGSIG 0x08000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define IMA_FAIL_UNVERIFIABLE_SIGS 0x10000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define IMA_MODSIG_ALLOWED 0x20000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define IMA_CHECK_BLACKLIST 0x40000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define IMA_DO_MASK (IMA_MEASURE | IMA_APPRAISE | IMA_AUDIT | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) IMA_HASH | IMA_APPRAISE_SUBMASK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define IMA_DONE_MASK (IMA_MEASURED | IMA_APPRAISED | IMA_AUDITED | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) IMA_HASHED | IMA_COLLECTED | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) IMA_APPRAISED_SUBMASK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) /* iint subaction appraise cache flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define IMA_FILE_APPRAISE 0x00001000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define IMA_FILE_APPRAISED 0x00002000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define IMA_MMAP_APPRAISE 0x00004000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define IMA_MMAP_APPRAISED 0x00008000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define IMA_BPRM_APPRAISE 0x00010000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define IMA_BPRM_APPRAISED 0x00020000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define IMA_READ_APPRAISE 0x00040000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define IMA_READ_APPRAISED 0x00080000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define IMA_CREDS_APPRAISE 0x00100000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define IMA_CREDS_APPRAISED 0x00200000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) #define IMA_APPRAISE_SUBMASK (IMA_FILE_APPRAISE | IMA_MMAP_APPRAISE | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) IMA_BPRM_APPRAISE | IMA_READ_APPRAISE | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) IMA_CREDS_APPRAISE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define IMA_APPRAISED_SUBMASK (IMA_FILE_APPRAISED | IMA_MMAP_APPRAISED | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) IMA_BPRM_APPRAISED | IMA_READ_APPRAISED | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) IMA_CREDS_APPRAISED)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) /* iint cache atomic_flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define IMA_CHANGE_XATTR 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #define IMA_UPDATE_XATTR 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define IMA_CHANGE_ATTR 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #define IMA_DIGSIG 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define IMA_MUST_MEASURE 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) enum evm_ima_xattr_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) IMA_XATTR_DIGEST = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) EVM_XATTR_HMAC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) EVM_IMA_XATTR_DIGSIG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) IMA_XATTR_DIGEST_NG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) EVM_XATTR_PORTABLE_DIGSIG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) IMA_XATTR_LAST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) struct evm_ima_xattr_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) u8 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) u8 data[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) /* Only used in the EVM HMAC code. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) struct evm_xattr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) struct evm_ima_xattr_data data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) u8 digest[SHA1_DIGEST_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #define IMA_MAX_DIGEST_SIZE 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) struct ima_digest_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) u8 algo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) u8 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) u8 unused;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) u8 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) } sha1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) u8 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) u8 algo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) } ng;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) u8 data[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) } xattr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) u8 digest[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) * signature format v2 - for using with asymmetric keys
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) struct signature_v2_hdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) uint8_t type; /* xattr type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) uint8_t version; /* signature format version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) uint8_t hash_algo; /* Digest algorithm [enum hash_algo] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) __be32 keyid; /* IMA key identifier - not X509/PGP specific */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) __be16 sig_size; /* signature size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) uint8_t sig[]; /* signature payload */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) /* integrity data associated with an inode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) struct integrity_iint_cache {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) struct rb_node rb_node; /* rooted in integrity_iint_tree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) struct mutex mutex; /* protects: version, flags, digest */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) struct inode *inode; /* back pointer to inode in question */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) u64 version; /* track inode changes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) unsigned long flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) unsigned long measured_pcrs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) unsigned long atomic_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) enum integrity_status ima_file_status:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) enum integrity_status ima_mmap_status:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) enum integrity_status ima_bprm_status:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) enum integrity_status ima_read_status:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) enum integrity_status ima_creds_status:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) enum integrity_status evm_status:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) struct ima_digest_data *ima_hash;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) /* rbtree tree calls to lookup, insert, delete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) * integrity data associated with an inode.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) struct integrity_iint_cache *integrity_iint_find(struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) int integrity_kernel_read(struct file *file, loff_t offset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) void *addr, unsigned long count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define INTEGRITY_KEYRING_EVM 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define INTEGRITY_KEYRING_IMA 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #define INTEGRITY_KEYRING_PLATFORM 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #define INTEGRITY_KEYRING_MAX 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) extern struct dentry *integrity_dir;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) struct modsig;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) #ifdef CONFIG_INTEGRITY_SIGNATURE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) int integrity_digsig_verify(const unsigned int id, const char *sig, int siglen,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) const char *digest, int digestlen);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) int integrity_modsig_verify(unsigned int id, const struct modsig *modsig);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) int __init integrity_init_keyring(const unsigned int id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) int __init integrity_load_x509(const unsigned int id, const char *path);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) int __init integrity_load_cert(const unsigned int id, const char *source,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) const void *data, size_t len, key_perm_t perm);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) static inline int integrity_digsig_verify(const unsigned int id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) const char *sig, int siglen,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) const char *digest, int digestlen)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) return -EOPNOTSUPP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) static inline int integrity_modsig_verify(unsigned int id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) const struct modsig *modsig)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) return -EOPNOTSUPP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) static inline int integrity_init_keyring(const unsigned int id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) static inline int __init integrity_load_cert(const unsigned int id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) const char *source,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) const void *data, size_t len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) key_perm_t perm)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) #endif /* CONFIG_INTEGRITY_SIGNATURE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) #ifdef CONFIG_INTEGRITY_ASYMMETRIC_KEYS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) int asymmetric_verify(struct key *keyring, const char *sig,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) int siglen, const char *data, int datalen);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) static inline int asymmetric_verify(struct key *keyring, const char *sig,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) int siglen, const char *data, int datalen)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) return -EOPNOTSUPP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) #ifdef CONFIG_IMA_APPRAISE_MODSIG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) int ima_modsig_verify(struct key *keyring, const struct modsig *modsig);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) static inline int ima_modsig_verify(struct key *keyring,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) const struct modsig *modsig)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) return -EOPNOTSUPP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) #ifdef CONFIG_IMA_LOAD_X509
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) void __init ima_load_x509(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) static inline void ima_load_x509(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) #ifdef CONFIG_EVM_LOAD_X509
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) void __init evm_load_x509(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) static inline void evm_load_x509(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #ifdef CONFIG_INTEGRITY_AUDIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) /* declarations */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) void integrity_audit_msg(int audit_msgno, struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) const unsigned char *fname, const char *op,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) const char *cause, int result, int info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) void integrity_audit_message(int audit_msgno, struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) const unsigned char *fname, const char *op,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) const char *cause, int result, int info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) int errno);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) static inline struct audit_buffer *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) integrity_audit_log_start(struct audit_context *ctx, gfp_t gfp_mask, int type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) return audit_log_start(ctx, gfp_mask, type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) static inline void integrity_audit_msg(int audit_msgno, struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) const unsigned char *fname,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) const char *op, const char *cause,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) int result, int info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) static inline void integrity_audit_message(int audit_msgno,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) const unsigned char *fname,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) const char *op, const char *cause,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) int result, int info, int errno)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) static inline struct audit_buffer *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) integrity_audit_log_start(struct audit_context *ctx, gfp_t gfp_mask, int type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) #ifdef CONFIG_INTEGRITY_PLATFORM_KEYRING
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) void __init add_to_platform_keyring(const char *source, const void *data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) size_t len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) static inline void __init add_to_platform_keyring(const char *source,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) const void *data, size_t len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) #endif