All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Berger <stefanb@linux.vnet.ibm.com>
To: tpmdd-devel@lists.sourceforge.net
Cc: jarkko.sakkinen@linux.intel.com, jgunthorpe@obsidianresearch.com,
	linux-security-module@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Stefan Berger <stefanb@linux.vnet.ibm.com>
Subject: [PATCH v8 04/10] tpm: Get rid of module locking
Date: Sun, 13 Mar 2016 18:54:34 -0400	[thread overview]
Message-ID: <1457909680-14085-5-git-send-email-stefanb@linux.vnet.ibm.com> (raw)
In-Reply-To: <1457909680-14085-1-git-send-email-stefanb@linux.vnet.ibm.com>

Now that the tpm core has strong locking around 'ops' it is possible
to remove a TPM driver, module and all, even while user space still
has things like /dev/tpmX open. For consistency and simplicity, drop
the module locking entirely.

The module lock can be dropped since /dev/tpmX holds the reader lock
on 'ops' while using 'ops' and this prevents the module from un-
registering, which needs the writer lock. Once the module unregistered
the 'ops' cannot be found anymore.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Reviewed-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
---
 drivers/char/tpm/tpm-chip.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
index 5793ea1..6636728 100644
--- a/drivers/char/tpm/tpm-chip.c
+++ b/drivers/char/tpm/tpm-chip.c
@@ -57,9 +57,6 @@ int tpm_try_get_ops(struct tpm_chip *chip)
 	if (!chip->ops)
 		goto out_lock;
 
-	if (!try_module_get(chip->dev.parent->driver->owner))
-		goto out_lock;
-
 	return 0;
 out_lock:
 	up_read(&chip->ops_sem);
@@ -77,7 +74,6 @@ EXPORT_SYMBOL_GPL(tpm_try_get_ops);
  */
 void tpm_put_ops(struct tpm_chip *chip)
 {
-	module_put(chip->dev.parent->driver->owner);
 	up_read(&chip->ops_sem);
 	put_device(&chip->dev);
 }
