From 74c95e079dc8b3c53ade90b2070458c0c69f3fdf Mon Sep 17 00:00:00 2001 From: Oleksandr Natalenko Date: Tue, 8 Apr 2025 19:51:44 +0200 Subject: fixes-6.14: update tpm2_start_auth_session() fix Signed-off-by: Oleksandr Natalenko --- drivers/char/tpm/tpm2-sessions.c | 2 +- include/linux/tpm.h | 38 +++++++++++++++----------------- 2 files changed, 19 insertions(+), 21 deletions(-) --- a/drivers/char/tpm/tpm2-sessions.c +++ b/drivers/char/tpm/tpm2-sessions.c @@ -1016,7 +1016,7 @@ int tpm2_start_auth_session(struct tpm_c /* hash algorithm for session */ tpm_buf_append_u16(&buf, TPM_ALG_SHA256); - rc = tpm_to_ret(tpm_transmit_cmd(chip, &buf, 0, "StartAuthSession")); + rc = tpm_ret_to_err(tpm_transmit_cmd(chip, &buf, 0, "StartAuthSession")); tpm2_flush_context(chip, null_key); if (rc == TPM2_RC_SUCCESS) --- a/include/linux/tpm.h +++ b/include/linux/tpm.h @@ -260,26 +260,6 @@ enum tpm2_return_codes { TPM2_RC_SESSION_MEMORY = 0x0903, }; -/* - * Convert a return value from tpm_transmit_cmd() to a POSIX return value. The - * fallback return value is -EFAULT. - */ -static inline ssize_t tpm_to_ret(ssize_t ret) -{ - /* Already a POSIX error: */ - if (ret < 0) - return ret; - - switch (ret) { - case TPM2_RC_SUCCESS: - return 0; - case TPM2_RC_SESSION_MEMORY: - return -ENOMEM; - default: - return -EFAULT; - } -} - enum tpm2_command_codes { TPM2_CC_FIRST = 0x011F, TPM2_CC_HIERARCHY_CONTROL = 0x0121, @@ -458,6 +438,24 @@ static inline u32 tpm2_rc_value(u32 rc) return (rc & BIT(7)) ? rc & 0xbf : rc; } +/* + * Convert a return value from tpm_transmit_cmd() to POSIX error code. + */ +static inline ssize_t tpm_ret_to_err(ssize_t ret) +{ + if (ret < 0) + return ret; + + switch (tpm2_rc_value(ret)) { + case TPM2_RC_SUCCESS: + return 0; + case TPM2_RC_SESSION_MEMORY: + return -ENOMEM; + default: + return -EFAULT; + } +} + #if defined(CONFIG_TCG_TPM) || defined(CONFIG_TCG_TPM_MODULE) extern int tpm_is_tpm2(struct tpm_chip *chip);