Message ID | 20161122165856.GD3956@obsidianresearch.com |
---|---|
State | New |
Headers | show |
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 <jgunthorpe@obsidianresearch.com> > > > Signed-off-by: Nayna Jain <nayna@linux.vnet.ibm.com> > > > Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@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 ------------------------------------------------------------------------------
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 ------------------------------------------------------------------------------
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 ------------------------------------------------------------------------------
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 ------------------------------------------------------------------------------
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 ------------------------------------------------------------------------------
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 *)&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)