Re: [PATCH 1/3] tpm: Hold the kref during tpm_chip_find_get

From: Jason Gunthorpe
Date: Sat Feb 13 2016 - 10:46:46 EST


Hi Jarkko,

I found a bug in this last night, please hold off.

Jason


On Feb 13, 2016 3:08 AM, Jarkko Sakkinen <jarkko.sakkinen@xxxxxxxxxxxxxxx> wrote:
>
> On Fri, Feb 12, 2016 at 05:04:29PM -0700, Jason Gunthorpe wrote:
> > This was missed during the struct device conversion, we
> > need to hold a kref on the chip to make sure it isn't freed.
> >
> > Signed-off-by: Jason Gunthorpe <jgunthorpe@xxxxxxxxxxxxxxxxxxxx>
>
> Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@xxxxxxxxxxxxxx>
>
> For rest of the patches I'll look at them post-v4.5. I'm still waiting
> for my first pull request containing fixes for that release to be
> taken.
>
> James, would it be possible to take the pull request containing fixes
> soon that I origianally sent already in Jan and bit updated version
> few days ago [1]? I still have one more pull request coming after that. It will
> contain only few line changes:
>
> * Missing put_device() in two places.
> * There is a small change to ABI behavior (I'll post it
> Â soon) of policy sealing so I really need it for this release because
> Â 4.5 is the first release containing this feature and I cannot change
> Â it when the release is tagged.
>
> Thank you.
>
> [1] http://www.gossamer-threads.com/lists/linux/kernel/2366902
>
> /Jarkko
>
>
> > ---
> >Â drivers/char/tpm/tpm-chip.c | 2 ++
> >Â drivers/char/tpm/tpm.hÂÂÂÂÂ | 1 +
> >Â 2 files changed, 3 insertions(+)
> >
> > diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
> > index 45cc39aabeee..ae2fed8a162b 100644
> > --- a/drivers/char/tpm/tpm-chip.c
> > +++ b/drivers/char/tpm/tpm-chip.c
> > @@ -53,6 +53,8 @@ struct tpm_chip *tpm_chip_find_get(int chip_num)
> >Â chip = pos;
> >Â break;
> >Â }
> > +
> > + get_device(&chip->dev);
> >Â }
> >Â rcu_read_unlock();
> >Â return chip;
> > diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
> > index 542a80cbfd9c..f6ba79d91857 100644
> > --- a/drivers/char/tpm/tpm.h
> > +++ b/drivers/char/tpm/tpm.h
> > @@ -207,6 +207,7 @@ struct tpm_chip {
> >Â static inline void tpm_chip_put(struct tpm_chip *chip)
> >Â {
> >Â module_put(chip->pdev->driver->owner);
> > + put_device(&chip->dev);
> >Â }
>
> >Â static inline int tpm_read_index(int base, int index)
> > --
> > 2.1.4
> >