Re: [tpmdd-devel] [PATCH v6 3/9] tpm: replace dynamically allocated bios_dir with a static array

2016-11-26 Thread Jarkko Sakkinen
On Fri, Nov 25, 2016 at 12:38:13PM -0700, Jason Gunthorpe wrote:
> On Fri, Nov 25, 2016 at 10:08:38AM +0200, Jarkko Sakkinen wrote:
> 
> > > This is no good at this point in the series - we need the ENODEV
> > > detection in tpm_chip_register() from the 'Fix handle of missing event
> > > log' moved into this patch, because it now returns ENODEV due to
> > > sercurityfs
> > 
> > Sure it would be cleaner but not really necessary. Do you really think
> > this is mandatory? No matter how I reorder patches this will require
> > time and effort to fix various merge conflicts because of the replacemnt
> > of event log. After that I have to test everything.
> 
> Well, once you started editing patches to fix them you should make
> them fully correct so bisection works.
> 
> If you applied the patch I gave you on top of the tree then I would
> have said to leave it...

I agree with you on this. I adjusted it to be like that now. Is it good
now?

/Jarkko

--
___
tpmdd-devel mailing list
tpmdd-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tpmdd-devel


Re: [tpmdd-devel] [PATCH v6 3/9] tpm: replace dynamically allocated bios_dir with a static array

2016-11-25 Thread Jason Gunthorpe
On Fri, Nov 25, 2016 at 10:08:38AM +0200, Jarkko Sakkinen wrote:

> > This is no good at this point in the series - we need the ENODEV
> > detection in tpm_chip_register() from the 'Fix handle of missing event
> > log' moved into this patch, because it now returns ENODEV due to
> > sercurityfs
> 
> Sure it would be cleaner but not really necessary. Do you really think
> this is mandatory? No matter how I reorder patches this will require
> time and effort to fix various merge conflicts because of the replacemnt
> of event log. After that I have to test everything.

Well, once you started editing patches to fix them you should make
them fully correct so bisection works.

If you applied the patch I gave you on top of the tree then I would
have said to leave it...

> The commit message otherwise great except for the short summary, which
> is now fixed.

It is good now

Jason

--
___
tpmdd-devel mailing list
tpmdd-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tpmdd-devel


Re: [tpmdd-devel] [PATCH v6 3/9] tpm: replace dynamically allocated bios_dir with a static array

2016-11-25 Thread Jarkko Sakkinen
On Thu, Nov 24, 2016 at 09:53:13AM -0700, Jason Gunthorpe wrote:
> On Thu, Nov 24, 2016 at 03:57:23PM +0200, Jarkko Sakkinen wrote:
> > I manually added the changes to:
> > 
> >   tpm: replace dynamically allocated bios_dir with a static array
> 
> For this patch..
> 
> Could drop 'int rc' from tpm1_chip_register, but it will come back in
> a later patch
> 
> Could dump TPM_NUM_EVENT_LOG_FILES and just use
> ARRAY_SIZE(chip->bios_dir)

Not a bug fix. Happy take a patch after the pull request.

> Now the the stub for tpm_bios_log_setup can properly return -ENODEV
> 
> This is no good at this point in the series - we need the ENODEV
> detection in tpm_chip_register() from the 'Fix handle of missing event
> log' moved into this patch, because it now returns ENODEV due to
> sercurityfs

Sure it would be cleaner but not really necessary. Do you really think
this is mandatory? No matter how I reorder patches this will require
time and effort to fix various merge conflicts because of the replacemnt
of event log. After that I have to test everything.

Not doing this for light reasons...

> The commit 'tpm: vtpm_proxy: Do not access host's event log' still
> needs a proper commit message - it doesn't match what the patch is
> doing at all.

The commit message otherwise great except for the short summary, which
is now fixed.

> If you are going to be editing the patches I'd suggest squashing all
> the bug fix ones with proper credit so it at least makes sense to
> read..
> 
> Jason

I do not have interest to edit patches more than I have to.

