* [PATCH 1/3] tpm: fix: keep auth session intact after unseal operation
2016-02-15 1:41 [PATCH 0/3] Remaining fixes for v4.5 (post tpmdd-next-20160120) Jarkko Sakkinen
@ 2016-02-15 1:41 ` Jarkko Sakkinen
2016-02-15 1:41 ` [PATCH 2/3] tpm: fix: return rc when devm_add_action() fails Jarkko Sakkinen
2016-02-15 1:41 ` [PATCH 3/3] tpm_eventlog.c: fix binary_bios_measurements Jarkko Sakkinen
2 siblings, 0 replies; 4+ messages in thread
From: Jarkko Sakkinen @ 2016-02-15 1:41 UTC (permalink / raw)
To: Peter Huewe, Marcel Selhorst, David Howells
Cc: jmorris, Jarkko Sakkinen, Jason Gunthorpe,
moderated list:TPM DEVICE DRIVER, open list
The behavior of policy based unseal operation is not consistent:
* When there is an error in TPM2_Unseal operation, the session object
stays in the TPM transient memory.
* When the unseal is successful, the TPM automatically removes the
session object.
This patch sets the continueSession attribute to keep the session intact
after a successful unseal operation thus making the behavior consistent.
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Fixes: 5beb0c435b ("keys, trusted: seal with a TPM2 authorization policy")
---
drivers/char/tpm/tpm2-cmd.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/char/tpm/tpm2-cmd.c b/drivers/char/tpm/tpm2-cmd.c
index 66e04b4..b28e4da 100644
--- a/drivers/char/tpm/tpm2-cmd.c
+++ b/drivers/char/tpm/tpm2-cmd.c
@@ -20,7 +20,11 @@
#include <keys/trusted-type.h>
enum tpm2_object_attributes {
- TPM2_ATTR_USER_WITH_AUTH = BIT(6),
+ TPM2_OA_USER_WITH_AUTH = BIT(6),
+};
+
+enum tpm2_session_attributes {
+ TPM2_SA_CONTINUE_SESSION = BIT(0),
};
struct tpm2_startup_in {
@@ -489,7 +493,7 @@ int tpm2_seal_trusted(struct tpm_chip *chip,
tpm_buf_append(&buf, options->policydigest,
options->policydigest_len);
} else {
- tpm_buf_append_u32(&buf, TPM2_ATTR_USER_WITH_AUTH);
+ tpm_buf_append_u32(&buf, TPM2_OA_USER_WITH_AUTH);
tpm_buf_append_u16(&buf, 0);
}
@@ -627,7 +631,7 @@ static int tpm2_unseal(struct tpm_chip *chip,
options->policyhandle ?
options->policyhandle : TPM2_RS_PW,
NULL /* nonce */, 0,
- 0 /* session_attributes */,
+ TPM2_SA_CONTINUE_SESSION,
options->blobauth /* hmac */,
TPM_DIGEST_SIZE);
--
2.7.0
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH 2/3] tpm: fix: return rc when devm_add_action() fails
2016-02-15 1:41 [PATCH 0/3] Remaining fixes for v4.5 (post tpmdd-next-20160120) Jarkko Sakkinen
2016-02-15 1:41 ` [PATCH 1/3] tpm: fix: keep auth session intact after unseal operation Jarkko Sakkinen
@ 2016-02-15 1:41 ` Jarkko Sakkinen
2016-02-15 1:41 ` [PATCH 3/3] tpm_eventlog.c: fix binary_bios_measurements Jarkko Sakkinen
2 siblings, 0 replies; 4+ messages in thread
From: Jarkko Sakkinen @ 2016-02-15 1:41 UTC (permalink / raw)
To: Peter Huewe, Marcel Selhorst, David Howells
Cc: jmorris, Jarkko Sakkinen, Jason Gunthorpe,
moderated list:TPM DEVICE DRIVER, open list
Call put_device() and return error code if devm_add_action() fails.
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Reported-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Fixes: 8e0ee3c9faed ("tpm: fix the cleanup of struct tpm_chip")
---
drivers/char/tpm/tpm-chip.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
index 2521425..274dd01 100644
--- a/drivers/char/tpm/tpm-chip.c
+++ b/drivers/char/tpm/tpm-chip.c
@@ -88,6 +88,7 @@ struct tpm_chip *tpmm_chip_alloc(struct device *dev,
const struct tpm_class_ops *ops)
{
struct tpm_chip *chip;
+ int rc;
chip = kzalloc(sizeof(*chip), GFP_KERNEL);
if (chip == NULL)
@@ -136,7 +137,11 @@ struct tpm_chip *tpmm_chip_alloc(struct device *dev,
chip->cdev.owner = chip->pdev->driver->owner;
chip->cdev.kobj.parent = &chip->dev.kobj;
- devm_add_action(dev, (void (*)(void *)) put_device, &chip->dev);
+ rc = devm_add_action(dev, (void (*)(void *)) put_device, &chip->dev);
+ if (rc) {
+ put_device(&chip->dev);
+ return ERR_PTR(rc);
+ }
return chip;
}
--
2.7.0
^ permalink raw reply [flat|nested] 4+ messages in thread* [PATCH 3/3] tpm_eventlog.c: fix binary_bios_measurements
2016-02-15 1:41 [PATCH 0/3] Remaining fixes for v4.5 (post tpmdd-next-20160120) Jarkko Sakkinen
2016-02-15 1:41 ` [PATCH 1/3] tpm: fix: keep auth session intact after unseal operation Jarkko Sakkinen
2016-02-15 1:41 ` [PATCH 2/3] tpm: fix: return rc when devm_add_action() fails Jarkko Sakkinen
@ 2016-02-15 1:41 ` Jarkko Sakkinen
2 siblings, 0 replies; 4+ messages in thread
From: Jarkko Sakkinen @ 2016-02-15 1:41 UTC (permalink / raw)
To: Peter Huewe, Marcel Selhorst, David Howells
Cc: jmorris, Harald Hoyer, stable, Jarkko Sakkinen, Jason Gunthorpe,
moderated list:TPM DEVICE DRIVER, open list
From: Harald Hoyer <harald@redhat.com>
The commit 0cc698af36ff ("vTPM: support little endian guests") copied
the event, but without the event data, did an endian conversion on the
size and tried to output the event data from the copied version, which
has only have one byte of the data, resulting in garbage event data.
Signed-off-by: Harald Hoyer <harald@redhat.com>
Fixes: 0cc698af36ff ("vTPM: support little endian guests")
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
cc: stable@vger.kernel.org
---
drivers/char/tpm/tpm_eventlog.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/char/tpm/tpm_eventlog.c b/drivers/char/tpm/tpm_eventlog.c
index bd72fb0..27fc887 100644
--- a/drivers/char/tpm/tpm_eventlog.c
+++ b/drivers/char/tpm/tpm_eventlog.c
@@ -242,9 +242,15 @@ static int tpm_binary_bios_measurements_show(struct seq_file *m, void *v)
temp_event.event_type = do_endian_conversion(event->event_type);
temp_event.event_size = do_endian_conversion(event->event_size);
- tempPtr = (char *)&temp_event;
+ tempPtr = (char *) &temp_event;
- for (i = 0; i < sizeof(struct tcpa_event) + temp_event.event_size; i++)
+ for (i = 0; i < (sizeof(struct tcpa_event) - 1) ; i++)
+ seq_putc(m, tempPtr[i]);
+
+ tempPtr = (char *) v;
+
+ for (i = (sizeof(struct tcpa_event) - 1);
+ i < (sizeof(struct tcpa_event) + temp_event.event_size); i++)
seq_putc(m, tempPtr[i]);
return 0;
--
2.7.0
^ permalink raw reply [flat|nested] 4+ messages in thread