From: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
To: Stefan Berger <stefanb@us.ibm.com>
Cc: open list <linux-kernel@vger.kernel.org>,
linux-security-module@vger.kernel.org,
tpmdd-devel@lists.sourceforge.net
Subject: Re: [tpmdd-devel] [PATCH RFC 4/4] tpm: add the infrastructure for TPM space for TPM 2.0
Date: Tue, 10 Jan 2017 00:11:16 +0200 [thread overview]
Message-ID: <20170109221116.qe33dkfdhpx7dlck@intel.com> (raw)
In-Reply-To: <OF9C3EE9AE.65978870-ON0025809E.0061E7AF-8525809E.0061FFDA@notes.na.collabserv.com>
On Wed, Jan 04, 2017 at 12:50:21PM -0500, Stefan Berger wrote:
> Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com> wrote on 01/02/2017
> 08:22:10 AM:
>
> >
> > Added a ioctl for creating a TPM space. The space is isolated from the
> > other users of the TPM. Only a process holding the file with the handle
> > can access the objects and only objects that are created through that
> > file handle can be accessed.
> >
> > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
> > ---
>
> > diff --git a/drivers/char/tpm/tpm-dev.c b/drivers/char/tpm/tpm-dev.c
> > index 912ad30..139638b 100644
> > --- a/drivers/char/tpm/tpm-dev.c
> > +++ b/drivers/char/tpm/tpm-dev.c
> > @@ -19,6 +19,7 @@
> > */
> > #include <linux/slab.h>
> > #include <linux/uaccess.h>
> > +#include <uapi/linux/tpm.h>
> > #include "tpm.h"
> >
> > struct file_priv {
> > @@ -32,6 +33,8 @@ struct file_priv {
> > struct work_struct work;
> >
> > u8 data_buffer[TPM_BUFSIZE];
> > + struct tpm_space space;
> > + bool has_space;
> > };
> >
> > static void user_reader_timeout(unsigned long ptr)
> > @@ -115,6 +118,7 @@ static ssize_t tpm_write(struct file *file,
> > const char __user *buf,
> > size_t size, loff_t *off)
> > {
> > struct file_priv *priv = file->private_data;
> > + struct tpm_space *space = NULL;
> > size_t in_size = size;
> > ssize_t out_size;
> >
> > @@ -130,6 +134,9 @@ static ssize_t tpm_write(struct file *file,
> > const char __user *buf,
> >
> > mutex_lock(&priv->buffer_mutex);
> >
> > + if (priv->has_space)
> > + space = &priv->space;
> > +
> > if (copy_from_user
> > (priv->data_buffer, (void __user *) buf, in_size)) {
> > mutex_unlock(&priv->buffer_mutex);
> > @@ -144,7 +151,7 @@ static ssize_t tpm_write(struct file *file,
> > const char __user *buf,
> > mutex_unlock(&priv->buffer_mutex);
> > return -EPIPE;
> > }
> > - out_size = tpm_transmit(priv->chip, priv->data_buffer,
> > + out_size = tpm_transmit(priv->chip, space, priv->data_buffer,
> > sizeof(priv->data_buffer), 0);
> >
> > tpm_put_ops(priv->chip);
> > @@ -162,6 +169,65 @@ static ssize_t tpm_write(struct file *file,
> > const char __user *buf,
> > return in_size;
> > }
> >
> > +/**
> > + * tpm_ioc_new_space - handler for %SGX_IOC_NEW_SPACE ioctl
> > + *
> > + * Creates a new TPM space that can hold a set of transient
> > objects. The space
> > + * is isolated with virtual handles that are mapped into physical
> > handles by the
> > + * driver.
> > + */
> > +static long tpm_ioc_new_space(struct file *file, unsigned int ioctl,
> > + unsigned long arg)
> > +{
> > + struct file_priv *priv = file->private_data;
> > + struct tpm_chip *chip = priv->chip;
> > + int rc = 0;
> > +
> > + if (!(chip->flags & TPM_CHIP_FLAG_TPM2))
> > + return -EOPNOTSUPP;
> > +
> > + mutex_lock(&priv->buffer_mutex);
> > +
> > + if (priv->has_space) {
> > + rc = -EBUSY;
> > + goto out;
> > + }
> > +
> > + priv->space.context_buf = kzalloc(PAGE_SIZE, GFP_KERNEL);
> > + if (!priv->space.context_buf) {
> > + rc = -ENOMEM;
> > + goto out;
> > + }
> > +
> > + /* The TPM device can be opened again as this file has been moved to
> a
> > + * TPM handle space.
> > + */
> > + priv->has_space = true;
> > + clear_bit(0, &chip->is_open);
> > +out:
> > + mutex_unlock(&priv->buffer_mutex);
> > + return rc;
> > +}
> > +
> > +static long tpm_ioctl(struct file *file, unsigned int ioctl,
> > + unsigned long arg)
> > +{
> > + switch (ioctl) {
> > + case TPM_IOC_NEW_SPACE:
> > + return tpm_ioc_new_space(file, ioctl, arg);
> > + default:
> > + return -ENOIOCTLCMD;
> > + }
> > +}
> > +
> > +#ifdef CONFIG_COMPAT
> > +static long tpm_compat_ioctl(struct file *file, unsigned int ioctl,
> > + unsigned long arg)
> > +{
> > + return tpm_ioctl(file, ioctl, arg);
> > +}
> > +#endif
> > +
> > /*
> > * Called on file close
> > */
> > @@ -169,6 +235,14 @@ static int tpm_release(struct inode *inode,
> > struct file *file)
> > {
> > struct file_priv *priv = file->private_data;
> >
> > + if (tpm_try_get_ops(priv->chip)) {
> > + mutex_unlock(&priv->buffer_mutex);
> > + return -EPIPE;
> > + }
>
> That mutex_unlock looks wrong.
Thanks.
This will be anyway gone with own device file.
> Stefan
/Jarkko
next prev parent reply other threads:[~2017-01-09 22:11 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-02 13:22 [PATCH RFC 0/4] RFC: in-kernel resource manager Jarkko Sakkinen
2017-01-02 13:22 ` [PATCH RFC 1/4] tpm: migrate struct tpm_buf to struct tpm_chip Jarkko Sakkinen
2017-01-02 21:01 ` Jason Gunthorpe
2017-01-03 0:57 ` Jarkko Sakkinen
2017-01-03 19:13 ` Jason Gunthorpe
2017-01-04 12:29 ` Jarkko Sakkinen
2017-01-02 13:22 ` [PATCH RFC 2/4] tpm: validate TPM 2.0 commands Jarkko Sakkinen
[not found] ` <OF8D508BD2.EAB22BFD-ON0025809E.0062B40C-8525809E.006356C3@notes.na.collabserv.com>
2017-01-04 18:19 ` [tpmdd-devel] " James Bottomley
2017-01-04 18:44 ` Jason Gunthorpe
2017-01-02 13:22 ` [PATCH RFC 3/4] tpm: export tpm2_flush_context_cmd Jarkko Sakkinen
2017-01-02 13:22 ` [PATCH RFC 4/4] tpm: add the infrastructure for TPM space for TPM 2.0 Jarkko Sakkinen
2017-01-02 21:09 ` Jason Gunthorpe
2017-01-03 0:37 ` Jarkko Sakkinen
2017-01-03 18:46 ` Jason Gunthorpe
2017-01-04 12:43 ` Jarkko Sakkinen
2017-01-03 19:16 ` Jason Gunthorpe
2017-01-04 12:45 ` Jarkko Sakkinen
[not found] ` <OF9C3EE9AE.65978870-ON0025809E.0061E7AF-8525809E.0061FFDA@notes.na.collabserv.com>
2017-01-09 22:11 ` Jarkko Sakkinen [this message]
2017-01-02 16:36 ` [tpmdd-devel] [PATCH RFC 0/4] RFC: in-kernel resource manager James Bottomley
2017-01-02 19:33 ` Jarkko Sakkinen
2017-01-02 21:40 ` James Bottomley
2017-01-03 5:26 ` James Bottomley
2017-01-03 13:41 ` Jarkko Sakkinen
2017-01-03 16:14 ` James Bottomley
2017-01-03 18:36 ` Jarkko Sakkinen
2017-01-03 19:14 ` Jarkko Sakkinen
2017-01-03 19:34 ` James Bottomley
2017-01-03 21:54 ` Jason Gunthorpe
2017-01-04 12:58 ` Jarkko Sakkinen
2017-01-04 16:55 ` Jason Gunthorpe
2017-01-04 5:47 ` Andy Lutomirski
2017-01-04 13:00 ` Jarkko Sakkinen
2017-01-03 13:51 ` Jarkko Sakkinen
2017-01-03 16:36 ` James Bottomley
2017-01-03 18:40 ` Jarkko Sakkinen
2017-01-03 21:47 ` Jason Gunthorpe
2017-01-03 22:21 ` Ken Goldman
2017-01-03 23:20 ` Jason Gunthorpe
2017-01-03 22:39 ` James Bottomley
2017-01-04 0:17 ` Jason Gunthorpe
2017-01-04 0:29 ` James Bottomley
2017-01-04 0:56 ` Jason Gunthorpe
2017-01-04 12:50 ` Jarkko Sakkinen
2017-01-04 14:53 ` James Bottomley
2017-01-04 18:31 ` Jason Gunthorpe
2017-01-04 18:57 ` James Bottomley
2017-01-04 19:24 ` Jason Gunthorpe
2017-01-04 12:48 ` Jarkko Sakkinen
2017-01-03 21:32 ` Jason Gunthorpe
2017-01-03 22:03 ` James Bottomley
2017-01-05 15:52 ` Fuchs, Andreas
2017-01-05 17:27 ` Jason Gunthorpe
2017-01-05 18:06 ` James Bottomley
2017-01-06 8:43 ` Andreas Fuchs
2017-01-05 18:33 ` James Bottomley
2017-01-05 19:20 ` Jason Gunthorpe
2017-01-05 19:55 ` James Bottomley
2017-01-05 22:21 ` Jason Gunthorpe
2017-01-05 22:58 ` James Bottomley
2017-01-05 23:50 ` Jason Gunthorpe
2017-01-06 0:36 ` James Bottomley
2017-01-06 8:59 ` Andreas Fuchs
2017-01-06 19:10 ` Jason Gunthorpe
2017-01-06 19:02 ` Jason Gunthorpe
2017-01-10 19:03 ` Ken Goldman
2017-01-09 22:39 ` [tpmdd-devel] " Jarkko Sakkinen
2017-01-11 10:03 ` Andreas Fuchs
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=20170109221116.qe33dkfdhpx7dlck@intel.com \
--to=jarkko.sakkinen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=stefanb@us.ibm.com \
--cc=tpmdd-devel@lists.sourceforge.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).