int __init ima_init(void) { u8 pcr_i[TPM_DIGEST_SIZE]; int rc; ima_used_chip = 0; rc = tpm_pcr_read(TPM_ANY_NUM, 0, pcr_i); if (rc == 0) ima_used_chip = 1; if (!ima_used_chip) pr_info("No TPM chip found, activating TPM-bypass! (rc=%d)\n", rc); rc = integrity_init_keyring(INTEGRITY_KEYRING_IMA); if (rc) return rc; rc = ima_init_crypto(); if (rc) return rc; rc = ima_init_template(); if (rc != 0) return rc; ima_load_kexec_buffer(); rc = ima_add_boot_aggregate(); /* boot aggregate must be first entry */ if (rc != 0) return rc; ima_init_policy(); return ima_fs_init(); }
int __init ima_init(void) { u8 pcr_i[TPM_DIGEST_SIZE]; int rc; ima_used_chip = 0; rc = tpm_pcr_read(TPM_ANY_NUM, 0, pcr_i); if (rc == 0) ima_used_chip = 1; if (!ima_used_chip) pr_info("IMA: No TPM chip found, activating TPM-bypass!\n"); rc = ima_init_crypto(); if (rc) return rc; rc = ima_init_template(); if (rc != 0) return rc; ima_add_boot_aggregate(); /* boot aggregate must be first entry */ ima_init_policy(); return ima_fs_init(); }
static void __init ima_pcrread(int idx, u8 *pcr) { if (!ima_used_chip) return; if (tpm_pcr_read(TPM_ANY_NUM, idx, pcr) != 0) pr_err("Error Communicating to TPM chip\n"); }
static int do_tpm_pcr_read(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { uint32_t index, count, rc; void *data; if (argc != 4) return CMD_RET_USAGE; index = simple_strtoul(argv[1], NULL, 0); data = (void *)simple_strtoul(argv[2], NULL, 0); count = simple_strtoul(argv[3], NULL, 0); rc = tpm_pcr_read(index, data, count); if (!rc) { puts("Named PCR content:\n"); print_byte_string(data, count); } return convert_return_code(rc); }