mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
ima: extend boot_aggregate with kernel measurements
[ Upstream commit 20c59ce010f84300f6c655d32db2610d3433f85c ] Registers 8-9 are used to store measurements of the kernel and its command line (e.g., grub2 bootloader with tpm module enabled). IMA should include them in the boot aggregate. Registers 8-9 should be only included in non-SHA1 digests to avoid ambiguity. Signed-off-by: Maurizio Drocco <[email protected]> Reviewed-by: Bruno Meneguele <[email protected]> Tested-by: Bruno Meneguele <[email protected]> (TPM 1.2, TPM 2.0) Signed-off-by: Mimi Zohar <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
This commit is contained in:
parent
733729d3e0
commit
c4405cdf96
2 changed files with 15 additions and 2 deletions
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
enum ima_show_type { IMA_SHOW_BINARY, IMA_SHOW_BINARY_NO_FIELD_LEN,
|
||||
IMA_SHOW_BINARY_OLD_STRING_FMT, IMA_SHOW_ASCII };
|
||||
enum tpm_pcrs { TPM_PCR0 = 0, TPM_PCR8 = 8 };
|
||||
enum tpm_pcrs { TPM_PCR0 = 0, TPM_PCR8 = 8, TPM_PCR10 = 10 };
|
||||
|
||||
/* digest size for IMA, fits SHA1 or MD5 */
|
||||
#define IMA_DIGEST_SIZE SHA1_DIGEST_SIZE
|
||||
|
|
|
|||
|
|
@ -682,7 +682,7 @@ static int ima_calc_boot_aggregate_tfm(char *digest, u16 alg_id,
|
|||
if (rc != 0)
|
||||
return rc;
|
||||
|
||||
/* cumulative sha1 over tpm registers 0-7 */
|
||||
/* cumulative digest over TPM registers 0-7 */
|
||||
for (i = TPM_PCR0; i < TPM_PCR8; i++) {
|
||||
ima_pcrread(i, &d);
|
||||
/* now accumulate with current aggregate */
|
||||
|
|
@ -691,6 +691,19 @@ static int ima_calc_boot_aggregate_tfm(char *digest, u16 alg_id,
|
|||
if (rc != 0)
|
||||
return rc;
|
||||
}
|
||||
/*
|
||||
* Extend cumulative digest over TPM registers 8-9, which contain
|
||||
* measurement for the kernel command line (reg. 8) and image (reg. 9)
|
||||
* in a typical PCR allocation. Registers 8-9 are only included in
|
||||
* non-SHA1 boot_aggregate digests to avoid ambiguity.
|
||||
*/
|
||||
if (alg_id != TPM_ALG_SHA1) {
|
||||
for (i = TPM_PCR8; i < TPM_PCR10; i++) {
|
||||
ima_pcrread(i, &d);
|
||||
rc = crypto_shash_update(shash, d.digest,
|
||||
crypto_shash_digestsize(tfm));
|
||||
}
|
||||
}
|
||||
if (!rc)
|
||||
crypto_shash_final(shash, digest);
|
||||
return rc;
|
||||
|
|
|
|||
Loading…
Reference in a new issue