@@ -183,7 +179,7 @@ struct tpm_chip *tpmm_chip_alloc(struct device *dev,
 		goto out;
 
 	cdev_init(&chip->cdev, &tpm_fops);
-	chip->cdev.owner = dev->driver->owner;
+	chip->cdev.owner = THIS_MODULE;
 	chip->cdev.kobj.parent = &chip->dev.kobj;
 
 	rc = devm_add_action(dev, (void (*)(void *)) put_device, &chip->dev);
-- 
2.4.3

WARNING: multiple messages have this Message-ID (diff)
From: Stefan Berger <stefanb-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
To: tpmdd-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Cc: linux-security-module-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: [PATCH v8 04/10] tpm: Get rid of module locking
Date: Sun, 13 Mar 2016 18:54:34 -0400	[thread overview]
Message-ID: <1457909680-14085-5-git-send-email-stefanb@linux.vnet.ibm.com> (raw)
In-Reply-To: <1457909680-14085-1-git-send-email-stefanb-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>

Now that the tpm core has strong locking around 'ops' it is possible
to remove a TPM driver, module and all, even while user space still
has things like /dev/tpmX open. For consistency and simplicity, drop
the module locking entirely.

The module lock can be dropped since /dev/tpmX holds the reader lock
on 'ops' while using 'ops' and this prevents the module from un-
registering, which needs the writer lock. Once the module unregistered
the 'ops' cannot be found anymore.

Signed-off-by: Stefan Berger <stefanb-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
Reviewed-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
---
 drivers/char/tpm/tpm-chip.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
index 5793ea1..6636728 100644
--- a/drivers/char/tpm/tpm-chip.c
+++ b/drivers/char/tpm/tpm-chip.c
@@ -57,9 +57,6 @@ int tpm_try_get_ops(struct tpm_chip *chip)
 	if (!chip->ops)
 		goto out_lock;
 
-	if (!try_module_get(chip->dev.parent->driver->owner))
-		goto out_lock;
-
 	return 0;
 out_lock:
 	up_read(&chip->ops_sem);
@@ -77,7 +74,6 @@ EXPORT_SYMBOL_GPL(tpm_try_get_ops);
  */
 void tpm_put_ops(struct tpm_chip *chip)
 {
-	module_put(chip->dev.parent->driver->owner);
 	up_read(&chip->ops_sem);
 	put_device(&chip->dev);
 }
@@ -183,7 +179,7 @@ struct tpm_chip *tpmm_chip_alloc(struct device *dev,
 		goto out;
 
 	cdev_init(&chip->cdev, &tpm_fops);
-	chip->cdev.owner = dev->driver->owner;
+	chip->cdev.owner = THIS_MODULE;
 	chip->cdev.kobj.parent = &chip->dev.kobj;
 
 	rc = devm_add_action(dev, (void (*)(void *)) put_device, &chip->dev);
-- 
2.4.3


------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140

  parent reply	other threads:[~2016-03-13 22:56 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-13 22:54 [PATCH v8 00/10] Multi-instance vTPM proxy driver Stefan Berger
2016-03-13 22:54 ` Stefan Berger
2016-03-13 22:54 ` [PATCH v8 01/10] tpm: Get rid of chip->pdev Stefan Berger
2016-03-13 22:54   ` Stefan Berger
2016-03-13 22:54 ` [PATCH v8 02/10] tpm: Get rid of devname Stefan Berger
2016-03-13 22:54   ` Stefan Berger
2016-03-13 22:54 ` [PATCH v8 03/10] tpm: Provide strong locking for device removal Stefan Berger
2016-03-13 22:54   ` Stefan Berger
2016-03-13 22:54 ` Stefan Berger [this message]
2016-03-13 22:54   ` [PATCH v8 04/10] tpm: Get rid of module locking Stefan Berger
2016-03-13 22:54 ` [PATCH v8 05/10] tpm: Split out the devm stuff from tpmm_chip_alloc Stefan Berger
2016-03-13 22:54   ` Stefan Berger
2016-03-13 22:54 ` [PATCH v8 06/10] tpm: Replace device number bitmap with IDR Stefan Berger
2016-03-13 22:54   ` Stefan Berger
2016-03-15  5:58   ` Jarkko Sakkinen
2016-03-13 22:54 ` [PATCH v8 07/10] tpm: Introduce TPM_CHIP_FLAG_VIRTUAL Stefan Berger
2016-03-13 22:54   ` Stefan Berger
2016-03-13 22:54 ` [PATCH v8 08/10] tpm: Proxy driver for supporting multiple emulated TPMs Stefan Berger
2016-03-13 22:54   ` Stefan Berger
2016-03-14 16:26   ` Jarkko Sakkinen
2016-03-16 12:09   ` Jarkko Sakkinen
2016-03-16 12:09     ` Jarkko Sakkinen
2016-03-16 13:49     ` Stefan Berger
2016-03-16 13:49       ` Stefan Berger
2016-03-16 17:49     ` Jason Gunthorpe
2016-03-16 20:37       ` Jarkko Sakkinen
2016-03-16 20:37         ` Jarkko Sakkinen
2016-03-16 20:42   ` Jarkko Sakkinen
2016-03-17 17:45     ` Stefan Berger
2016-03-17 17:45       ` Stefan Berger
2016-03-18  8:52       ` Jarkko Sakkinen
     [not found]         ` <20160318085200.GA5604-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-03-18 11:58           ` Stefan Berger
2016-03-18 13:06         ` Jarkko Sakkinen
2016-03-13 22:54 ` [PATCH v8 09/10] tpm: Initialize TPM and get durations and timeouts Stefan Berger
2016-03-13 22:54   ` Stefan Berger
2016-03-22  6:34   ` [v8,09/10] " Jarkko Sakkinen
2016-03-22 10:54     ` Stefan Berger
2016-03-29 15:31       ` [v8,09/10] tpm: Initialize TPM and get durations and timeoutsg Jarkko Sakkinen
2016-03-29 15:53         ` Stefan Berger
2016-03-29 15:53           ` Stefan Berger
2016-03-13 22:54 ` [PATCH v8 10/10] tpm: Add documentation for the tpm_vtpm device driver Stefan Berger
2016-03-13 22:54   ` Stefan Berger
2016-03-29 16:24 ` [PATCH v8 00/10] Multi-instance vTPM proxy driver Jarkko Sakkinen
     [not found]   ` <20160329162433.GB24833-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-03-29 16:31     ` Stefan Berger

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=1457909680-14085-5-git-send-email-stefanb@linux.vnet.ibm.com \
    --to=stefanb@linux.vnet.ibm.com \
    --cc=jarkko.sakkinen@linux.intel.com \
    --cc=jgunthorpe@obsidianresearch.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.