/Jarkko

--
___
tpmdd-devel mailing list
tpmdd-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tpmdd-devel


Re: [tpmdd-devel] [PATCH v6 3/9] tpm: replace dynamically allocated bios_dir with a static array

2016-11-24 Thread Jason Gunthorpe
On Thu, Nov 24, 2016 at 03:57:23PM +0200, Jarkko Sakkinen wrote:
> I manually added the changes to:
> 
>   tpm: replace dynamically allocated bios_dir with a static array

For this patch..

Could drop 'int rc' from tpm1_chip_register, but it will come back in
a later patch

Could dump TPM_NUM_EVENT_LOG_FILES and just use
ARRAY_SIZE(chip->bios_dir)

Now the the stub for tpm_bios_log_setup can properly return -ENODEV

This is no good at this point in the series - we need the ENODEV
detection in tpm_chip_register() from the 'Fix handle of missing event
log' moved into this patch, because it now returns ENODEV due to
sercurityfs

The commit 'tpm: vtpm_proxy: Do not access host's event log' still
needs a proper commit message - it doesn't match what the patch is
doing at all.

If you are going to be editing the patches I'd suggest squashing all
the bug fix ones with proper credit so it at least makes sense to
read..

Jason

--
___
tpmdd-devel mailing list
tpmdd-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tpmdd-devel


Re: [tpmdd-devel] [PATCH v6 3/9] tpm: replace dynamically allocated bios_dir with a static array

2016-11-22 Thread Nayna


On 11/22/2016 04:53 PM, Jarkko Sakkinen wrote:
> On Mon, Nov 14, 2016 at 05:00:50AM -0500, Nayna Jain wrote:
>> This commit is based on a commit by Nayna Jain. Replaced dynamically
>> allocated bios_dir with a static array as the size is always constant.
>>
>> Suggested-by: Jason Gunthorpe 
>> Signed-off-by: Nayna Jain 
>> Signed-off-by: Jarkko Sakkinen 
>
> This commit remains unreviewed and tested. I'm in the author role here
> so I cannot help with this. If that does not happen soon I cannot put
> this into the pull request.

Tested-By: Nayna Jain 

Thanks & Regards,
   - Nayna

