77 lines
2.0 KiB
Diff
77 lines
2.0 KiB
Diff
From 42a4f494db975d62916c73f5d637aef9be343d70 Mon Sep 17 00:00:00 2001
|
|
From: Oleksandr Natalenko <oleksandr@natalenko.name>
|
|
Date: Tue, 8 Apr 2025 19:51:44 +0200
|
|
Subject: fixes-6.14: update tpm2_start_auth_session() fix
|
|
|
|
Signed-off-by: Oleksandr Natalenko <oleksandr@natalenko.name>
|
|
---
|
|
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);
|