Patch "tpm: fix checks for policy digest existence in tpm2_seal_trusted()" has been added to the 4.5-stable tree
Subsystems (5)
This is a note to let you know that I've just added the patch titled
tpm: fix checks for policy digest existence in tpm2_seal_trusted()
to the 4.5-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
tpm-fix-checks-for-policy-digest-existence-in-tpm2_seal_trusted.patch
and it can be found in the queue-4.5 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
f3c82ade7c59303167d56b0be3e0707751fc45e2Mon Sep 17 00:00:00 2001
From: Jarkko Sakkinen <[email protected]>
Date: Wed, 6 Jan 2016 16:43:30 +0200
Subject: tpm: fix checks for policy digest existence in tpm2_seal_trusted()
From: Jarkko Sakkinen <[email protected]>
commit f3c82ade7c59303167d56b0be3e0707751fc45e2 upstream.
In my original patch sealing with policy was done with dynamically allocated buffer that I changed later into an array so the checks in tpm2-cmd.c became invalid. This patch fixes the issue.
--- drivers/char/tpm/tpm2-cmd.c | 12 ++++-------- include/keys/trusted-type.h | 2 +- security/keys/trusted.c | 11 +++++------ 3 files changed, 10 insertions(+), 15 deletions(-)
drivers/char/tpm/tpm2-cmd.c +4 -8
@@ -478,20 +478,16 @@ int tpm2_seal_trusted(struct tpm_chip *ctpm_buf_append_u8 (&buf, payload->migratable);/* public */ -if (options->policydigest) -tpm_buf_append_u16 (&buf,14 + options->digest_len); -else -tpm_buf_append_u16 (&buf,14 ); - +tpm_buf_append_u16 (&buf,14 + options->policydigest_len);tpm_buf_append_u16 (&buf,TPM2_ALG_KEYEDHASH );tpm_buf_append_u16 (&buf, hash);/* policy */ -if (options->policydigest) { +if (options->policydigest_len) {tpm_buf_append_u32 (&buf,0 ); -tpm_buf_append_u16 (&buf, options->digest_len); +tpm_buf_append_u16 (&buf, options->policydigest_len);tpm_buf_append (&buf, options->policydigest, - options->digest_len); + options->policydigest_len); }else {tpm_buf_append_u32 (&buf,TPM2_ATTR_USER_WITH_AUTH );tpm_buf_append_u16 (&buf,0 );
include/keys/trusted-type.h +1 -1
@@ -38,7 +38,7 @@ struct trusted_key_options {unsigned char pcrinfo[MAX_PCRINFO_SIZE ];int pcrlock;uint32_t hash; -uint32_t digest_len; +uint32_t policydigest_len;unsigned char policydigest[MAX_DIGEST_SIZE ];uint32_t policyhandle; };
security/keys/trusted.c +5 -6
@@ -744,6 +744,7 @@ static int getoptions(char *c, struct trunsigned long handle;unsigned long lock;unsigned long token_mask =0 ; +unsigned int digest_len;int i;int tpm2;
@@ -752,7 +753,6 @@ static int getoptions(char *c, struct trreturn tpm2; opt->hash = tpm2 ?HASH_ALGO_SHA256 :HASH_ALGO_SHA1 ; - opt->digest_len = hash_digest_size[opt->hash];while ((p =strsep (&c," \t" ))) {if (*p =='\0' || *p ==' ' || *p =='\t' )
@@ -812,8 +812,6 @@ static int getoptions(char *c, struct trfor (i =0 ; i <HASH_ALGO__LAST ; i++) {if (!strcmp (args[0 ].from, hash_algo_name[i])) { opt->hash = i; - opt->digest_len = - hash_digest_size[opt->hash];break ; } }
@@ -825,13 +823,14 @@ static int getoptions(char *c, struct tr }break ;case Opt_policydigest: -if (!tpm2 || -strlen (args[0 ].from) != (2 * opt->digest_len)) + digest_len = hash_digest_size[opt->hash]; +if (!tpm2 ||strlen (args[0 ].from) != (2 * digest_len))return -EINVAL ; res =hex2bin (opt->policydigest, args[0 ].from, - opt->digest_len); + digest_len);if (res <0 )return -EINVAL ; + opt->policydigest_len = digest_len;break ;case Opt_policyhandle:if (!tpm2)
Patches currently in stable-queue which might be from [email protected] are
queue-4.5/tpm-fix-set-continuesession-attribute-for-the-unseal-operation.patch queue-4.5/tpm-fix-checks-for-policy-digest-existence-in-tpm2_seal_trusted.patch