All of lore.kernel.org
 help / color / mirror / Atom feed
From: kgold@linux.vnet.ibm.com (Ken Goldman)
To: linux-security-module@vger.kernel.org
Subject: [PATCH v4 2/4] tpm: ignore burstcount to improve tpm_tis send() performance
Date: Fri, 20 Oct 2017 14:02:33 -0400	[thread overview]
Message-ID: <7e0b3b9c-3daa-0f44-592a-8d40d0cb8cbf@linux.vnet.ibm.com> (raw)
In-Reply-To: <5ef60315f2254b3b8bcc217a572280e5@infineon.com>

On 10/20/2017 10:42 AM, Alexander.Steffen at infineon.com wrote:
> 
> This seems to fail reliably with my SPI TPM 2.0. I get EIO when
> trying to send large amounts of data, e.g. with TPM2_Hash, and
> subsequent tests seem to take an unusual amount of time. More
> analysis probably has to wait until November, since I am going to be
> in Prague next week.

I have a guess as to the cause of the failure.  Would it be possible for 
you to test it?

1 - My guess is that EIO is coming from here:

static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
...
	/* write last byte */
	rc = tpm_tis_write8(priv, TPM_DATA_FIFO(priv->locality), buf[count]);
	if (rc < 0)
		goto out_err;

	if (wait_for_tpm_stat(chip, TPM_STS_VALID, chip->timeout_c,
				&priv->int_queue, false) < 0) {
		rc = -ETIME;
		goto out_err;
	}
	status = tpm_tis_status(chip);
	if (!itpm && (status & TPM_STS_DATA_EXPECT) != 0) {
		rc = -EIO;
		goto out_err;
	}
...

Can you verify that this is the cause.

2 - If that's the cause, I believe that there is a latent bug.  Expect 
is not guaranteed to become false immediately.  It only occurs after the 
TPM firmware has emptied the FIFO.  Thus, the tpm_tis_status() really 
should be something like "wait_for_tpm_expect_false()", with a sleep loop.

This missing wait has been in the code for a while.  If may just surface 
now because the patch causes data to be written faster, and thus it 
takes longer for the TPM to empty the FIFO and clear Expect.

It also makes sense that it would occur more often on long commands.

--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info@ http://vger.kernel.org/majordomo-info.html

WARNING: multiple messages have this Message-ID (diff)
From: Ken Goldman <kgold@linux.vnet.ibm.com>
To: Alexander.Steffen@infineon.com, linux-integrity@vger.kernel.org
Cc: linux-security-module@vger.kernel.org
Subject: Re: [PATCH v4 2/4] tpm: ignore burstcount to improve tpm_tis send() performance
Date: Fri, 20 Oct 2017 14:02:33 -0400	[thread overview]
Message-ID: <7e0b3b9c-3daa-0f44-592a-8d40d0cb8cbf@linux.vnet.ibm.com> (raw)
In-Reply-To: <5ef60315f2254b3b8bcc217a572280e5@infineon.com>

On 10/20/2017 10:42 AM, Alexander.Steffen@infineon.com wrote:
> 
> This seems to fail reliably with my SPI TPM 2.0. I get EIO when
> trying to send large amounts of data, e.g. with TPM2_Hash, and
> subsequent tests seem to take an unusual amount of time. More
> analysis probably has to wait until November, since I am going to be
> in Prague next week.

I have a guess as to the cause of the failure.  Would it be possible for 
you to test it?

1 - My guess is that EIO is coming from here:

static int tpm_tis_send_data(struct tpm_chip *chip, u8 *buf, size_t len)
...
	/* write last byte */
	rc = tpm_tis_write8(priv, TPM_DATA_FIFO(priv->locality), buf[count]);
	if (rc < 0)
		goto out_err;

	if (wait_for_tpm_stat(chip, TPM_STS_VALID, chip->timeout_c,
				&priv->int_queue, false) < 0) {
		rc = -ETIME;
		goto out_err;
	}
	status = tpm_tis_status(chip);
	if (!itpm && (status & TPM_STS_DATA_EXPECT) != 0) {
		rc = -EIO;
		goto out_err;
	}
...

Can you verify that this is the cause.

2 - If that's the cause, I believe that there is a latent bug.  Expect 
is not guaranteed to become false immediately.  It only occurs after the 
TPM firmware has emptied the FIFO.  Thus, the tpm_tis_status() really 
should be something like "wait_for_tpm_expect_false()", with a sleep loop.

This missing wait has been in the code for a while.  If may just surface 
now because the patch causes data to be written faster, and thus it 
takes longer for the TPM to empty the FIFO and clear Expect.

