Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965544AbcKXN6H (ORCPT ); Thu, 24 Nov 2016 08:58:07 -0500 Received: from mga09.intel.com ([134.134.136.24]:62060 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964862AbcKXN6G (ORCPT ); Thu, 24 Nov 2016 08:58:06 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,543,1473145200"; d="scan'208";a="905109576" Date: Thu, 24 Nov 2016 15:57:23 +0200 From: Jarkko Sakkinen To: Jason Gunthorpe Cc: Nayna Jain , tpmdd-devel@lists.sourceforge.net, peterhuewe@gmx.de, tpmdd@selhorst.net, linux-kernel@vger.kernel.org, linux-security-module@vger.kernel.org Subject: Re: [PATCH v6 3/9] tpm: replace dynamically allocated bios_dir with a static array Message-ID: <20161124135723.kfafipftppjyr5ip@intel.com> References: <1479117656-12403-1-git-send-email-nayna@linux.vnet.ibm.com> <1479117656-12403-4-git-send-email-nayna@linux.vnet.ibm.com> <20161122112333.7ootyrbssd6pkrjb@intel.com> <20161122165856.GD3956@obsidianresearch.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20161122165856.GD3956@obsidianresearch.com> Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo User-Agent: Mutt/1.6.2-neo (2016-08-21) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4351 Lines: 133 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 > > > 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: 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