diff options
| -rw-r--r-- | drivers/char/tpm/tpm_i2c_infineon.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/char/tpm/tpm_i2c_infineon.c b/drivers/char/tpm/tpm_i2c_infineon.c index c1dd39eaaeeb..6116cd05e228 100644 --- a/drivers/char/tpm/tpm_i2c_infineon.c +++ b/drivers/char/tpm/tpm_i2c_infineon.c | |||
| @@ -473,7 +473,8 @@ static int recv_data(struct tpm_chip *chip, u8 *buf, size_t count) | |||
| 473 | static int tpm_tis_i2c_recv(struct tpm_chip *chip, u8 *buf, size_t count) | 473 | static int tpm_tis_i2c_recv(struct tpm_chip *chip, u8 *buf, size_t count) |
| 474 | { | 474 | { |
| 475 | int size = 0; | 475 | int size = 0; |
| 476 | int expected, status; | 476 | int status; |
| 477 | u32 expected; | ||
| 477 | 478 | ||
| 478 | if (count < TPM_HEADER_SIZE) { | 479 | if (count < TPM_HEADER_SIZE) { |
| 479 | size = -EIO; | 480 | size = -EIO; |
| @@ -488,7 +489,7 @@ static int tpm_tis_i2c_recv(struct tpm_chip *chip, u8 *buf, size_t count) | |||
| 488 | } | 489 | } |
| 489 | 490 | ||
| 490 | expected = be32_to_cpu(*(__be32 *)(buf + 2)); | 491 | expected = be32_to_cpu(*(__be32 *)(buf + 2)); |
| 491 | if ((size_t) expected > count) { | 492 | if (((size_t) expected > count) || (expected < TPM_HEADER_SIZE)) { |
| 492 | size = -EIO; | 493 | size = -EIO; |
| 493 | goto out; | 494 | goto out; |
| 494 | } | 495 | } |
