diff options
author | Andi Shyti <andi.shyti@gmail.com> | 2012-05-28 12:42:45 -0400 |
---|---|---|
committer | Rajiv Andrade <srajiv@linux.vnet.ibm.com> | 2012-06-12 17:53:51 -0400 |
commit | 3072928ff2457642af0da745b88f0420b4596c48 (patch) | |
tree | d097ad703bcc2f25872bac17a75088a2af4ea725 /drivers/char/tpm | |
parent | dad79cb89254ce646906846b0f0cf7995d626710 (diff) |
tpm: check the chip reference before using it
If a driver calls tpm_dev_vendor_release for a device already released
then the driver will oops.
Signed-off-by: Andi Shyti <andi.shyti@gmail.com>
Signed-off-by: Peter Huewe <peterhuewe@gmx.de>
Signed-off-by: Rajiv Andrade <srajiv@linux.vnet.ibm.com>
Diffstat (limited to 'drivers/char/tpm')
-rw-r--r-- | drivers/char/tpm/tpm.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c index dae254d53723..d39b1f60ba23 100644 --- a/drivers/char/tpm/tpm.c +++ b/drivers/char/tpm/tpm.c | |||
@@ -1330,6 +1330,9 @@ EXPORT_SYMBOL_GPL(tpm_pm_resume); | |||
1330 | 1330 | ||
1331 | void tpm_dev_vendor_release(struct tpm_chip *chip) | 1331 | void tpm_dev_vendor_release(struct tpm_chip *chip) |
1332 | { | 1332 | { |
1333 | if (!chip) | ||
1334 | return; | ||
1335 | |||
1333 | if (chip->vendor.release) | 1336 | if (chip->vendor.release) |
1334 | chip->vendor.release(chip->dev); | 1337 | chip->vendor.release(chip->dev); |
1335 | 1338 | ||
@@ -1347,6 +1350,9 @@ void tpm_dev_release(struct device *dev) | |||
1347 | { | 1350 | { |
1348 | struct tpm_chip *chip = dev_get_drvdata(dev); | 1351 | struct tpm_chip *chip = dev_get_drvdata(dev); |
1349 | 1352 | ||
1353 | if (!chip) | ||
1354 | return; | ||
1355 | |||
1350 | tpm_dev_vendor_release(chip); | 1356 | tpm_dev_vendor_release(chip); |
1351 | 1357 | ||
1352 | chip->release(dev); | 1358 | chip->release(dev); |