On Tue, Nov 22, 2016 at 09:58:56AM -0700, Jason Gunthorpe wrote: > 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 <jguntho...@obsidianresearch.com> > > > Signed-off-by: Nayna Jain <na...@linux.vnet.ibm.com> > > > Signed-off-by: Jarkko Sakkinen <jarkko.sakki...@linux.intel.com> > > > > 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:
That was a great catch. Thank you. > 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; > -} > - This function is only confusing indirection anyway. Does not serve really any justifiable purpose. > 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 *)&chip->bin_log_seqops, > &tpm_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 *)&chip->ascii_log_seqops, > &tpm_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) I manually added the changes to: tpm: replace dynamically allocated bios_dir with a static array The code was changed so radically after that patch so it was the cleanest way. I need to declare 'rc' in that patch. I changed also this "int rc = 0;" to "int rc;" as it does not need to be initialized in the declaration. This affects: tpm: have event log use the tpm_chip And finally I needed the update this patch too to accomadate the doc change: tpm: Fix handling of missing event log Could you check through those patches that I didn't blow things up, which could easily happen given that I needed to update three patches and give your final reviewed-by if it looks good to you? In the meanwhile I'll start running sparse, coccicheck etc. for the release content. /Jarkko