All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ken Goldman <kgold@linux.vnet.ibm.com>
To: Javier Martinez Canillas <javierm@redhat.com>
Cc: linux-integrity@vger.kernel.org
Subject: Re: [RFC PATCH] tpm: don't return -EINVAL if TPM command validation fails
Date: Fri, 8 Dec 2017 14:51:00 -0500	[thread overview]
Message-ID: <deaa0567-4c5f-d4bd-3f27-81b8af39c681@linux.vnet.ibm.com> (raw)
In-Reply-To: <20171117100724.19257-1-javierm@redhat.com>

On 11/17/2017 5:07 AM, Javier Martinez Canillas wrote:
> According to the TPM Library Specification, a TPM device must do a command
> header validation before processing and return a TPM_RC_COMMAND_CODE code
> if the command is not implemented and the TPM_RC_COMMAND_SIZE code if the
> command buffer size is not correct.
> 
> So user-space will expect to handle these response codes as errors, but if
> the in-kernel resource manager is used (/dev/tpmrm?) then an -EINVAL errno
> code is returned instead if the command isn't implemented or the buffer
> size isn't correct. This confuses user-space since doesn't expect that.
> 
> This is also not consistent with the behavior when not using TPM spaces
> and accessing the TPM directly (/dev/tpm?), in this case the command is
> is sent to the TPM anyways and user-space can get an error from the TPM.
> 
> Instead of returning an -EINVAL errno code when the tpm_validate_command()
> function fails, allow the command to be sent to the TPM but just don't do
> any TPM space management. That way the TPM can report back a proper error
> and the behavior be consistent when using either /dev/tpm? or /dev/tpmrm?.

At a basic level, I agree with Javier.

If the device driver cannot send the command to the TPM (e.g., if the 
size of the transmit buffer doesn't match commandSize), then the driver 
should return an error.

Beyond those, IMHO the driver should pass through well formed commands 
and return the TPM response to the user level applications.

Some reasons:

- It's what the application developer expects.

- The behavior should be (as much as possible) the same, whether one is 
using /dev/tpmrm0, /dev/tpm0, or the TPM simulator.

- The application developer can use the TPM spec (or set a breakpoint in 
the simulator) to debug.  -EINVAL requires the application developer to 
dig into kernel code.

It also seems easier for the device driver, and so potentially will 
require less maintenance.

      parent reply	other threads:[~2017-12-08 19:51 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-17 10:07 [RFC PATCH] tpm: don't return -EINVAL if TPM command validation fails Javier Martinez Canillas
2017-11-17 16:57 ` Jason Gunthorpe
2017-11-17 17:56   ` Javier Martinez Canillas
2017-11-17 17:58     ` Jason Gunthorpe
2017-11-17 18:10       ` Javier Martinez Canillas
2017-11-17 18:17         ` Jason Gunthorpe
2017-11-17 18:34           ` Javier Martinez Canillas
2017-11-17 19:14             ` Roberts, William C
2017-11-17 19:14               ` Roberts, William C
2017-11-17 23:55               ` Jason Gunthorpe
2017-11-17 23:55                 ` Jason Gunthorpe
2017-11-18  0:53                 ` Javier Martinez Canillas
2017-11-18  0:53                   ` Javier Martinez Canillas
2017-11-19 15:27                   ` Jason Gunthorpe
2017-11-20  9:26                     ` Javier Martinez Canillas
2017-11-20 16:14                       ` Roberts, William C
2017-11-20 18:02                         ` Jason Gunthorpe
2017-11-20 18:04                       ` Jason Gunthorpe
2017-12-08 20:03           ` Ken Goldman
2017-12-08 20:18             ` Jason Gunthorpe
2017-12-08 19:58   ` Ken Goldman
2017-11-20 23:15 ` Jarkko Sakkinen
2017-11-21  9:07   ` Javier Martinez Canillas
2017-11-21  9:27     ` Javier Martinez Canillas
2017-11-21 12:30     ` Jarkko Sakkinen
2017-11-21 12:49       ` Javier Martinez Canillas
     [not found]         ` <DB638850A6A2434A93ECADDA0BC838905F09D5D9@ORSMSX103.amr.corp.intel.com>
2017-11-22 17:16           ` FW: " flihp
2017-11-22 19:25             ` Javier Martinez Canillas
2017-11-26 14:21               ` Jarkko Sakkinen
2017-11-29 11:26                 ` Javier Martinez Canillas
2017-11-22 20:13             ` Jason Gunthorpe
2017-12-08 20:16               ` Ken Goldman
2017-12-08 20:20                 ` Jason Gunthorpe
2017-11-26 14:18             ` Jarkko Sakkinen
2017-11-26 23:23               ` Javier Martinez Canillas
2017-11-26 14:14         ` Jarkko Sakkinen
2017-11-21 20:29       ` Roberts, William C
2017-11-22  9:26         ` Javier Martinez Canillas
2017-11-22  9:26           ` Javier Martinez Canillas
2017-11-26 14:12           ` Jarkko Sakkinen
2017-11-26 23:19             ` Javier Martinez Canillas
2017-12-08 20:11           ` Ken Goldman
2017-11-26 14:06         ` Jarkko Sakkinen
2017-12-08 20:20           ` Ken Goldman
2017-12-08 21:34             ` Javier Martinez Canillas
2017-12-17 16:47               ` Jarkko Sakkinen
2017-12-17 18:18                 ` Javier Martinez Canillas
2017-12-22 17:38                 ` Ken Goldman
2017-12-14 13:11             ` Jarkko Sakkinen
2017-12-08 19:51 ` Ken Goldman [this message]

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=deaa0567-4c5f-d4bd-3f27-81b8af39c681@linux.vnet.ibm.com \
    --to=kgold@linux.vnet.ibm.com \
    --cc=javierm@redhat.com \
    --cc=linux-integrity@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.