/* name for boot aggregate entry */ constchar boot_aggregate_name[] = "boot_aggregate"; struct tpm_chip *ima_tpm_chip;
/* Add the boot aggregate to the IMA measurement list and extend * the PCR register. * * Calculate the boot aggregate, a hash over tpm registers 0-7, * assuming a TPM chip exists, and zeroes if the TPM chip does not * exist. Add the boot aggregate measurement to the measurement * list and extend the PCR register. * * If a tpm chip does not exist, indicate the core root of trust is * not hardware based by invalidating the aggregate PCR value. * (The aggregate PCR value is invalidated by adding one value to * the measurement list and extending the aggregate PCR value with * a different value.) Violations add a zero entry to the measurement * list and extend the aggregate PCR value with ff...ff's.
*/ staticint __init ima_add_boot_aggregate(void)
{ staticconstchar op[] = "add_boot_aggregate"; constchar *audit_cause = "ENOMEM"; struct ima_template_entry *entry; struct ima_iint_cache tmp_iint, *iint = &tmp_iint; struct ima_event_data event_data = { .iint = iint,
.filename = boot_aggregate_name }; struct ima_max_digest_data hash; struct ima_digest_data *hash_hdr = container_of(&hash.hdr, struct ima_digest_data, hdr); int result = -ENOMEM; int violation = 0;
/* * With TPM 2.0 hash agility, TPM chips could support multiple TPM * PCR banks, allowing firmware to configure and enable different * banks. The SHA1 bank is not necessarily enabled. * * Use the same hash algorithm for reading the TPM PCRs as for * calculating the boot aggregate digest. Preference is given to * the configured IMA default hash algorithm. Otherwise, use the * TCG required banks - SHA256 for TPM 2.0, SHA1 for TPM 1.2. * Ultimately select SHA1 also for TPM 2.0 if the SHA256 PCR bank * is not found.
*/ if (ima_tpm_chip) {
result = ima_calc_boot_aggregate(hash_hdr); if (result < 0) {
audit_cause = "hashing_error"; goto err_out;
}
}
result = ima_alloc_init_template(&event_data, &entry, NULL); if (result < 0) {
audit_cause = "alloc_entry"; goto err_out;
}
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.