From: Jarkko Sakkinen <jarkko.sakki...@linux.intel.com>

The 'migratable' flag was not added to the key payload. This patch
fixes the problem.

Fixes: 0fe5480303a1 ("keys, trusted: seal/unseal with TPM 2.0 chips")
Signed-off-by: Jarkko Sakkinen <jarkko.sakki...@linux.intel.com>
Acked-by: Peter Huewe <peterhu...@gmx.de>
(cherry picked from commit 2e31125c241212e2407d61a2d1cbdad0055a30b0)
Signed-off-by: Yong, Jonathan <jonathan.y...@intel.com>
---
 drivers/char/tpm/tpm2-cmd.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/char/tpm/tpm2-cmd.c b/drivers/char/tpm/tpm2-cmd.c
index bd7039f..c121304 100644
--- a/drivers/char/tpm/tpm2-cmd.c
+++ b/drivers/char/tpm/tpm2-cmd.c
@@ -443,12 +443,13 @@ int tpm2_seal_trusted(struct tpm_chip *chip,
                             TPM_DIGEST_SIZE);
 
        /* sensitive */
-       tpm_buf_append_u16(&buf, 4 + TPM_DIGEST_SIZE + payload->key_len);
+       tpm_buf_append_u16(&buf, 4 + TPM_DIGEST_SIZE + payload->key_len + 1);
 
        tpm_buf_append_u16(&buf, TPM_DIGEST_SIZE);
        tpm_buf_append(&buf, options->blobauth, TPM_DIGEST_SIZE);
-       tpm_buf_append_u16(&buf, payload->key_len);
+       tpm_buf_append_u16(&buf, payload->key_len + 1);
        tpm_buf_append(&buf, payload->key, payload->key_len);
+       tpm_buf_append_u8(&buf, payload->migratable);
 
        /* public */
        tpm_buf_append_u16(&buf, 14);
@@ -573,6 +574,8 @@ static int tpm2_unseal(struct tpm_chip *chip,
                       u32 blob_handle)
 {
        struct tpm_buf buf;
+       u16 data_len;
+       u8 *data;
        int rc;
 
        rc = tpm_buf_init(&buf, TPM2_ST_SESSIONS, TPM2_CC_UNSEAL);
@@ -591,11 +594,13 @@ static int tpm2_unseal(struct tpm_chip *chip,
                rc = -EPERM;
 
        if (!rc) {
-               payload->key_len = be16_to_cpup(
+               data_len = be16_to_cpup(
                        (__be16 *) &buf.data[TPM_HEADER_SIZE + 4]);
+               data = &buf.data[TPM_HEADER_SIZE + 6];
 
-               memcpy(payload->key, &buf.data[TPM_HEADER_SIZE + 6],
-                      payload->key_len);
+               memcpy(payload->key, data, data_len - 1);
+               payload->key_len = data_len - 1;
+               payload->migratable = data[data_len - 1];
        }
 
        tpm_buf_destroy(&buf);
-- 
2.7.3

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to