From: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
To: "Hon Ching(Vicky) Lo" <honclo@linux.vnet.ibm.com>
Cc: tpmdd-devel@lists.sourceforge.net,
Ashley Lai <ashley@ashleylai.com>,
linux-kernel@vger.kernel.org, stable@vger.kernel.org,
Peter Huewe <PeterHuewe@gmx.de>
Subject: Re: [tpmdd-devel] [PATCH] vTPM: Fix missing NULL check
Date: Mon, 6 Mar 2017 16:19:46 -0700 [thread overview]
Message-ID: <20170306231946.GA23953@obsidianresearch.com> (raw)
In-Reply-To: <1488839535-11822-1-git-send-email-honclo@linux.vnet.ibm.com>
On Mon, Mar 06, 2017 at 05:32:15PM -0500, Hon Ching(Vicky) Lo wrote:
> The current code passes the address of tpm_chip as the argument to
> dev_get_drvdata() without prior NULL check in
> tpm_ibmvtpm_get_desired_dma. This resulted an oops during kernel
> boot when vTPM is enabled in Power partition configured in active
> memory sharing mode.
>
> The vio_driver's get_desired_dma() is called before the probe(), which
> for vtpm is tpm_ibmvtpm_probe, and it's this latter function that
> initializes the driver and set data. Attempting to get data before
> the probe() caused the problem.
>
> This patch adds a NULL check to the tpm_ibmvtpm_get_desired_dma.
Does this also need a hunk in tpm_ibmvtpm_remove to null the drvdata
after removal, or does something in the driver code guarentee it is
null'd after remove?
We don't want to use-after-free chip on the next probe cycle.
> static unsigned long tpm_ibmvtpm_get_desired_dma(struct vio_dev *vdev)
> {
> struct tpm_chip *chip = dev_get_drvdata(&vdev->dev);
> - struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
> + struct ibmvtpm_dev *ibmvtpm = NULL;
> +
> + if (chip)
> + ibmvtpm = dev_get_drvdata(&chip->dev);
Maybe just do this, clearer that it is chip that can be null. We do
not want to see drivers testing their chip drvdata against null.
Also, how does locking work here? Does the vio core prevent
tpm_ibmvtpm_get_desired_dma and tpm_ibmvtpm_remove from running
concurrently?
diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c
index 946025a7413b6b..ced6b9f0008dc2 100644
--- a/drivers/char/tpm/tpm_ibmvtpm.c
+++ b/drivers/char/tpm/tpm_ibmvtpm.c
@@ -294,6 +294,8 @@ static int tpm_ibmvtpm_remove(struct vio_dev *vdev)
kfree(ibmvtpm->rtce_buf);
}
+ /* For tpm_ibmvtpm_get_desired_dma */
+ dev_set_drvdata(&vdev->dev, NULL);
kfree(ibmvtpm);
return 0;
@@ -309,15 +311,16 @@ static int tpm_ibmvtpm_remove(struct vio_dev *vdev)
static unsigned long tpm_ibmvtpm_get_desired_dma(struct vio_dev *vdev)
{
struct tpm_chip *chip = dev_get_drvdata(&vdev->dev);
- struct ibmvtpm_dev *ibmvtpm = dev_get_drvdata(&chip->dev);
+ struct ibmvtpm_dev *ibmvtpm;
/* ibmvtpm initializes at probe time, so the data we are
* asking for may not be set yet. Estimate that 4K required
* for TCE-mapped buffer in addition to CRQ.
*/
- if (!ibmvtpm)
+ if (!chip)
return CRQ_RES_BUF_SIZE + PAGE_SIZE;
+ ibmvtpm = dev_get_drvdata(&chip->dev);
return CRQ_RES_BUF_SIZE + ibmvtpm->rtce_size;
}
next prev parent reply other threads:[~2017-03-07 0:39 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-06 22:32 [PATCH] vTPM: Fix missing NULL check Hon Ching(Vicky) Lo
2017-03-06 23:19 ` Jason Gunthorpe [this message]
2017-03-08 4:12 ` [tpmdd-devel] " Hon Ching(Vicky) Lo
2017-03-08 17:17 ` Jason Gunthorpe
2017-03-08 20:28 ` Hon Ching(Vicky) Lo
2017-03-08 20:52 ` Jason Gunthorpe
2017-03-14 22:42 ` Hon Ching(Vicky) Lo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170306231946.GA23953@obsidianresearch.com \
--to=jgunthorpe@obsidianresearch.com \
--cc=PeterHuewe@gmx.de \
--cc=ashley@ashleylai.com \
--cc=honclo@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=tpmdd-devel@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).