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, stable@vger.kernel.org,
	Peter Huewe <peterhuewe@gmx.de>, Jason Gunthorpe <jgg@ziepe.ca>,
	Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	James Bottomley <James.Bottomley@HansenPartnership.com>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] tpm: Define TPM2_SPACE_BUFFER_SIZE to replace the use of PAGE_SIZE
Date: Thu, 2 Jul 2020 23:48:00 +0300	[thread overview]
Message-ID: <20200702204800.GC31291@linux.intel.com> (raw)
In-Reply-To: <35184081-6f01-e13c-1b87-7c7d83d075c0@linux.ibm.com>

On Fri, Jun 26, 2020 at 12:47:02PM -0400, Stefan Berger wrote:
> On 6/26/20 10:34 AM, Jarkko Sakkinen wrote:
> > The size of the buffers for storing context's and sessions can vary from
> > arch to arch as PAGE_SIZE can be anything between 4 kB and 256 kB (the
> > maximum for PPC64). Define a fixed buffer size set to 16 kB. This should
> > be enough for most use with three handles (that is how many we allow at
> > the moment).
> > 
> > Reported-by: Stefan Berger <stefanb@linux.ibm.com>
> > Cc: stable@vger.kernel.org
> > Fixes: 745b361e989a ("tpm: infrastructure for TPM spaces")
> > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> > ---
> >   drivers/char/tpm/tpm2-space.c | 27 ++++++++++++++++-----------
> >   1 file changed, 16 insertions(+), 11 deletions(-)
> > 
> > diff --git a/drivers/char/tpm/tpm2-space.c b/drivers/char/tpm/tpm2-space.c
> > index 982d341d8837..9bef646093d1 100644
> > --- a/drivers/char/tpm/tpm2-space.c
> > +++ b/drivers/char/tpm/tpm2-space.c
> > @@ -15,6 +15,8 @@
> >   #include <asm/unaligned.h>
> >   #include "tpm.h"
> > +#define TPM2_SPACE_BUFFER_SIZE		16384 /* 16 kB */
> > +
> >   enum tpm2_handle_types {
> >   	TPM2_HT_HMAC_SESSION	= 0x02000000,
> >   	TPM2_HT_POLICY_SESSION	= 0x03000000,
> > @@ -40,11 +42,11 @@ static void tpm2_flush_sessions(struct tpm_chip *chip, struct tpm_space *space)
> >   int tpm2_init_space(struct tpm_space *space)
> >   {
> > -	space->context_buf = kzalloc(PAGE_SIZE, GFP_KERNEL);
> > +	space->context_buf = kzalloc(TPM2_SPACE_BUFFER_SIZE, GFP_KERNEL);
> >   	if (!space->context_buf)
> >   		return -ENOMEM;
> > -	space->session_buf = kzalloc(PAGE_SIZE, GFP_KERNEL);
> > +	space->session_buf = kzalloc(TPM2_SPACE_BUFFER_SIZE, GFP_KERNEL);
> >   	if (space->session_buf == NULL) {
> >   		kfree(space->context_buf);
> >   		return -ENOMEM;
> > @@ -311,8 +313,10 @@ int tpm2_prepare_space(struct tpm_chip *chip, struct tpm_space *space, u8 *cmd,
> >   	       sizeof(space->context_tbl));
> >   	memcpy(&chip->work_space.session_tbl, &space->session_tbl,
> >   	       sizeof(space->session_tbl));
> > -	memcpy(chip->work_space.context_buf, space->context_buf, PAGE_SIZE);
> > -	memcpy(chip->work_space.session_buf, space->session_buf, PAGE_SIZE);
> > +	memcpy(chip->work_space.context_buf, space->context_buf,
> > +	       TPM2_SPACE_BUFFER_SIZE);
> > +	memcpy(chip->work_space.session_buf, space->session_buf,
> > +	       TPM2_SPACE_BUFFER_SIZE);
> >   	rc = tpm2_load_space(chip);
> >   	if (rc) {
> > @@ -492,8 +496,8 @@ static int tpm2_save_space(struct tpm_chip *chip)
> >   			continue;
> >   		rc = tpm2_save_context(chip, space->context_tbl[i],
> > -				       space->context_buf, PAGE_SIZE,
> > -				       &offset);
> > +				       space->context_buf,
> > +				       TPM2_SPACE_BUFFER_SIZE, &offset);
> >   		if (rc == -ENOENT) {
> >   			space->context_tbl[i] = 0;
> >   			continue;
> > @@ -509,9 +513,8 @@ static int tpm2_save_space(struct tpm_chip *chip)
> >   			continue;
> >   		rc = tpm2_save_context(chip, space->session_tbl[i],
> > -				       space->session_buf, PAGE_SIZE,
> > -				       &offset);
> > -
> > +				       space->session_buf,
> > +				       TPM2_SPACE_BUFFER_SIZE, &offset);
> >   		if (rc == -ENOENT) {
> >   			/* handle error saving session, just forget it */
> >   			space->session_tbl[i] = 0;
> > @@ -557,8 +560,10 @@ int tpm2_commit_space(struct tpm_chip *chip, struct tpm_space *space,
> >   	       sizeof(space->context_tbl));
> >   	memcpy(&space->session_tbl, &chip->work_space.session_tbl,
> >   	       sizeof(space->session_tbl));
> > -	memcpy(space->context_buf, chip->work_space.context_buf, PAGE_SIZE);
> > -	memcpy(space->session_buf, chip->work_space.session_buf, PAGE_SIZE);
> > +	memcpy(space->context_buf, chip->work_space.context_buf,
> > +	       TPM2_SPACE_BUFFER_SIZE);
> > +	memcpy(space->session_buf, chip->work_space.session_buf,
> > +	       TPM2_SPACE_BUFFER_SIZE);
> 
> 
> work_space.session_buf and context_buf also need allocation changes,
> otherwise we read from a smaller buffer here. See comment to other patch
> about tpm-chip.c .

Thank you, a good catch. I'll send an update.

/Jarkko

  reply	other threads:[~2020-07-02 20:48 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-26 14:34 [PATCH] tpm: Define TPM2_SPACE_BUFFER_SIZE to replace the use of PAGE_SIZE Jarkko Sakkinen
2020-06-26 16:47 ` Stefan Berger
2020-07-02 20:48   ` Jarkko Sakkinen [this message]
  -- strict thread matches above, loose matches on Subject: below --
2020-07-02 22:55 Jarkko Sakkinen
2020-07-02 23:55 ` Jerry Snitselaar
2020-07-04  3:56   ` Jarkko Sakkinen
2020-07-06 18:06     ` Stefan Berger
2020-07-06 23:01       ` 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=20200702204800.GC31291@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=peterhuewe@gmx.de \
    --cc=stable@vger.kernel.org \
    --cc=stefanb@linux.ibm.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.