|
@@ -281,7 +281,11 @@ static int i2c_nuvoton_recv(struct tpm_chip *chip, u8 *buf, size_t count)
|
|
|
struct device *dev = chip->dev.parent;
|
|
|
struct i2c_client *client = to_i2c_client(dev);
|
|
|
s32 rc;
|
|
|
- int expected, status, burst_count, retries, size = 0;
|
|
|
+ int status;
|
|
|
+ int burst_count;
|
|
|
+ int retries;
|
|
|
+ int size = 0;
|
|
|
+ u32 expected;
|
|
|
|
|
|
if (count < TPM_HEADER_SIZE) {
|
|
|
i2c_nuvoton_ready(chip); /* return to idle */
|
|
@@ -323,7 +327,7 @@ static int i2c_nuvoton_recv(struct tpm_chip *chip, u8 *buf, size_t count)
|
|
|
* to machine native
|
|
|
*/
|
|
|
expected = be32_to_cpu(*(__be32 *) (buf + 2));
|
|
|
- if (expected > count) {
|
|
|
+ if (expected > count || expected < size) {
|
|
|
dev_err(dev, "%s() expected > count\n", __func__);
|
|
|
size = -EIO;
|
|
|
continue;
|