All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
To: Stefan Berger <stefanb@linux.ibm.com>
Cc: linux-integrity@vger.kernel.org,
	linux-security-module@vger.kernel.org,
	James Bottomley <James.Bottomley@HansenPartnership.com>,
	Tomas Winkler <tomas.winkler@intel.com>,
	Tadeusz Struk <tadeusz.struk@intel.com>,
	Stefan Berger <stefanb@linux.vnet.ibm.com>,
	Nayna Jain <nayna@linux.ibm.com>, Peter Huewe <peterhuewe@gmx.de>,
	Jason Gunthorpe <jgg@ziepe.ca>, Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v5 11/17] tpm: move TPM space code out of tpm_transmit()
Date: Thu, 8 Nov 2018 20:58:32 +0200	[thread overview]
Message-ID: <20181108185832.GC20608@linux.intel.com> (raw)
In-Reply-To: <23545a3e-9792-3a22-97eb-9744079b9ea4@linux.ibm.com>

On Thu, Nov 08, 2018 at 10:16:54AM -0500, Stefan Berger wrote:
> On 11/8/18 9:15 AM, Jarkko Sakkinen wrote:
> > Prepare and commit TPM space before and after calling tpm_transmit()
> > instead of doing that inside tpm_transmit(). After this change we can
> > remove TPM_TRANSMIT_NESTED flag from tpm2_prepare_space() and
> > tpm2_commit_space() and replace it with TPM_TRANSMIT_UNLOCKED.
> > 
> > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> > ---
> >   drivers/char/tpm/tpm-dev-common.c | 30 ++++++++++++++++++++++++++----
> >   drivers/char/tpm/tpm-interface.c  | 29 +++--------------------------
> >   drivers/char/tpm/tpm2-space.c     | 14 +++++++-------
> >   3 files changed, 36 insertions(+), 37 deletions(-)
> > 
> > diff --git a/drivers/char/tpm/tpm-dev-common.c b/drivers/char/tpm/tpm-dev-common.c
> > index cbb0ee30b511..40c1cb09ebd2 100644
> > --- a/drivers/char/tpm/tpm-dev-common.c
> > +++ b/drivers/char/tpm/tpm-dev-common.c
> > @@ -30,13 +30,35 @@ static DEFINE_MUTEX(tpm_dev_wq_lock);
> >   static ssize_t tpm_dev_transmit(struct tpm_chip *chip, struct tpm_space *space,
> >   				u8 *buf, size_t bufsiz)
> >   {
> > -	ssize_t ret;
> > +	struct tpm_header *header = (void *)buf;
> > +	ssize_t ret, len;
> > 
> >   	mutex_lock(&chip->tpm_mutex);
> > -	ret = tpm_transmit(chip, space, buf, bufsiz, TPM_TRANSMIT_UNLOCKED);
> > -	mutex_unlock(&chip->tpm_mutex);
> > +	ret = tpm2_prepare_space(chip, space, buf, bufsiz);
> > +	/* If the command is not implemented by the TPM, synthesize a
> > +	 * response with a TPM2_RC_COMMAND_CODE return for user-space.
> > +	 */
> > +	if (ret == -EOPNOTSUPP) {
> > +		header->length = cpu_to_be32(sizeof(*header));
> > +		header->tag = cpu_to_be16(TPM2_ST_NO_SESSIONS);
> > +		header->return_code = cpu_to_be32(TPM2_RC_COMMAND_CODE |
> > +						  TSS2_RESMGR_TPM_RC_LAYER);
> > +		ret = sizeof(*header);
> > +	}
> > +	if (ret)
> > +		goto out_lock;
> > 
> > -	return ret;
> > +	len = tpm_transmit(chip, space, buf, bufsiz, TPM_TRANSMIT_UNLOCKED);
> > +	if (len < 0)
> > +		ret = len;
> > +
> > +	if (ret)
> > +		tpm2_flush_space(chip);
> > +	else
> > +		ret = tpm2_commit_space(chip, space, buf, &len);
> > +out_lock:
> > +	mutex_unlock(&chip->tpm_mutex);
> > +	return ret ? ret : len;
> >   }
> > 
> >   static void tpm_dev_async_work(struct work_struct *work)
> > diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
> > index a6ffd0960ae5..7bec03e46043 100644
> > --- a/drivers/char/tpm/tpm-interface.c
> > +++ b/drivers/char/tpm/tpm-interface.c
> > @@ -147,27 +147,12 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip,
> >   		return -E2BIG;
> >   	}
> > 
> > -	rc = tpm2_prepare_space(chip, space, buf, bufsiz);
> > -	/*
> > -	 * If the command is not implemented by the TPM, synthesize a
> > -	 * response with a TPM2_RC_COMMAND_CODE return for user-space.
> > -	 */
> > -	if (rc == -EOPNOTSUPP) {
> > -		header->length = cpu_to_be32(sizeof(*header));
> > -		header->tag = cpu_to_be16(TPM2_ST_NO_SESSIONS);
> > -		header->return_code = cpu_to_be32(TPM2_RC_COMMAND_CODE |
> > -						  TSS2_RESMGR_TPM_RC_LAYER);
> > -		return sizeof(*header);
> > -	}
> > -	if (rc)
> > -		return rc;
> > -
> >   	rc = chip->ops->send(chip, buf, count);
> >   	if (rc < 0) {
> >   		if (rc != -EPIPE)
> >   			dev_err(&chip->dev,
> >   				"%s: tpm_send: error %d\n", __func__, rc);
> > -		goto out_space;
> > +		return rc;
> >   	}
> > 
> >   	if (chip->flags & TPM_CHIP_FLAG_IRQ)
> > @@ -182,8 +167,7 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip,
> > 
> >   		if (chip->ops->req_canceled(chip, status)) {
> >   			dev_err(&chip->dev, "Operation Canceled\n");
> > -			rc = -ECANCELED;
> > -			goto out_space;
> > +			return -ECANCELED;
> >   		}
> > 
> >   		tpm_msleep(TPM_TIMEOUT_POLL);
> > @@ -192,8 +176,7 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip,
> > 
> >   	chip->ops->cancel(chip);
> >   	dev_err(&chip->dev, "Operation Timed out\n");
> > -	rc = -ETIME;
> > -	goto out_space;
> > +	return -ETIME;
> > 
> >   out_recv:
> >   	len = chip->ops->recv(chip, buf, bufsiz);
> > @@ -203,12 +186,6 @@ static ssize_t tpm_try_transmit(struct tpm_chip *chip,
> >   	} else if (len < TPM_HEADER_SIZE || len != be32_to_cpu(header->length))
> >   		rc = -EFAULT;
> > 
> > -out_space:
> > -	if (rc)
> > -		tpm2_flush_space(chip);
> > -	else
> > -		rc = tpm2_commit_space(chip, space, buf, &len);
> > -
> >   	return rc ? rc : len;
> >   }
> > 
> > diff --git a/drivers/char/tpm/tpm2-space.c b/drivers/char/tpm/tpm2-space.c
> > index f35ac941c3a4..9c009db15f88 100644
> > --- a/drivers/char/tpm/tpm2-space.c
> > +++ b/drivers/char/tpm/tpm2-space.c
> > @@ -39,7 +39,7 @@ static void tpm2_flush_sessions(struct tpm_chip *chip, struct tpm_space *space)
> >   	for (i = 0; i < ARRAY_SIZE(space->session_tbl); i++) {
> >   		if (space->session_tbl[i])
> >   			tpm2_flush_context_cmd(chip, space->session_tbl[i],
> > -					       TPM_TRANSMIT_NESTED);
> > +					       TPM_TRANSMIT_UNLOCKED);
> >   	}
> >   }
> > 
> > @@ -84,7 +84,7 @@ static int tpm2_load_context(struct tpm_chip *chip, u8 *buf,
> >   	tpm_buf_append(&tbuf, &buf[*offset], body_size);
> > 
> >   	rc = tpm_transmit_cmd(chip, NULL, &tbuf, 4,
> > -			      TPM_TRANSMIT_NESTED, NULL);
> > +			      TPM_TRANSMIT_UNLOCKED, NULL);
> >   	if (rc < 0) {
> >   		dev_warn(&chip->dev, "%s: failed with a system error %d\n",
> >   			 __func__, rc);
> > @@ -133,7 +133,7 @@ static int tpm2_save_context(struct tpm_chip *chip, u32 handle, u8 *buf,
> >   	tpm_buf_append_u32(&tbuf, handle);
> > 
> >   	rc = tpm_transmit_cmd(chip, NULL, &tbuf, 0,
> > -			      TPM_TRANSMIT_NESTED, NULL);
> > +			      TPM_TRANSMIT_UNLOCKED, NULL);
> >   	if (rc < 0) {
> >   		dev_warn(&chip->dev, "%s: failed with a system error %d\n",
> >   			 __func__, rc);
> > @@ -170,7 +170,7 @@ void tpm2_flush_space(struct tpm_chip *chip)
> >   	for (i = 0; i < ARRAY_SIZE(space->context_tbl); i++)
> >   		if (space->context_tbl[i] && ~space->context_tbl[i])
> >   			tpm2_flush_context_cmd(chip, space->context_tbl[i],
> > -					       TPM_TRANSMIT_NESTED);
> > +					       TPM_TRANSMIT_UNLOCKED);
> > 
> >   	tpm2_flush_sessions(chip, space);
> >   }
> > @@ -267,7 +267,7 @@ static int tpm2_map_command(struct tpm_chip *chip, u32 cc, u8 *cmd)
> >   static int tpm_validate_command(struct tpm_chip *chip, struct tpm_space *space,
> >   				const u8 *cmd, size_t len)
> >   {
> > -	const struct tpm_input_header *header = (const void *)cmd;
> > +	const struct tpm_header *header = (const void *)cmd;
> 
> 
> You'll have to move this...

Thanks, I'll fix it.

/Jarkko

  reply	other threads:[~2018-11-08 18:58 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-08 14:15 [PATCH v5 00/17] Remove nested TPM operations Jarkko Sakkinen
2018-11-08 14:15 ` Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 01/17] tpm: use tpm_buf in tpm_transmit_cmd() as the IO parameter Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 02/17] tpm: fix invalid return value in pubek_show() Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 03/17] tpm: return 0 from pcrs_show() when tpm1_pcr_read() fails Jarkko Sakkinen
2018-11-08 14:52   ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 04/17] tpm: call tpm2_flush_space() on error in tpm_try_transmit() Jarkko Sakkinen
2018-11-08 14:55   ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 05/17] tpm: print tpm2_commit_space() error inside tpm2_commit_space() Jarkko Sakkinen
2018-11-08 14:56   ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 06/17] tpm: clean up tpm_try_transmit() error handling flow Jarkko Sakkinen
2018-11-08 14:59   ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 07/17] tpm: declare struct tpm_header Jarkko Sakkinen
2018-11-08 14:15   ` Jarkko Sakkinen
2018-11-08 15:02   ` Stefan Berger
2018-11-08 15:02     ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 08/17] tpm: access command header through struct in tpm_try_transmit() Jarkko Sakkinen
2018-11-08 15:03   ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 09/17] tpm: move tpm_validate_commmand() to tpm2-space.c Jarkko Sakkinen
2018-11-08 17:03   ` Winkler, Tomas
2018-11-08 23:07     ` Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 10/17] tpm: encapsulate tpm_dev_transmit() Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 11/17] tpm: move TPM space code out of tpm_transmit() Jarkko Sakkinen
2018-11-08 15:16   ` Stefan Berger
2018-11-08 18:58     ` Jarkko Sakkinen [this message]
2018-11-08 14:15 ` [PATCH v5 12/17] tpm: remove @space from tpm_transmit() Jarkko Sakkinen
2018-11-08 15:18   ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 13/17] tpm: use tpm_try_get_ops() in tpm-sysfs.c Jarkko Sakkinen
2018-11-08 15:26   ` Stefan Berger
2018-11-08 14:15 ` [PATCH v5 14/17] tpm: remove TPM_TRANSMIT_UNLOCKED flag Jarkko Sakkinen
2018-11-08 15:43   ` Stefan Berger
2018-11-08 19:02     ` Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 15/17] tpm: introduce tpm_chip_start() and tpm_chip_stop() Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 16/17] tpm: take TPM chip power gating out of tpm_transmit() Jarkko Sakkinen
2018-11-08 18:38   ` Winkler, Tomas
2018-11-08 23:07     ` Jarkko Sakkinen
2018-11-09 21:37       ` Winkler, Tomas
2018-11-13 11:12         ` Jarkko Sakkinen
2018-11-13 11:58           ` Winkler, Tomas
2018-11-13 15:52             ` Jarkko Sakkinen
2018-11-08 14:15 ` [PATCH v5 17/17] tpm: remove @flags from tpm_transmit() 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=20181108185832.GC20608@linux.intel.com \
    --to=jarkko.sakkinen@linux.intel.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=arnd@arndb.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=jgg@ziepe.ca \
    --cc=linux-integrity@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=nayna@linux.ibm.com \
    --cc=peterhuewe@gmx.de \
    --cc=stefanb@linux.ibm.com \
    --cc=stefanb@linux.vnet.ibm.com \
    --cc=tadeusz.struk@intel.com \
    --cc=tomas.winkler@intel.com \
    /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.