Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751949AbcJBHlg (ORCPT ); Sun, 2 Oct 2016 03:41:36 -0400 Received: from mga14.intel.com ([192.55.52.115]:42482 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750953AbcJBHlc (ORCPT ); Sun, 2 Oct 2016 03:41:32 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,431,1473145200"; d="scan'208";a="1039255443" From: Tomas Winkler To: tpmdd-devel@lists.sourceforge.net, Jason Gunthorpe , Jarkko Sakkinen Cc: linux-kernel@vger.kernel.org, Tomas Winkler Subject: [PATCH] tpm: don't destroy chip device prematurely Date: Sun, 2 Oct 2016 10:39:31 +0300 Message-Id: <1475393971-12715-1-git-send-email-tomas.winkler@intel.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1226 Lines: 37 In tpm_del_char_device device_del is called prior to tpm2_shutdown where it is still used. Fortunately, so far chip->dev was used only for printouts int tpm2_shutdown flow, hence system didn't crash. But with the introduction of runtime power management it will result in shutting down the parent device while it still in use. Fixes: 20e0152393b41 ("tpm: fix crash in tpm_tis deinitialization") Signed-off-by: Tomas Winkler --- drivers/char/tpm/tpm-chip.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c index e5950131bd90..b1cb0aae8e66 100644 --- a/drivers/char/tpm/tpm-chip.c +++ b/drivers/char/tpm/tpm-chip.c @@ -261,7 +261,6 @@ static int tpm_add_char_device(struct tpm_chip *chip) static void tpm_del_char_device(struct tpm_chip *chip) { cdev_del(&chip->cdev); - device_del(&chip->dev); /* Make the chip unavailable. */ mutex_lock(&idr_lock); @@ -274,6 +273,8 @@ static void tpm_del_char_device(struct tpm_chip *chip) tpm2_shutdown(chip, TPM2_SU_CLEAR); chip->ops = NULL; up_write(&chip->ops_sem); + + device_del(&chip->dev); } static int tpm1_chip_register(struct tpm_chip *chip) -- 2.7.4