All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] tpm_tis: Use timeouts returned from TPM
@ 2011-01-11 19:37 Stefan Berger
  2011-01-27 22:44 ` Guillaume Chazarain
  0 siblings, 1 reply; 4+ messages in thread
From: Stefan Berger @ 2011-01-11 19:37 UTC (permalink / raw)
  To: linux-kernel, srajiv; +Cc: tpmdd-devel

The current TPM TIS driver in git discards the timeout values returned
from the TPM. The check of the response packet needs to consider that
the return_code field is 0 on success and the size of the expected
packet is equivalent to the header size + u32 length indicator for the
TPM_GetCapability() result + 3 timeout indicators of type u32.

I am also adding a sysfs entry 'timeouts' showing the timeouts that are
being used.


Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>

diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c
index 1f46f1c..ef9ca1e 100644
--- a/drivers/char/tpm/tpm.c
+++ b/drivers/char/tpm/tpm.c
@@ -575,9 +575,11 @@ duration:
 	if (rc)
 		return;
 
-	if (be32_to_cpu(tpm_cmd.header.out.return_code)
-	    != 3 * sizeof(u32))
+	if (be32_to_cpu(tpm_cmd.header.out.return_code) != 0 ||
+	    be32_to_cpu(tpm_cmd.header.out.length)
+	    != sizeof(tpm_cmd.header.out) + sizeof(u32) + 3 * sizeof(u32))
 		return;
+
 	duration_cap = &tpm_cmd.params.getcap_out.cap.duration;
 	chip->vendor.duration[TPM_SHORT] =
 	    usecs_to_jiffies(be32_to_cpu(duration_cap->tpm_short));
@@ -937,6 +939,18 @@ ssize_t tpm_show_caps_1_2(struct device * dev,
 }
 EXPORT_SYMBOL_GPL(tpm_show_caps_1_2);
 
+ssize_t tpm_show_timeouts(struct device *dev, struct device_attribute *attr,
+			  char *buf)
+{
+	struct tpm_chip *chip = dev_get_drvdata(dev);
+
+	return sprintf(buf, "%d %d %d\n",
+	               jiffies_to_usecs(chip->vendor.duration[TPM_SHORT]),
+	               jiffies_to_usecs(chip->vendor.duration[TPM_MEDIUM]),
+	               jiffies_to_usecs(chip->vendor.duration[TPM_LONG]));
+}
+EXPORT_SYMBOL_GPL(tpm_show_timeouts);
+
 ssize_t tpm_store_cancel(struct device *dev, struct device_attribute *attr,
 			const char *buf, size_t count)
 {
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index 72ddb03..d84ff77 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -56,6 +56,8 @@ extern ssize_t tpm_show_owned(struct device *, struct device_attribute *attr,
 				char *);
 extern ssize_t tpm_show_temp_deactivated(struct device *,
 					 struct device_attribute *attr, char *);
+extern ssize_t tpm_show_timeouts(struct device *,
+				 struct device_attribute *attr, char *);
 
 struct tpm_chip;
 
diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c
index c17a305..3e1f2bb 100644
--- a/drivers/char/tpm/tpm_tis.c
+++ b/drivers/char/tpm/tpm_tis.c
@@ -376,6 +376,7 @@ static DEVICE_ATTR(temp_deactivated, S_IRUGO, tpm_show_temp_deactivated,
 		   NULL);
 static DEVICE_ATTR(caps, S_IRUGO, tpm_show_caps_1_2, NULL);
 static DEVICE_ATTR(cancel, S_IWUSR | S_IWGRP, NULL, tpm_store_cancel);
+static DEVICE_ATTR(timeouts, S_IRUGO, tpm_show_timeouts, NULL);
 
 static struct attribute *tis_attrs[] = {
 	&dev_attr_pubek.attr,
@@ -385,7 +386,8 @@ static struct attribute *tis_attrs[] = {
 	&dev_attr_owned.attr,
 	&dev_attr_temp_deactivated.attr,
 	&dev_attr_caps.attr,
-	&dev_attr_cancel.attr, NULL,
+	&dev_attr_cancel.attr,
+	&dev_attr_timeouts.attr, NULL,
 };
 
 static struct attribute_group tis_attr_grp = {


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] tpm_tis: Use timeouts returned from TPM
  2011-01-11 19:37 [PATCH] tpm_tis: Use timeouts returned from TPM Stefan Berger
@ 2011-01-27 22:44 ` Guillaume Chazarain
  2011-02-08 21:45   ` Guillaume Chazarain
  0 siblings, 1 reply; 4+ messages in thread
From: Guillaume Chazarain @ 2011-01-27 22:44 UTC (permalink / raw)
  To: Stefan Berger; +Cc: linux-kernel, srajiv, tpmdd-devel

On Tue, Jan 11, 2011 at 8:37 PM, Stefan Berger
<stefanb@linux.vnet.ibm.com> wrote:
> The current TPM TIS driver in git discards the timeout values returned
> from the TPM.

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=c4ff4b829ef9e6353c0b133b7adb564a68054979
broke the TPM for me on a thinkpad T410. When using the TPM, dmesg
complains:

[   65.728310] tpm_tis 00:0b: Operation Timed out
[   67.651450] tpm_tis 00:0b: Operation Timed out
[   69.669421] tpm_tis 00:0b: Operation Timed out

This patch fixes it, so consider it:

Tested-by: Guillaume Chazarain <guichaz@gmail.com>

Thanks!

-- 
Guillaume

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] tpm_tis: Use timeouts returned from TPM
  2011-01-27 22:44 ` Guillaume Chazarain