It also makes sense that it would occur more often on long commands.

  reply	other threads:[~2017-10-20 18:02 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-17 20:32 [PATCH v4 0/4] additional TPM performance improvements Nayna Jain
2017-10-17 20:32 ` Nayna Jain
2017-10-17 20:32 ` [PATCH v4 1/4] tpm: move wait_for_tpm_stat() to respective driver files Nayna Jain
2017-10-17 20:32   ` Nayna Jain
2017-10-19 14:21   ` Jarkko Sakkinen
2017-10-19 14:21     ` Jarkko Sakkinen
2017-10-19 17:00     ` Alexander.Steffen
2017-10-19 17:00       ` Alexander.Steffen at infineon.com
2017-10-20  8:56       ` Jarkko Sakkinen
2017-10-20  8:56         ` Jarkko Sakkinen
2017-10-23 13:32         ` Nayna Jain
2017-10-23 13:32           ` Nayna Jain
2017-10-23 13:32           ` Nayna Jain
2017-10-24 13:45           ` Jarkko Sakkinen
2017-10-24 13:45             ` Jarkko Sakkinen
2017-10-17 20:32 ` [PATCH v4 2/4] tpm: ignore burstcount to improve tpm_tis send() performance Nayna Jain
2017-10-17 20:32   ` Nayna Jain
2017-10-18 15:25   ` Jarkko Sakkinen
2017-10-18 15:25     ` Jarkko Sakkinen
2017-10-19 14:23   ` Jarkko Sakkinen
2017-10-19 14:23     ` Jarkko Sakkinen
2017-10-20 14:42   ` Alexander.Steffen
2017-10-20 14:42     ` Alexander.Steffen at infineon.com
2017-10-20 18:02     ` Ken Goldman [this message]
2017-10-20 18:02       ` Ken Goldman
2017-10-23  2:57     ` Jarkko Sakkinen
2017-10-23  2:57       ` Jarkko Sakkinen
2017-11-07 18:29     ` Nayna Jain
2017-11-07 18:29       ` Nayna Jain
2017-11-07 18:29       ` Nayna Jain
2017-11-08 11:32       ` Alexander.Steffen
2017-11-08 11:32         ` Alexander.Steffen at infineon.com
2017-11-16 14:34       ` Alexander.Steffen
2017-11-16 14:34         ` Alexander.Steffen at infineon.com
2017-11-22  6:52       ` Alexander.Steffen
2017-11-22  6:52         ` Alexander.Steffen at infineon.com
2017-11-23 14:47         ` Nayna Jain
2017-11-23 14:47           ` Nayna Jain
2017-11-23 16:19           ` Alexander.Steffen
2017-11-23 16:19             ` Alexander.Steffen at infineon.com
2017-11-26 15:22           ` Jarkko Sakkinen
2017-11-26 15:22             ` Jarkko Sakkinen
2017-11-26 16:37             ` Mimi Zohar
2017-11-26 16:37               ` Mimi Zohar
2017-11-27  7:08               ` Leendert van Doorn
2017-11-27  7:08                 ` Leendert van Doorn
2017-11-27  7:08                 ` Leendert van Doorn
2017-11-27 13:22                 ` Mimi Zohar
2017-11-27 13:22                   ` Mimi Zohar
2017-11-27 13:22                   ` Mimi Zohar
2017-11-28 20:19                 ` Jarkko Sakkinen
2017-11-28 20:19                   ` Jarkko Sakkinen
2017-11-28 20:19                   ` Jarkko Sakkinen
2017-10-17 20:32 ` [PATCH v4 3/4] tpm: reduce tpm polling delay in tpm_tis_core Nayna Jain
2017-10-17 20:32   ` Nayna Jain
2017-10-18 15:24   ` Jarkko Sakkinen
2017-10-18 15:24     ` Jarkko Sakkinen
2017-10-19 14:22     ` Jarkko Sakkinen
2017-10-19 14:22       ` Jarkko Sakkinen
2017-10-17 20:32 ` [PATCH v4 4/4] tpm: use tpm_msleep() value as max delay Nayna Jain
2017-10-17 20:32   ` Nayna Jain
2017-10-19 14:22   ` Jarkko Sakkinen
2017-10-19 14:22     ` Jarkko Sakkinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7e0b3b9c-3daa-0f44-592a-8d40d0cb8cbf@linux.vnet.ibm.com \
    --to=kgold@linux.vnet.ibm.com \
    --cc=linux-security-module@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.