From: Jarkko Sakkinen jarkko@kernel.org
When TPM 2.0 trusted keys code was moved to the trusted keys subsystem,
the operations were unwrapped from tpm_try_get_ops() and tpm_put_ops(),
which are used to take temporarily the ownership of the TPM chip. The
ownership is only taken inside tpm_send(), but this is not sufficient,
as in the key load TPM2_CC_LOAD, TPM2_CC_UNSEAL and TPM2_FLUSH_CONTEXT
need to be done as a one single atom.
Take the TPM chip ownership before sending anything with
tpm_try_get_ops() and tpm_put_ops(), and use tpm_transmit_cmd() to send
TPM commands instead of tpm_send(), reverting back to the old behaviour.
Fixes: 2e19e10131a0 ("KEYS: trusted: Move TPM2 trusted keys code")
Reported-by: "James E.J. Bottomley" James.Bottomley@HansenPartnership.com
Cc: stable@vger.kernel.org
Cc: David Howells dhowells@redhat.com
Cc: Mimi Zohar zohar@linux.ibm.com
Cc: Sumit Garg sumit.garg@linaro.org
Signed-off-by: Jarkko Sakkinen jarkko@kernel.org
drivers/char/tpm/tpm.h | 4 ----
include/linux/tpm.h | 5 ++++-
security/keys/trusted-keys/trusted_tpm2.c | 24 ++++++++++++++++++-----
3 files changed, 23 insertions(+), 10 deletions(-)