>-----Original Message----- >From: linux-integrity-owner@xxxxxxxxxxxxxxx [mailto:linux-integrity- >owner@xxxxxxxxxxxxxxx] On Behalf Of Jason Gunthorpe >Sent: Thursday, December 21, 2017 12:39 PM >To: Shaikh, Azhar <azhar.shaikh@xxxxxxxxx> >Cc: jarkko.sakkinen@xxxxxxxxxxxxxxx; javierm@xxxxxxxxxx; >peterhuewe@xxxxxx; linux-security-module@xxxxxxxxxxxxxxx; linux- >integrity@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; tpmdd- >devel@xxxxxxxxxxxxxxxxxxxxx >Subject: Re: [PATCH] tpm: Fix the driver cleanup code > >On Thu, Dec 21, 2017 at 08:31:14PM +0000, Shaikh, Azhar wrote: > >> Yes I thought about it too. But if some other chip->ops function in >> future, which *might* be in this same case, hence for that introduced >> this flag. > >It can't be - the ops struct is constant, can't be modified, and tpm_tis_core >controls what is set. If someone future person meddles in this then they can >fix here to. > Yes, I checked this part. What I was referring to is any other callback function similar to clk_enable if gets added in future and then needs to Access ops even after it is set to NULL... >Recommend a short comment in the ops clk_enale initializer and call direct? > But yes I get your point now. So do you mean something like this? diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c index d9099281fc2e..1187e72483f2 100644 --- a/drivers/char/tpm/tpm_tis_core.c +++ b/drivers/char/tpm/tpm_tis_core.c @@ -716,8 +716,7 @@ void tpm_tis_remove(struct tpm_chip *chip) u32 interrupt; int rc; - if (chip->ops->clk_enable != NULL) - chip->ops->clk_enable(chip, true); + tpm_tis_clkrun_enable(chip, true); rc = tpm_tis_read32(priv, reg, &interrupt); if (rc < 0) @@ -725,14 +724,8 @@ void tpm_tis_remove(struct tpm_chip *chip) tpm_tis_write32(priv, reg, ~TPM_GLOBAL_INT_ENABLE & interrupt); - if (chip->ops->clk_enable != NULL) - chip->ops->clk_enable(chip, false); + tpm_tis_clkrun_enable(chip, false); - if (chip->flags & TPM_CHIP_FLAG_DO_NOT_CLEAR_OPS) { - down_write(&chip->ops_sem); - chip->ops = NULL; - up_write(&chip->ops_sem); - } if (priv->ilb_base_addr) iounmap(priv->ilb_base_addr); } >Jason Regards, Azhar Shaikh