All of lore.kernel.org
 help / color / mirror / Atom feed
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 10/19] tpm: add TPM2_SelfTest command support
Date: Tue, 24 Apr 2018 14:53:58 +0200	[thread overview]
Message-ID: <20180424145358.5f621d26@xps13> (raw)
In-Reply-To: <CAPnjgZ3Tx8s_yMYZvucHKPKufk6sRmbwRXzTNWMTkpdzdFXo2A@mail.gmail.com>

Hi Simon,

I am back on that topic, let me answer some of your questions before
addressing them in a next version.

On Fri, 30 Mar 2018 06:42:25 +0800, Simon Glass
<sjg@chromium.org> wrote:

> Hi Miquel,
> 
> On 29 March 2018 at 15:43, Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> > Add support for the TPM2_Selftest command.
> >
> > Change the command file and the help accordingly.
> >
> > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > ---
> >  include/tpm.h |  9 +++++++--
> >  lib/tpm.c     | 36 ++++++++++++++++++++++++++++--------
> >  2 files changed, 35 insertions(+), 10 deletions(-)
> >
> > diff --git a/include/tpm.h b/include/tpm.h
> > index ba71bac885..38d7cb899d 100644
> > --- a/include/tpm.h
> > +++ b/include/tpm.h
> > @@ -31,6 +31,11 @@ enum tpm2_structures {
> >         TPM2_ST_SESSIONS        = 0x8002,
> >  };
> >
> > +enum tpm2_yes_no {
> > +       TPMI_YES                = 1,
> > +       TPMI_NO                 = 0,
> > +};
> > +
> >  enum tpm_startup_type {
> >         TPM_ST_CLEAR            = 0x0001,
> >         TPM_ST_STATE            = 0x0002,
> > @@ -476,14 +481,14 @@ int tpm_startup(enum tpm_startup_type mode);
> >   *
> >   * @return return code of the operation
> >   */
> > -uint32_t tpm_self_test_full(void);
> > +int tpm_self_test_full(void);
> >
> >  /**
> >   * Issue a TPM_ContinueSelfTest command.
> >   *
> >   * @return return code of the operation
> >   */
> > -uint32_t tpm_continue_self_test(void);
> > +int tpm_continue_self_test(void);
> >
> >  /**
> >   * Issue a TPM_NV_DefineSpace command.  The implementation is limited
> > diff --git a/lib/tpm.c b/lib/tpm.c
> > index 0c57ef8dc7..3cc2888267 100644
> > --- a/lib/tpm.c
> > +++ b/lib/tpm.c
> > @@ -341,20 +341,40 @@ int tpm_startup(enum tpm_startup_type mode)
> >         return 0;
> >  }
> >
> > -uint32_t tpm_self_test_full(void)
> > +int tpm_self_test_full(void)
> >  {
> > -       const uint8_t command[10] = {
> > -               0x0, 0xc1, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0x50,
> > +       const u8 command_v1[10] = {
> > +               U16_TO_ARRAY(0xc1),  
> 
> Here I can see some benefit to your macros because the data is better
> structured. But why not use the pack_byte_string() function?

TPM buffers (1.0 and 2.0) are, most of the time, filled with data of
known length (1, 2 or 4 bytes). You can see that most of the time,
TPMv1 simple commands were just filling a buffer of bytes. I don't like
very much the fact that the user should split the data in byte array so
I introduced these macros that do it for me in a cleaner way. When you
get an hexadecimal value (like it was the case before) it is easy to
split a "0xabcd" in "0xab, 0xcd", but I prefer to use variables or
simply defines sometimes and writing "TPM2_ST_NO_SESSIONS" as
"TPM2_ST_NO_SESSIONS >> 8, TPM2_ST_NO_SESSIONS & 0xFF" is not readable
at all.

Now why did I not use the existing pack_byte_string() function. Well,
at first I did and realized it was a pain to have a decent
incrementation of the offsets, mostly when commands tend to be longer
and longer. Having such lists of offset/variable/length while you could
define them statically on the stack -which also saves some computing
time- is quickly annoying and hard to review. From my point of view this
function is a real asset when it comes to 'unknown'/'big' variable
length (like a password, an hmac, an user input, etc) but should be
avoided when not necessary: typically to fill a buffer with defined
values.

I am of course very open on the topic, this is my feeling but I don't
have that much experience and would carefully listen to yours.

Thank you,
Miquèl

> 
> > +               U32_TO_ARRAY(10),
> > +               U32_TO_ARRAY(0x50),
> >         };
> > -       return tpm_sendrecv_command(command, NULL, NULL);
> > +       const u8 command_v2[12] = {
> > +               U16_TO_ARRAY(TPM2_ST_NO_SESSIONS),
> > +               U32_TO_ARRAY(11),
> > +               U32_TO_ARRAY(TPM2_CC_SELF_TEST),
> > +               TPMI_YES,
> > +       };
> > +
> > +       return tpm_sendrecv_command(is_tpmv2 ? command_v2 : command_v1, NULL,
> > +                                   NULL);
> >  }
> >

-- 
Miquel Raynal, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

  reply	other threads:[~2018-04-24 12:53 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-29  7:43 [U-Boot] [PATCH v2 00/19] Introduce SPI TPM v2.0 support Miquel Raynal
2018-03-29  7:43 ` [U-Boot] [PATCH v2 01/19] tpm: add Revision ID field in the chip structure Miquel Raynal
2018-03-29 22:41   ` Simon Glass
2018-03-29  7:43 ` [U-Boot] [PATCH v2 02/19] tpm: rename tpm_tis_infineon in tpm_tis_infineon_i2c Miquel Raynal
2018-03-29 22:41   ` Simon Glass
2018-03-29  7:43 ` [U-Boot] [PATCH v2 03/19] tpm: add support for TPMv2 SPI modules Miquel Raynal
2018-03-29 22:41   ` Simon Glass
2018-04-24 13:02     ` Miquel Raynal
2018-03-29  7:43 ` [U-Boot] [PATCH v2 04/19] tpm: fix indentation in command list before adding more Miquel Raynal
2018-03-29 22:41   ` Simon Glass
2018-03-29  7:43 ` [U-Boot] [PATCH v2 05/19] tpm: prepare support for TPMv2 commands Miquel Raynal
2018-03-29 22:42   ` Simon Glass
2018-03-29  7:43 ` [U-Boot] [PATCH v2 06/19] tpm: add macros " Miquel Raynal
2018-03-29 22:42   ` Simon Glass
2018-03-29  7:43 ` [U-Boot] [PATCH v2 07/19] tpm: add possible traces to analyze buffers returned by the TPM Miquel Raynal
2018-03-29 22:42   ` Simon Glass
2018-04-28 12:27     ` Miquel Raynal
2018-03-29  7:43 ` [U-Boot] [PATCH v2 08/19] tpm: handle different buffer sizes Miquel Raynal
2018-03-29 22:42   ` Simon Glass
2018-03-29  7:43 ` [U-Boot] [PATCH v2 09/19] tpm: add TPM2_Startup command support Miquel Raynal
2018-03-29 22:42   ` Simon Glass
2018-04-27 13:45     ` Miquel Raynal
2018-03-29  7:43 ` [U-Boot] [PATCH v2 10/19] tpm: add TPM2_SelfTest " Miquel Raynal
2018-03-29 22:42   ` Simon Glass
2018-04-24 12:53     ` Miquel Raynal [this message]
2018-04-26 14:40       ` Simon Glass
2018-04-28 13:10         ` Miquel Raynal
2018-03-29  7:43 ` [U-Boot] [PATCH v2 11/19] tpm: add TPM2_Clear " Miquel Raynal
2018-03-29 22:42   ` Simon Glass
2018-04-24 13:17     ` Miquel Raynal
2018-04-26 14:40       ` Simon Glass
2018-04-27 13:39         ` Miquel Raynal
2018-05-03 19:01           ` Simon Glass
2018-03-29  7:43 ` [U-Boot] [PATCH v2 12/19] tpm: rename the _extend() function to be _pcr_event() Miquel Raynal
2018-03-29  9:44   ` Reinhard Pfau
2018-03-29  9:46     ` Miquel Raynal
2018-03-29  7:43 ` [U-Boot] [PATCH v2 13/19] tpm: add TPM2_PCR_Extend command support Miquel Raynal
2018-03-29  7:43 ` [U-Boot] [PATCH v2 14/19] tpm: add TPM2_PCR_Read " Miquel Raynal
2018-03-29  7:43 ` [U-Boot] [PATCH v2 15/19] tpm: add TPM2_GetCapability " Miquel Raynal
2018-03-29  7:43 ` [U-Boot] [PATCH v2 16/19] tpm: add dictionary attack mitigation commands support Miquel Raynal
2018-03-29  7:43 ` [U-Boot] [PATCH v2 17/19] tpm: add TPM2_HierarchyChangeAuth command support Miquel Raynal
2018-03-29  7:44 ` [U-Boot] [PATCH v2 18/19] tpm: add PCR authentication commands support Miquel Raynal
2018-03-29 22:42   ` Simon Glass
2018-03-29  7:44 ` [U-Boot] [PATCH v2 19/19] test/py: add TPMv2.0 test suite Miquel Raynal

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=20180424145358.5f621d26@xps13 \
    --to=miquel.raynal@bootlin.com \
    --cc=u-boot@lists.denx.de \
    /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.