staticstruct key *integrity_keyring_from_id(constunsignedint id)
{ if (id >= INTEGRITY_KEYRING_MAX) return ERR_PTR(-EINVAL);
if (!keyring[id]) {
keyring[id] =
request_key(&key_type_keyring, keyring_name[id], NULL); if (IS_ERR(keyring[id])) { int err = PTR_ERR(keyring[id]);
pr_err("no %s keyring: %d\n", keyring_name[id], err);
keyring[id] = NULL; return ERR_PTR(err);
}
}
return keyring[id];
}
int integrity_digsig_verify(constunsignedint id, constchar *sig, int siglen, constchar *digest, int digestlen)
{ struct key *keyring;
if (siglen < 2) return -EINVAL;
keyring = integrity_keyring_from_id(id); if (IS_ERR(keyring)) return PTR_ERR(keyring);
switch (sig[1]) { case 1: /* v1 API expect signature without xattr type */ return digsig_verify(keyring, sig + 1, siglen - 1, digest,
digestlen); case 2: /* regular file data hash based signature */ case 3: /* struct ima_file_id data based signature */ return asymmetric_verify(keyring, sig, siglen, digest,
digestlen);
}
return -EOPNOTSUPP;
}
int integrity_modsig_verify(constunsignedint id, conststruct modsig *modsig)
{ struct key *keyring;
keyring = integrity_keyring_from_id(id); if (IS_ERR(keyring)) return PTR_ERR(keyring);
if (id == INTEGRITY_KEYRING_PLATFORM ||
(id == INTEGRITY_KEYRING_MACHINE &&
!IS_ENABLED(CONFIG_INTEGRITY_CA_MACHINE_KEYRING))) {
restriction = NULL; goto out;
}
if (!IS_ENABLED(CONFIG_INTEGRITY_TRUSTED_KEYRING)) return 0;
restriction = kzalloc(sizeof(struct key_restriction), GFP_KERNEL); if (!restriction) return -ENOMEM;
if (id == INTEGRITY_KEYRING_MACHINE)
restriction->check = restrict_link_by_ca; else
restriction->check = restrict_link_to_ima;
/* * MOK keys can only be added through a read-only runtime services * UEFI variable during boot. No additional keys shall be allowed to * load into the machine keyring following init from userspace.
*/ if (id != INTEGRITY_KEYRING_MACHINE)
perm |= KEY_USR_WRITE;
out:
ret = __integrity_init_keyring(id, perm, restriction); if (ret)
kfree(restriction); return ret;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.