@ 2011-02-08 21:45   ` Guillaume Chazarain
  2011-02-08 22:06     ` Rajiv Andrade
  0 siblings, 1 reply; 4+ messages in thread
From: Guillaume Chazarain @ 2011-02-08 21:45 UTC (permalink / raw)
  To: Stefan Berger, James Morris; +Cc: linux-kernel, srajiv, tpmdd-devel

[ + jmorris ]

On Thu, Jan 27, 2011 at 11:44 PM, Guillaume Chazarain <guichaz@gmail.com> wrote:
> On Tue, Jan 11, 2011 at 8:37 PM, Stefan Berger
> <stefanb@linux.vnet.ibm.com> wrote:
>> The current TPM TIS driver in git discards the timeout values returned
>> from the TPM.
>
> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=c4ff4b829ef9e6353c0b133b7adb564a68054979
> broke the TPM for me on a thinkpad T410. When using the TPM, dmesg
> complains:
>
> [   65.728310] tpm_tis 00:0b: Operation Timed out
> [   67.651450] tpm_tis 00:0b: Operation Timed out
> [   69.669421] tpm_tis 00:0b: Operation Timed out
>
> This patch fixes it, so consider it:
>
> Tested-by: Guillaume Chazarain <guichaz@gmail.com>

This patch (https://lkml.org/lkml/2011/1/11/341) fixes a regression
introduced in 2.6.38-rc3, any chance of having it merged?

Thanks.

-- 
Guillaume

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] tpm_tis: Use timeouts returned from TPM
  2011-02-08 21:45   ` Guillaume Chazarain
@ 2011-02-08 22:06     ` Rajiv Andrade
  0 siblings, 0 replies; 4+ messages in thread
From: Rajiv Andrade @ 2011-02-08 22:06 UTC (permalink / raw)
  To: Guillaume Chazarain
  Cc: Stefan Berger, James Morris, linux-kernel, tpmdd-devel

On 02/08/2011 07:45 PM, Guillaume Chazarain wrote:
> [ + jmorris ]
>
> On Thu, Jan 27, 2011 at 11:44 PM, Guillaume Chazarain<guichaz@gmail.com>  wrote:
>> On Tue, Jan 11, 2011 at 8:37 PM, Stefan Berger
>> <stefanb@linux.vnet.ibm.com>  wrote:
>>> The current TPM TIS driver in git discards the timeout values returned
>>> from the TPM.
>> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=c4ff4b829ef9e6353c0b133b7adb564a68054979
>> broke the TPM for me on a thinkpad T410. When using the TPM, dmesg
>> complains:
>>
>> [   65.728310] tpm_tis 00:0b: Operation Timed out
>> [   67.651450] tpm_tis 00:0b: Operation Timed out
>> [   69.669421] tpm_tis 00:0b: Operation Timed out
>>
>> This patch fixes it, so consider it:
>>
>> Tested-by: Guillaume Chazarain<guichaz@gmail.com>
> This patch (https://lkml.org/lkml/2011/1/11/341) fixes a regression
> introduced in 2.6.38-rc3, any chance of having it merged?
>
> Thanks.

This patch solves a bug existent before the commit that made into 
2.6.38-rc3. Prior to such commit, the device driver was using default 
values that were big enough to allow TPM commands to succeed, but that 
stalled the kernel for too long during boot (2 minutes for each command 
sent) when buggy TPMs don't respond.

I'll apply this patch to my tree, and ask James to pull from it.

Rajiv




^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-02-08 22:06 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-11 19:37 [PATCH] tpm_tis: Use timeouts returned from TPM Stefan Berger
2011-01-27 22:44 ` Guillaume Chazarain
2011-02-08 21:45   ` Guillaume Chazarain
2011-02-08 22:06     ` Rajiv Andrade

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.