From: Jarkko Sakkinen <[email protected]>

Merge TPM_BUF_BOUNDARY_ERROR and TPM_BUF_OVERFLOW into TPM_BUF_INVALID,
given that they are identical. The only difference are the log messages.

In addition, add a missing TPM_BUF_INVALID check to tpm_buf_append_handle()
following the pattern from other functions in tpm-buf.c.

Signed-off-by: Jarkko Sakkinen <[email protected]>
Reviewed-by: Jonathan McDowell <[email protected]>
---
 drivers/char/tpm/tpm-buf.c                | 14 ++++++++------
 include/linux/tpm.h                       |  8 +++-----
 security/keys/trusted-keys/trusted_tpm2.c |  6 +++---
 3 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/char/tpm/tpm-buf.c b/drivers/char/tpm/tpm-buf.c
index dc882fc9fa9e..69ee77400539 100644
--- a/drivers/char/tpm/tpm-buf.c
+++ b/drivers/char/tpm/tpm-buf.c
@@ -104,13 +104,12 @@ EXPORT_SYMBOL_GPL(tpm_buf_length);
  */
 void tpm_buf_append(struct tpm_buf *buf, const u8 *new_data, u16 new_length)
 {
-       /* Return silently if overflow has already happened. */
-       if (buf->flags & TPM_BUF_OVERFLOW)
+       if (buf->flags & TPM_BUF_INVALID)
                return;
 
        if ((buf->length + new_length) > PAGE_SIZE) {
                WARN(1, "tpm_buf: write overflow\n");
-               buf->flags |= TPM_BUF_OVERFLOW;
+               buf->flags |= TPM_BUF_INVALID;
                return;
        }
 
@@ -157,8 +156,12 @@ EXPORT_SYMBOL_GPL(tpm_buf_append_u32);
  */
 void tpm_buf_append_handle(struct tpm_chip *chip, struct tpm_buf *buf, u32 
handle)
 {
+       if (buf->flags & TPM_BUF_INVALID)
+               return;
+
        if (buf->flags & TPM_BUF_TPM2B) {
                dev_err(&chip->dev, "Invalid buffer type (TPM2B)\n");
+               buf->flags |= TPM_BUF_INVALID;
                return;
        }
 
@@ -177,14 +180,13 @@ static void tpm_buf_read(struct tpm_buf *buf, off_t 
*offset, size_t count, void
 {
        off_t next_offset;
 
-       /* Return silently if overflow has already happened. */
-       if (buf->flags & TPM_BUF_BOUNDARY_ERROR)
+       if (buf->flags & TPM_BUF_INVALID)
                return;
 
        next_offset = *offset + count;
        if (next_offset > buf->length) {
                WARN(1, "tpm_buf: read out of boundary\n");
-               buf->flags |= TPM_BUF_BOUNDARY_ERROR;
+               buf->flags |= TPM_BUF_INVALID;
                return;
        }
 
diff --git a/include/linux/tpm.h b/include/linux/tpm.h
index 72610f1aa402..f8c135dd6e7b 100644
--- a/include/linux/tpm.h
+++ b/include/linux/tpm.h
@@ -382,12 +382,10 @@ struct tpm_header {
 } __packed;
 
 enum tpm_buf_flags {
-       /* the capacity exceeded: */
-       TPM_BUF_OVERFLOW        = BIT(0),
        /* TPM2B format: */
-       TPM_BUF_TPM2B           = BIT(1),
-       /* read out of boundary: */
-       TPM_BUF_BOUNDARY_ERROR  = BIT(2),
+       TPM_BUF_TPM2B           = BIT(0),
+       /* The buffer is in invalid and unusable state: */
+       TPM_BUF_INVALID         = BIT(1),
 };
 
 /*
diff --git a/security/keys/trusted-keys/trusted_tpm2.c 
b/security/keys/trusted-keys/trusted_tpm2.c
index 3de84b30b655..6fcff1066873 100644
--- a/security/keys/trusted-keys/trusted_tpm2.c
+++ b/security/keys/trusted-keys/trusted_tpm2.c
@@ -292,7 +292,7 @@ int tpm2_seal_trusted(struct tpm_chip *chip,
        /* creation PCR */
        tpm_buf_append_u32(&buf, 0);
 
-       if (buf.flags & TPM_BUF_OVERFLOW) {
+       if (buf.flags & TPM_BUF_INVALID) {
                rc = -E2BIG;
                tpm2_end_auth_session(chip);
                goto out;
@@ -308,7 +308,7 @@ int tpm2_seal_trusted(struct tpm_chip *chip,
                goto out;
 
        blob_len = tpm_buf_read_u32(&buf, &offset);
-       if (blob_len > MAX_BLOB_SIZE || buf.flags & TPM_BUF_BOUNDARY_ERROR) {
+       if (blob_len > MAX_BLOB_SIZE || buf.flags & TPM_BUF_INVALID) {
                rc = -E2BIG;
                goto out;
        }
@@ -412,7 +412,7 @@ static int tpm2_load_cmd(struct tpm_chip *chip,
 
        tpm_buf_append(&buf, blob, blob_len);
 
-       if (buf.flags & TPM_BUF_OVERFLOW) {
+       if (buf.flags & TPM_BUF_INVALID) {
                rc = -E2BIG;
                tpm2_end_auth_session(chip);
                goto out;
-- 
2.39.5


Reply via email to