All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
To: "Peter Hüwe" <PeterHuewe@gmx.de>
Cc: tpmdd-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org,
	gregkh@linuxfoundation.org, jgunthorpe@obsidianresearch.com,
	dhowells@redhat.com, artem.bityutskiy@linux.intel.com,
	Marcel Selhorst <tpmdd@selhorst.net>
Subject: Re: [PATCH 06/10] tpm: introduce tpm_buf
Date: Sun, 18 Oct 2015 14:19:24 +0300	[thread overview]
Message-ID: <20151018111923.GB7391@intel.com> (raw)
In-Reply-To: <201510180457.49277.PeterHuewe@gmx.de>

On Sun, Oct 18, 2015 at 04:57:49AM +0200, Peter Hüwe wrote:
> Am Freitag, 16. Oktober 2015, 20:40:25 schrieb Jarkko Sakkinen:
> > This patch introduces struct tpm_buf that provides a string buffer for
> > constructing TPM commands. This allows to construct variable sized TPM
> > commands. For the buffer a page is allocated and mapped, which limits
> > maximum size to PAGE_SIZE.
> > 
> > Variable sized TPM commands are needed in order to add algorithmic
> > agility.
> > 
> > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> > ---
> >  drivers/char/tpm/tpm.h | 97
> > ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97
> > insertions(+)
> > 
> > diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
> > index 36ceb71..cb46f62 100644
> > --- a/drivers/char/tpm/tpm.h
> > +++ b/drivers/char/tpm/tpm.h
> > @@ -1,5 +1,6 @@
> >  /*
> >   * Copyright (C) 2004 IBM Corporation
> > + * Copyright (C) 2015 Intel Corporation
> >   *
> >   * Authors:
> >   * Leendert van Doorn <leendert@watson.ibm.com>
> > @@ -28,6 +29,7 @@
> >  #include <linux/tpm.h>
> >  #include <linux/acpi.h>
> >  #include <linux/cdev.h>
> > +#include <linux/highmem.h>
> > 
> >  enum tpm_const {
> >  	TPM_MINOR = 224,	/* officially assigned */
> > @@ -390,6 +392,101 @@ struct tpm_cmd_t {
> >  	tpm_cmd_params	params;
> >  } __packed;
> > 
> > +/* A string buffer type for constructing TPM commands. This is based on
> > the + * ideas of string buffer code in security/keys/trusted.h but is heap
> > based + * in order to keep the stack usage minimal.
> > + */
> > +
> > +enum tpm_buf_flags {
> > +	TPM_BUF_OVERFLOW	= BIT(0),
> > +};
> > +
> > +struct tpm_buf {
> > +	struct page *data_page;
> > +	unsigned int flags;
> > +	u8 *data;
> > +};
> > +
> > +static inline void tpm_buf_init(struct tpm_buf *buf, u16 tag, u32 ordinal)
> > +{
> > +	struct tpm_input_header *head;
> > +
> > +	buf->data_page = alloc_page(GFP_HIGHUSER);
> > +	if (!buf->data_page)
> > +		return -ENOMEM;
> > +
> > +	buf->flags = 0;
> > +	buf->data = kmap(buf->data_page);
> > +
> > +	head = (struct tpm_input_header *) buf->data;
> > +
> > +	head->tag = cpu_to_be16(tag);
> > +	head->length = cpu_to_be32(sizeof(*head));
> > +	head->ordinal = cpu_to_be32(ordinal);
> > +
> > +	return 0;
> > +}
> > +
> > +static inline void tpm_buf_destroy(struct tpm_buf *buf)
> > +{
> > +	kunmap(buf->data_page);
> > +	__free_page(buf->data_page);
> > +}
> > +
> > +static inline u32 tpm_buf_length(struct tpm_buf *buf)
> > +{
> > +	struct tpm_input_header *head = (struct tpm_input_header *) buf->data;
> > +
> > +	return be32_to_cpu(head->length);
> > +}
> > +
> > +static inline u16 tpm_buf_tag(struct tpm_buf *buf)
> > +{
> > +	struct tpm_input_header *head = (struct tpm_input_header *) buf->data;
> > +
> > +	return be16_to_cpu(head->tag);
> > +}
> > +
> > +static inline void tpm_buf_append(struct tpm_buf *buf,
> > +				  const unsigned char *new_data,
> > +				  unsigned int new_len)
> > +{
> > +	struct tpm_input_header *head = (struct tpm_input_header *) buf->data;
> > +	u32 len = tpm_buf_length(buf);
> 
> 
> > +
> > +	/* Return silently if overflow has already happened. */
> > +	if (buf->flags & TPM_BUF_OVERFLOW)
> > +		return;
> > +
> > +	if ((len + new_len) > PAGE_SIZE) {
> > +		WARN(1, "tpm_buf: overflow\n");
> > +		buf->flags |= TPM_BUF_OVERFLOW;
> > +		return;
> > +	}
> Why not use WARN_ONCE?

Does it matter? Message is emitted only once since it does not sense to
even try to add new data if overflow flag has been set. I.e. even if I
had WARN_ONCE there I still would have the check for overflow flag
before this.

/Jarkko

  reply	other threads:[~2015-10-18 11:19 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-16 18:40 [PATCH 00/10] TPM2 updates for 4.4 Jarkko Sakkinen
2015-10-16 18:40 ` Jarkko Sakkinen
2015-10-16 18:40 ` [PATCH 01/10] tpm, tpm_crb: fix unaligned read of the command buffer address Jarkko Sakkinen
2015-10-18  3:02   ` Peter Hüwe
2015-10-18 11:15     ` Jarkko Sakkinen
2015-10-16 18:40 ` [PATCH 02/10] tpm, tpm_tis: fix tpm_tis ACPI detection issue with TPM 2.0 Jarkko Sakkinen
2015-10-16 18:40 ` [PATCH 03/10] sysfs: added __compat_only_sysfs_link_entry_to_kobj() Jarkko Sakkinen
2015-10-18  1:37   ` Peter Hüwe
2015-10-18 11:21     ` Jarkko Sakkinen
2015-11-07  0:23   ` Jeremiah Mahler
2015-11-09 22:32     ` Jason Gunthorpe
2015-11-07  2:55   ` [BUG, PATCH " Jeremiah Mahler
2015-11-07 10:55     ` Jarkko Sakkinen
2015-11-07 11:41       ` Jarkko Sakkinen
2015-11-07 18:08         ` Jeremiah Mahler
2015-11-07 22:31           ` Jarkko Sakkinen
2015-11-07 23:11             ` Jeremiah Mahler
2015-11-08  0:49               ` Jarkko Sakkinen
2015-11-08  3:04                 ` Jeremiah Mahler
2015-11-08  7:46                   ` Jarkko Sakkinen
2015-10-16 18:40 ` [PATCH 04/10] tpm: move the PPI attributes to character device directory Jarkko Sakkinen
2015-11-04 18:17   ` [BUG, bisect, PATCH " Jeremiah Mahler
2015-11-05  9:22     ` Jarkko Sakkinen
2015-11-05 11:05       ` [tpmdd-devel] " Jarkko Sakkinen
2015-11-05 16:47         ` Jeremiah Mahler
2015-11-05 17:46           ` Jarkko Sakkinen
2015-11-05 18:17             ` Jeremiah Mahler
2015-11-06 13:45               ` Jarkko Sakkinen
2015-11-07  2:54     ` Jeremiah Mahler
2015-10-16 18:40 ` [PATCH 05/10] tpm: update PPI documentation to address the location change Jarkko Sakkinen
2015-10-16 18:40   ` Jarkko Sakkinen
2015-10-16 18:40 ` [PATCH 06/10] tpm: introduce tpm_buf Jarkko Sakkinen
2015-10-18  2:57   ` Peter Hüwe
2015-10-18 11:19     ` Jarkko Sakkinen [this message]
2015-10-16 18:40 ` [PATCH 07/10] keys, trusted: move struct trusted_key_options to trusted-type.h Jarkko Sakkinen
2015-10-16 18:40 ` [PATCH 08/10] tpm: seal/unseal for TPM 2.0 Jarkko Sakkinen
2015-11-07 18:58   ` Jeremiah Mahler
2015-11-07 21:39     ` Jarkko Sakkinen
2015-10-16 18:40 ` [PATCH 09/10] keys, trusted: seal/unseal with TPM 2.0 chips Jarkko Sakkinen
2015-10-16 18:40 ` [PATCH 10/10] MAINTAINERS: add new maintainer for TPM DEVICE DRIVER Jarkko Sakkinen
2015-10-16 19:06 ` [tpmdd-devel] [PATCH 00/10] TPM2 updates for 4.4 Kevin Strasser
2015-10-16 19:06   ` Kevin Strasser

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=20151018111923.GB7391@intel.com \
    --to=jarkko.sakkinen@linux.intel.com \
    --cc=PeterHuewe@gmx.de \
    --cc=artem.bityutskiy@linux.intel.com \
    --cc=dhowells@redhat.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jgunthorpe@obsidianresearch.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tpmdd-devel@lists.sourceforge.net \
    --cc=tpmdd@selhorst.net \
    /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.