|
@@ -270,7 +270,8 @@ static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
|
|
{
|
|
{
|
|
struct tpm_tis_data *priv = dev_get_drvdata(&chip->dev);
|
|
struct tpm_tis_data *priv = dev_get_drvdata(&chip->dev);
|
|
int size = 0;
|
|
int size = 0;
|
|
- int expected, status;
|
|
|
|
|
|
+ int status;
|
|
|
|
+ u32 expected;
|
|
|
|
|
|
if (count < TPM_HEADER_SIZE) {
|
|
if (count < TPM_HEADER_SIZE) {
|
|
size = -EIO;
|
|
size = -EIO;
|
|
@@ -285,7 +286,7 @@ static int tpm_tis_recv(struct tpm_chip *chip, u8 *buf, size_t count)
|
|
}
|
|
}
|
|
|
|
|
|
expected = be32_to_cpu(*(__be32 *) (buf + 2));
|
|
expected = be32_to_cpu(*(__be32 *) (buf + 2));
|
|
- if (expected > count) {
|
|
|
|
|
|
+ if (expected > count || expected < TPM_HEADER_SIZE) {
|
|
size = -EIO;
|
|
size = -EIO;
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|