>
> /Jarkko
>
>
>> ---
>>   drivers/char/tpm/tpm-chip.c |  9 ---
>>   drivers/char/tpm/tpm.h  |  3 ++-
>>   drivers/char/tpm/tpm_eventlog.c | 59 
>> ++---
>>   drivers/char/tpm/tpm_eventlog.h | 10 +++
>>   4 files changed, 38 insertions(+), 43 deletions(-)
>>
>> diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
>> index 836f056..d0c1872 100644
>> --- a/drivers/char/tpm/tpm-chip.c
>> +++ b/drivers/char/tpm/tpm-chip.c
>> @@ -278,14 +278,16 @@ static void tpm_del_char_device(struct tpm_chip *chip)
>>
>>   static int tpm1_chip_register(struct tpm_chip *chip)
>>   {
>> +int rc;
>> +
>>  if (chip->flags & TPM_CHIP_FLAG_TPM2)
>>  return 0;
>>
>>  tpm_sysfs_add_device(chip);
>>
>> -chip->bios_dir = tpm_bios_log_setup(dev_name(>dev));
>> +rc = tpm_bios_log_setup(chip);
>>
>> -return 0;
>> +return rc;
>>   }
>>
>>   static void tpm1_chip_unregister(struct tpm_chip *chip)
>> @@ -293,8 +295,7 @@ static void tpm1_chip_unregister(struct tpm_chip *chip)
>>  if (chip->flags & TPM_CHIP_FLAG_TPM2)
>>  return;
>>
>> -if (chip->bios_dir)
>> -tpm_bios_log_teardown(chip->bios_dir);
>> +tpm_bios_log_teardown(chip);
>>   }
>>
>>   static void tpm_del_legacy_sysfs(struct tpm_chip *chip)
>> diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
>> index f9401ca..9d69580 100644
>> --- a/drivers/char/tpm/tpm.h
>> +++ b/drivers/char/tpm/tpm.h
>> @@ -40,6 +40,7 @@ enum tpm_const {
>>  TPM_BUFSIZE = 4096,
>>  TPM_NUM_DEVICES = 65536,
>>  TPM_RETRY = 50, /* 5 seconds */
>> +TPM_NUM_EVENT_LOG_FILES = 3,
>>   };
>>
>>   enum tpm_timeout {
>> @@ -171,7 +172,7 @@ struct tpm_chip {
>>  unsigned long duration[3]; /* jiffies */
>>  bool duration_adjusted;
>>
>> -struct dentry **bios_dir;
>> +struct dentry *bios_dir[TPM_NUM_EVENT_LOG_FILES];
>>
>>  const struct attribute_group *groups[3];
>>  unsigned int groups_cnt;
>> diff --git a/drivers/char/tpm/tpm_eventlog.c 
>> b/drivers/char/tpm/tpm_eventlog.c
>> index 9467e31..62e9da6 100644
>> --- a/drivers/char/tpm/tpm_eventlog.c
>> +++ b/drivers/char/tpm/tpm_eventlog.c
>> @@ -368,54 +368,47 @@ static int is_bad(void *p)
>>  return 0;
>>   }
>>
>> -struct dentry **tpm_bios_log_setup(const char *name)
>> +int tpm_bios_log_setup(struct tpm_chip *chip)
>>   {
>> -struct dentry **ret = NULL, *tpm_dir, *bin_file, *ascii_file;
>> +const char *name = dev_name(>dev);
>> +unsigned int cnt;
>>
>> -tpm_dir = securityfs_create_dir(name, NULL);
>> -if (is_bad(tpm_dir))
>> -goto out;
>> +cnt = 0;
>> +chip->bios_dir[cnt] = securityfs_create_dir(name, NULL);
>> +if (is_bad(chip->bios_dir[cnt]))
>> +goto err;
>> +cnt++;
>>
>> -bin_file =
>> +chip->bios_dir[cnt] =
>>  securityfs_create_file("binary_bios_measurements",
>> -   0440, tpm_dir,
>> +   0440, chip->bios_dir[0],
>> (void *)_binary_b_measurements_seqops,
>> _bios_measurements_ops);
>> -if (is_bad(bin_file))
>> -goto out_tpm;
>> +if (is_bad(chip->bios_dir[cnt]))
>> +goto err;
>> +cnt++;
>>
>> -ascii_file =
>> +chip->bios_dir[cnt] =
>>  securityfs_create_file("ascii_bios_measurements",
>> -   0440, tpm_dir,
>> +   0440, chip->bios_dir[0],
>> (void *)_ascii_b_measurements_seqops,
>> _bios_measurements_ops);
>> -if (is_bad(ascii_file))
>> -goto out_bin;
>> +if (is_bad(chip->bios_dir[cnt]))
>> +goto err;
>> +cnt++;
>>
>> -ret = kmalloc(3 * sizeof(struct dentry *), GFP_KERNEL);
>> -if (!ret)
>> -goto out_ascii;
>> -
>> -ret[0] = ascii_file;
>> -ret[1] = bin_file;
>> -ret[2] = tpm_dir;
>> -
>> -return ret;
>> +return 0;
>>
>> -out_ascii:
>> -securityfs_remove(ascii_file);
>> -out_bin:
>> -securityfs_remove(bin_file);
>> -out_tpm:
>> -securityfs_remove(tpm_dir);
>> -out:
>> -return NULL;
>> +err:
>> +

Re: [tpmdd-devel] [PATCH v6 3/9] tpm: replace dynamically allocated bios_dir with a static array

2016-11-22 Thread Jason Gunthorpe
On Tue, Nov 22, 2016 at 01:23:33PM +0200, Jarkko Sakkinen wrote:
> On Mon, Nov 14, 2016 at 05:00:50AM -0500, Nayna Jain wrote:
> > This commit is based on a commit by Nayna Jain. Replaced dynamically
> > allocated bios_dir with a static array as the size is always constant.
> > 
> > Suggested-by: Jason Gunthorpe 
> > Signed-off-by: Nayna Jain 
> > Signed-off-by: Jarkko Sakkinen 
> 
> This commit remains unreviewed and tested. I'm in the author role here
> so I cannot help with this. If that does not happen soon I cannot put
> this into the pull request.

Nayna must have tested it, looks OK to me..

> > +err:
> > +   chip->bios_dir[cnt] = NULL;
> > +   tpm_bios_log_teardown(chip);
> > +   return -EIO;

Except that return should ideally be PTR_ERR(chip->bios_dir[cnt])

.. and we still set ERR_PTR into bios_dir in the ENODEV case, so the
overall series is still broken if securityfs is compiled out.

Lets fix this all like this - which is a good enough reason to leave the
ENODEV detect alone - just squash this into your patch:

diff --git a/drivers/char/tpm/tpm_eventlog.c b/drivers/char/tpm/tpm_eventlog.c
index 2a15b866ac257a..11bb1138a8282e 100644
--- a/drivers/char/tpm/tpm_eventlog.c
+++ b/drivers/char/tpm/tpm_eventlog.c
@@ -356,15 +356,6 @@ static const struct file_operations 
tpm_bios_measurements_ops = {
.release = tpm_bios_measurements_release,
 };
 
-static int is_bad(void *p)
-{
-   if (!p)
-   return 1;
-   if (IS_ERR(p) && (PTR_ERR(p) != -ENODEV))
-   return 1;
-   return 0;
-}
-
 static int tpm_read_log(struct tpm_chip *chip)
 {
int rc;
@@ -390,7 +381,8 @@ static int tpm_read_log(struct tpm_chip *chip)
  * If an event log is found then the securityfs files are setup to
  * export it to userspace, otherwise nothing is done.
  *
- * Returns -ENODEV if the firmware has no event log.
+ * Returns -ENODEV if the firmware has no event log or securityfs is not
+ * supported.
  */
 int tpm_bios_log_setup(struct tpm_chip *chip)
 {
@@ -407,7 +399,10 @@ int tpm_bios_log_setup(struct tpm_chip *chip)
 
cnt = 0;
chip->bios_dir[cnt] = securityfs_create_dir(name, NULL);
-   if (is_bad(chip->bios_dir[cnt]))
+   /* NOTE: securityfs_create_dir can return ENODEV if securityfs is
+* compiled out. The caller should ignore the ENODEV return code.
+*/
+   if (IS_ERR(chip->bios_dir[cnt]))
goto err;
cnt++;
 
@@ -419,7 +414,7 @@ int tpm_bios_log_setup(struct tpm_chip *chip)
   0440, chip->bios_dir[0],
   (void *)>bin_log_seqops,
   _bios_measurements_ops);
-   if (is_bad(chip->bios_dir[cnt]))
+   if (IS_ERR(chip->bios_dir[cnt]))
goto err;
cnt++;
 
@@ -431,16 +426,17 @@ int tpm_bios_log_setup(struct tpm_chip *chip)
   0440, chip->bios_dir[0],
   (void *)>ascii_log_seqops,
   _bios_measurements_ops);
-   if (is_bad(chip->bios_dir[cnt]))
+   if (IS_ERR(chip->bios_dir[cnt]))
goto err;
cnt++;
 
return 0;
 
 err:
+   rc = PTR_ERR(chip->bios_dir[cnt]);
chip->bios_dir[cnt] = NULL;
tpm_bios_log_teardown(chip);
-   return -EIO;
+   return rc;
 }
 
 void tpm_bios_log_teardown(struct tpm_chip *chip)

--
___
tpmdd-devel mailing list
tpmdd-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tpmdd-devel


Re: [tpmdd-devel] [PATCH v6 3/9] tpm: replace dynamically allocated bios_dir with a static array

2016-11-22 Thread Jarkko Sakkinen
On Mon, Nov 14, 2016 at 05:00:50AM -0500, Nayna Jain wrote:
> This commit is based on a commit by Nayna Jain. Replaced dynamically
> allocated bios_dir with a static array as the size is always constant.
> 
> Suggested-by: Jason Gunthorpe 
> Signed-off-by: Nayna Jain 
> Signed-off-by: Jarkko Sakkinen 

This commit remains unreviewed and tested. I'm in the author role here
so I cannot help with this. If that does not happen soon I cannot put
this into the pull request.

/Jarkko


> ---
>  drivers/char/tpm/tpm-chip.c |  9 ---
>  drivers/char/tpm/tpm.h  |  3 ++-
>  drivers/char/tpm/tpm_eventlog.c | 59 
> ++---
>  drivers/char/tpm/tpm_eventlog.h | 10 +++
>  4 files changed, 38 insertions(+), 43 deletions(-)
> 
> diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
> index 836f056..d0c1872 100644
> --- a/drivers/char/tpm/tpm-chip.c
> +++ b/drivers/char/tpm/tpm-chip.c
> @@ -278,14 +278,16 @@ static void tpm_del_char_device(struct tpm_chip *chip)
>  
>  static int tpm1_chip_register(struct tpm_chip *chip)
>  {
> + int rc;
> +
>   if (chip->flags & TPM_CHIP_FLAG_TPM2)
>   return 0;
>  
>   tpm_sysfs_add_device(chip);
>  
> - chip->bios_dir = tpm_bios_log_setup(dev_name(>dev));
> + rc = tpm_bios_log_setup(chip);
>  
> - return 0;
> + return rc;
>  }
>  
>  static void tpm1_chip_unregister(struct tpm_chip *chip)
> @@ -293,8 +295,7 @@ static void tpm1_chip_unregister(struct tpm_chip *chip)
>   if (chip->flags & TPM_CHIP_FLAG_TPM2)
>   return;
>  
> - if (chip->bios_dir)
> - tpm_bios_log_teardown(chip->bios_dir);
> + tpm_bios_log_teardown(chip);
>  }
>  
>  static void tpm_del_legacy_sysfs(struct tpm_chip *chip)
> diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
> index f9401ca..9d69580 100644
> --- a/drivers/char/tpm/tpm.h
> +++ b/drivers/char/tpm/tpm.h
> @@ -40,6 +40,7 @@ enum tpm_const {
>   TPM_BUFSIZE = 4096,
>   TPM_NUM_DEVICES = 65536,
>   TPM_RETRY = 50, /* 5 seconds */
> + TPM_NUM_EVENT_LOG_FILES = 3,
>  };
>  
>  enum tpm_timeout {
> @@ -171,7 +172,7 @@ struct tpm_chip {
>   unsigned long duration[3]; /* jiffies */
>   bool duration_adjusted;
>  
> - struct dentry **bios_dir;
> + struct dentry *bios_dir[TPM_NUM_EVENT_LOG_FILES];
>  
>   const struct attribute_group *groups[3];
>   unsigned int groups_cnt;
> diff --git a/drivers/char/tpm/tpm_eventlog.c b/drivers/char/tpm/tpm_eventlog.c
> index 9467e31..62e9da6 100644
> --- a/drivers/char/tpm/tpm_eventlog.c
> +++ b/drivers/char/tpm/tpm_eventlog.c
> @@ -368,54 +368,47 @@ static int is_bad(void *p)
>   return 0;
>  }
>  
> -struct dentry **tpm_bios_log_setup(const char *name)
> +int tpm_bios_log_setup(struct tpm_chip *chip)
>  {
> - struct dentry **ret = NULL, *tpm_dir, *bin_file, *ascii_file;
> + const char *name = dev_name(>dev);
> + unsigned int cnt;
>  
> - tpm_dir = securityfs_create_dir(name, NULL);
> - if (is_bad(tpm_dir))
> - goto out;
> + cnt = 0;
> + chip->bios_dir[cnt] = securityfs_create_dir(name, NULL);
> + if (is_bad(chip->bios_dir[cnt]))
> + goto err;
> + cnt++;
>  
> - bin_file =
> + chip->bios_dir[cnt] =
>   securityfs_create_file("binary_bios_measurements",
> -0440, tpm_dir,
> +0440, chip->bios_dir[0],
>  (void *)_binary_b_measurements_seqops,
>  _bios_measurements_ops);
> - if (is_bad(bin_file))
> - goto out_tpm;
> + if (is_bad(chip->bios_dir[cnt]))
> + goto err;
> + cnt++;
>  
> - ascii_file =
> + chip->bios_dir[cnt] =
>   securityfs_create_file("ascii_bios_measurements",
> -0440, tpm_dir,
> +0440, chip->bios_dir[0],
>  (void *)_ascii_b_measurements_seqops,
>  _bios_measurements_ops);
> - if (is_bad(ascii_file))
> - goto out_bin;
> + if (is_bad(chip->bios_dir[cnt]))
> + goto err;
> + cnt++;
>  
> - ret = kmalloc(3 * sizeof(struct dentry *), GFP_KERNEL);
> - if (!ret)
> - goto out_ascii;
> -
> - ret[0] = ascii_file;
> - ret[1] = bin_file;
> - ret[2] = tpm_dir;
> -
> - return ret;
> + return 0;
>  
> -out_ascii:
> - securityfs_remove(ascii_file);
> -out_bin:
> - securityfs_remove(bin_file);
> -out_tpm:
> - securityfs_remove(tpm_dir);
> -out:
> - return NULL;
> +err:
> + chip->bios_dir[cnt] = NULL;
> + tpm_bios_log_teardown(chip);
> + return -EIO;
>  }
>  
> -void tpm_bios_log_teardown(struct dentry **lst)
> +void tpm_bios_log_teardown(struct tpm_chip *chip)
>  {
>  

[tpmdd-devel] [PATCH v6 3/9] tpm: replace dynamically allocated bios_dir with a static array

2016-11-14 Thread Nayna Jain
This commit is based on a commit by Nayna Jain. Replaced dynamically
allocated bios_dir with a static array as the size is always constant.

Suggested-by: Jason Gunthorpe 
Signed-off-by: Nayna Jain 
Signed-off-by: Jarkko Sakkinen 
---
 drivers/char/tpm/tpm-chip.c |  9 ---
 drivers/char/tpm/tpm.h  |  3 ++-
 drivers/char/tpm/tpm_eventlog.c | 59 ++---
 drivers/char/tpm/tpm_eventlog.h | 10 +++
 4 files changed, 38 insertions(+), 43 deletions(-)

diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
index 836f056..d0c1872 100644
--- a/drivers/char/tpm/tpm-chip.c
+++ b/drivers/char/tpm/tpm-chip.c
@@ -278,14 +278,16 @@ static void tpm_del_char_device(struct tpm_chip *chip)
 
 static int tpm1_chip_register(struct tpm_chip *chip)
 {
+   int rc;
+
if (chip->flags & TPM_CHIP_FLAG_TPM2)
return 0;
 
tpm_sysfs_add_device(chip);
 
-   chip->bios_dir = tpm_bios_log_setup(dev_name(>dev));
+   rc = tpm_bios_log_setup(chip);
 
-   return 0;
+   return rc;
 }
 
 static void tpm1_chip_unregister(struct tpm_chip *chip)
@@ -293,8 +295,7 @@ static void tpm1_chip_unregister(struct tpm_chip *chip)
if (chip->flags & TPM_CHIP_FLAG_TPM2)
return;
 
-   if (chip->bios_dir)
-   tpm_bios_log_teardown(chip->bios_dir);
+   tpm_bios_log_teardown(chip);
 }
 
 static void tpm_del_legacy_sysfs(struct tpm_chip *chip)
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index f9401ca..9d69580 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -40,6 +40,7 @@ enum tpm_const {
TPM_BUFSIZE = 4096,
TPM_NUM_DEVICES = 65536,
TPM_RETRY = 50, /* 5 seconds */
+   TPM_NUM_EVENT_LOG_FILES = 3,
 };
 
 enum tpm_timeout {
@@ -171,7 +172,7 @@ struct tpm_chip {
unsigned long duration[3]; /* jiffies */
bool duration_adjusted;
 
-   struct dentry **bios_dir;
+   struct dentry *bios_dir[TPM_NUM_EVENT_LOG_FILES];
 
const struct attribute_group *groups[3];
unsigned int groups_cnt;
diff --git a/drivers/char/tpm/tpm_eventlog.c b/drivers/char/tpm/tpm_eventlog.c
index 9467e31..62e9da6 100644
--- a/drivers/char/tpm/tpm_eventlog.c
+++ b/drivers/char/tpm/tpm_eventlog.c
@@ -368,54 +368,47 @@ static int is_bad(void *p)
return 0;
 }
 
-struct dentry **tpm_bios_log_setup(const char *name)
+int tpm_bios_log_setup(struct tpm_chip *chip)
 {
-   struct dentry **ret = NULL, *tpm_dir, *bin_file, *ascii_file;
+   const char *name = dev_name(>dev);
+   unsigned int cnt;
 
-   tpm_dir = securityfs_create_dir(name, NULL);
-   if (is_bad(tpm_dir))
-   goto out;
+   cnt = 0;
+   chip->bios_dir[cnt] = securityfs_create_dir(name, NULL);
+   if (is_bad(chip->bios_dir[cnt]))
+   goto err;
+   cnt++;
 
-   bin_file =
+   chip->bios_dir[cnt] =
securityfs_create_file("binary_bios_measurements",
-  0440, tpm_dir,
+  0440, chip->bios_dir[0],
   (void *)_binary_b_measurements_seqops,
   _bios_measurements_ops);
-   if (is_bad(bin_file))
-   goto out_tpm;
+   if (is_bad(chip->bios_dir[cnt]))
+   goto err;
+   cnt++;
 
-   ascii_file =
+   chip->bios_dir[cnt] =
securityfs_create_file("ascii_bios_measurements",
-  0440, tpm_dir,
+  0440, chip->bios_dir[0],
   (void *)_ascii_b_measurements_seqops,
   _bios_measurements_ops);
-   if (is_bad(ascii_file))
-   goto out_bin;
+   if (is_bad(chip->bios_dir[cnt]))
+   goto err;
+   cnt++;
 
-   ret = kmalloc(3 * sizeof(struct dentry *), GFP_KERNEL);
-   if (!ret)
-   goto out_ascii;
-
-   ret[0] = ascii_file;
-   ret[1] = bin_file;
-   ret[2] = tpm_dir;
-
-   return ret;
+   return 0;
 
-out_ascii:
-   securityfs_remove(ascii_file);
-out_bin:
-   securityfs_remove(bin_file);
-out_tpm:
-   securityfs_remove(tpm_dir);
-out:
-   return NULL;
+err:
+   chip->bios_dir[cnt] = NULL;
+   tpm_bios_log_teardown(chip);
+   return -EIO;
 }
 
-void tpm_bios_log_teardown(struct dentry **lst)
+void tpm_bios_log_teardown(struct tpm_chip *chip)
 {
int i;
 
-   for (i = 0; i < 3; i++)
-   securityfs_remove(lst[i]);
+   for (i = (TPM_NUM_EVENT_LOG_FILES - 1); i >= 0; i--)
+   securityfs_remove(chip->bios_dir[i]);
 }
diff --git a/drivers/char/tpm/tpm_eventlog.h b/drivers/char/tpm/tpm_eventlog.h
index 8de62b0..fd3357e 100644
--- a/drivers/char/tpm/tpm_eventlog.h
+++