modsig
int integrity_modsig_verify(const unsigned int id, const struct modsig *modsig)
return ima_modsig_verify(keyring, modsig);
struct modsig;
struct modsig *modsig);
int xattr_len, const struct modsig *modsig, int pcr,
const struct modsig *modsig, int pcr);
int xattr_len, const struct modsig *modsig,
const struct modsig *modsig, int pcr)
const struct modsig *modsig,
struct modsig **modsig);
void ima_collect_modsig(struct modsig *modsig, const void *buf, loff_t size);
int ima_get_modsig_digest(const struct modsig *modsig, enum hash_algo *algo,
int ima_get_raw_modsig(const struct modsig *modsig, const void **data,
void ima_free_modsig(struct modsig *modsig);
loff_t buf_len, struct modsig **modsig)
static inline void ima_collect_modsig(struct modsig *modsig, const void *buf,
static inline int ima_get_modsig_digest(const struct modsig *modsig,
static inline int ima_get_raw_modsig(const struct modsig *modsig,
static inline void ima_free_modsig(struct modsig *modsig)
const struct modsig *modsig;
struct modsig *modsig)
if (modsig)
ima_collect_modsig(modsig, buf, size);
int xattr_len, const struct modsig *modsig, int pcr,
.modsig = modsig };
if (iint->measured_pcrs & (0x1 << pcr) && !modsig)
static int modsig_verify(enum ima_hooks func, const struct modsig *modsig,
rc = integrity_modsig_verify(INTEGRITY_KEYRING_IMA, modsig);
modsig);
const struct modsig *modsig, int pcr)
if (iint->flags & IMA_MODSIG_ALLOWED && modsig) {
ima_get_modsig_digest(modsig, &hash_algo, &digest, &digestsize);
int xattr_len, const struct modsig *modsig,
bool try_modsig = iint->flags & IMA_MODSIG_ALLOWED && modsig;
rc = modsig_verify(func, modsig, &status, &cause);
struct modsig *modsig = NULL;
rc = ima_read_modsig(func, buf, size, &modsig);
rc = ima_collect_measurement(iint, file, buf, size, hash_algo, modsig);
xattr_value, xattr_len, modsig, pcr,
rc = ima_check_blacklist(iint, modsig, pcr);
xattr_len, modsig,
ima_free_modsig(modsig);
void ima_collect_modsig(struct modsig *modsig, const void *buf, loff_t size)
size -= modsig->raw_pkcs7_len + strlen(MODULE_SIG_STRING) +
rc = pkcs7_supply_detached_data(modsig->pkcs7_msg, buf, size);
rc = pkcs7_get_digest(modsig->pkcs7_msg, &modsig->digest,
&modsig->digest_size, &modsig->hash_algo);
int ima_modsig_verify(struct key *keyring, const struct modsig *modsig)
return verify_pkcs7_message_sig(NULL, 0, modsig->pkcs7_msg, keyring,
int ima_get_modsig_digest(const struct modsig *modsig, enum hash_algo *algo,
*algo = modsig->hash_algo;
*digest = modsig->digest;
*digest_size = modsig->digest_size;
int ima_get_raw_modsig(const struct modsig *modsig, const void **data,
*data = &modsig->raw_pkcs7;
*data_len = modsig->raw_pkcs7_len;
void ima_free_modsig(struct modsig *modsig)
if (!modsig)
pkcs7_free_message(modsig->pkcs7_msg);
kfree(modsig);
struct modsig **modsig)
struct modsig *hdr;
*modsig = hdr;
if (!event_data->modsig)
rc = ima_get_modsig_digest(event_data->modsig, &hash_algo,
if (!event_data->modsig)
rc = ima_get_raw_modsig(event_data->modsig, &data, &data_len);
struct modsig;
int integrity_modsig_verify(unsigned int id, const struct modsig *modsig);
const struct modsig *modsig)
int ima_modsig_verify(struct key *keyring, const struct modsig *modsig);
const struct modsig *modsig)