From: Jarkko Sakkinen <[email protected]>

Open code 'tpm_buf_append_hmac_session_opt' to the call site, as it only
masks a call sequence and does otherwise nothing particularly useful.

Signed-off-by: Jarkko Sakkinen <[email protected]>
Reviewed-by: Jonathan McDowell <[email protected]>
---
v8:
- Improvde the language a bit.
v7:
- No changes.
v6:
- No changes.
v5:
- No changes.
v4:
- Fixed typo in short summary.
v3:
- No changes.
v2:
- Uncorrupt the patch.
---
 drivers/char/tpm/tpm2-cmd.c               | 14 +++++++++++---
 include/linux/tpm.h                       | 23 -----------------------
 security/keys/trusted-keys/trusted_tpm2.c | 12 ++++++++++--
 3 files changed, 21 insertions(+), 28 deletions(-)

diff --git a/drivers/char/tpm/tpm2-cmd.c b/drivers/char/tpm/tpm2-cmd.c
index e6cb4083c14e..e298194883e8 100644
--- a/drivers/char/tpm/tpm2-cmd.c
+++ b/drivers/char/tpm/tpm2-cmd.c
@@ -257,9 +257,17 @@ int tpm2_get_random(struct tpm_chip *chip, u8 *dest, 
size_t max)
 
        do {
                tpm_buf_reset(&buf, TPM2_ST_SESSIONS, TPM2_CC_GET_RANDOM);
-               tpm_buf_append_hmac_session_opt(chip, &buf, TPM2_SA_ENCRYPT
-                                               | TPM2_SA_CONTINUE_SESSION,
-                                               NULL, 0);
+               if (tpm2_chip_auth(chip)) {
+                       tpm_buf_append_hmac_session(chip, &buf,
+                                                   TPM2_SA_ENCRYPT |
+                                                   TPM2_SA_CONTINUE_SESSION,
+                                                   NULL, 0);
+               } else  {
+                       offset = buf.handles * 4 + TPM_HEADER_SIZE;
+                       head = (struct tpm_header *)buf.data;
+                       if (tpm_buf_length(&buf) == offset)
+                               head->tag = cpu_to_be16(TPM2_ST_NO_SESSIONS);
+               }
                tpm_buf_append_u16(&buf, num_bytes);
                tpm_buf_fill_hmac_session(chip, &buf);
                err = tpm_transmit_cmd(chip, &buf,
diff --git a/include/linux/tpm.h b/include/linux/tpm.h
index 004680757923..973458a38250 100644
--- a/include/linux/tpm.h
+++ b/include/linux/tpm.h
@@ -535,29 +535,6 @@ void tpm_buf_append_hmac_session(struct tpm_chip *chip, 
struct tpm_buf *buf,
                                 int passphraselen);
 void tpm_buf_append_auth(struct tpm_chip *chip, struct tpm_buf *buf,
                         u8 *passphrase, int passphraselen);
-static inline void tpm_buf_append_hmac_session_opt(struct tpm_chip *chip,
-                                                  struct tpm_buf *buf,
-                                                  u8 attributes,
-                                                  u8 *passphrase,
-                                                  int passphraselen)
-{
-       struct tpm_header *head;
-       int offset;
-
-       if (tpm2_chip_auth(chip)) {
-               tpm_buf_append_hmac_session(chip, buf, attributes, passphrase, 
passphraselen);
-       } else  {
-               offset = buf->handles * 4 + TPM_HEADER_SIZE;
-               head = (struct tpm_header *)buf->data;
-
-               /*
-                * If the only sessions are optional, the command tag must 
change to
-                * TPM2_ST_NO_SESSIONS.
-                */
-               if (tpm_buf_length(buf) == offset)
-                       head->tag = cpu_to_be16(TPM2_ST_NO_SESSIONS);
-       }
-}
 
 #ifdef CONFIG_TCG_TPM2_HMAC
 
diff --git a/security/keys/trusted-keys/trusted_tpm2.c 
b/security/keys/trusted-keys/trusted_tpm2.c
index e165b117bbca..c414a7006d78 100644
--- a/security/keys/trusted-keys/trusted_tpm2.c
+++ b/security/keys/trusted-keys/trusted_tpm2.c
@@ -482,8 +482,10 @@ static int tpm2_unseal_cmd(struct tpm_chip *chip,
                           struct trusted_key_options *options,
                           u32 blob_handle)
 {
+       struct tpm_header *head;
        struct tpm_buf buf;
        u16 data_len;
+       int offset;
        u8 *data;
        int rc;
 
@@ -518,8 +520,14 @@ static int tpm2_unseal_cmd(struct tpm_chip *chip,
                tpm2_buf_append_auth(&buf, options->policyhandle,
                                     NULL /* nonce */, 0, 0,
                                     options->blobauth, options->blobauth_len);
-               tpm_buf_append_hmac_session_opt(chip, &buf, TPM2_SA_ENCRYPT,
-                                               NULL, 0);
+               if (tpm2_chip_auth(chip)) {
+                       tpm_buf_append_hmac_session(chip, &buf, 
TPM2_SA_ENCRYPT, NULL, 0);
+               } else  {
+                       offset = buf.handles * 4 + TPM_HEADER_SIZE;
+                       head = (struct tpm_header *)buf.data;
+                       if (tpm_buf_length(&buf) == offset)
+                               head->tag = cpu_to_be16(TPM2_ST_NO_SESSIONS);
+               }
        }
 
        tpm_buf_fill_hmac_session(chip, &buf);
-- 
2.52.0


Reply via email to