On Fri, 2019-12-13 at 11:10 +0530, Sumit Garg wrote: > On Thu, 12 Dec 2019 at 23:28, James Bottomley > <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx> wrote: > > > > The original code, before it was moved into security/keys/trusted- > > keys had a flush after the blob unseal. Without that flush, the > > volatile handles increase in the TPM until it becomes unusable and > > the system either has to be rebooted or the TPM volatile area > > manually flushed. Fix by adding back the lost flush, which we now > > have to export because of the relocation of the trusted key code > > may cause the consumer to be modular. > > > > Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.c > > om> > > Fixes: 2e19e10131a0 ("KEYS: trusted: Move TPM2 trusted keys code") > > > > Overall looks good to me with following minor comment. > > > --- > > drivers/char/tpm/tpm.h | 1 - > > drivers/char/tpm/tpm2-cmd.c | 1 + > > include/linux/tpm.h | 1 + > > security/keys/trusted-keys/trusted_tpm2.c | 1 + > > 4 files changed, 3 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h > > index b9e1547be6b5..5620747da0cf 100644 > > --- a/drivers/char/tpm/tpm.h > > +++ b/drivers/char/tpm/tpm.h > > @@ -218,7 +218,6 @@ int tpm2_pcr_read(struct tpm_chip *chip, u32 > > pcr_idx, > > int tpm2_pcr_extend(struct tpm_chip *chip, u32 pcr_idx, > > struct tpm_digest *digests); > > int tpm2_get_random(struct tpm_chip *chip, u8 *dest, size_t max); > > -void tpm2_flush_context(struct tpm_chip *chip, u32 handle); > > ssize_t tpm2_get_tpm_pt(struct tpm_chip *chip, u32 property_id, > > u32 *value, const char *desc); > > > > diff --git a/drivers/char/tpm/tpm2-cmd.c b/drivers/char/tpm/tpm2- > > cmd.c > > index fdb457704aa7..13696deceae8 100644 > > --- a/drivers/char/tpm/tpm2-cmd.c > > +++ b/drivers/char/tpm/tpm2-cmd.c > > @@ -362,6 +362,7 @@ void tpm2_flush_context(struct tpm_chip *chip, > > u32 handle) > > tpm_transmit_cmd(chip, &buf, 0, "flushing context"); > > tpm_buf_destroy(&buf); > > } > > +EXPORT_SYMBOL_GPL(tpm2_flush_context); > > > > struct tpm2_get_cap_out { > > u8 more_data; > > diff --git a/include/linux/tpm.h b/include/linux/tpm.h > > index 0d6e949ba315..03e9b184411b 100644 > > --- a/include/linux/tpm.h > > +++ b/include/linux/tpm.h > > @@ -403,6 +403,7 @@ extern int tpm_pcr_extend(struct tpm_chip > > *chip, u32 pcr_idx, > > extern int tpm_send(struct tpm_chip *chip, void *cmd, size_t > > buflen); > > extern int tpm_get_random(struct tpm_chip *chip, u8 *data, size_t > > max); > > extern struct tpm_chip *tpm_default_chip(void); > > +void tpm2_flush_context(struct tpm_chip *chip, u32 handle); > > Shouldn't this be declared as "extern" similar to other APIs? extern has no meaning for function declarations and our coding guide does say do not use it but I think it's advisory not mandatory so I've no objection to changing it if we prefer consistency over the style guide. > Also, I think we need "#else" part for this API as well. No, we shouldn't ... the #else part is only for functions which are called when the TPM isn't compiled in. That should never happen with tpm2_flush_context, so if it ever does we want the compile to break. James