提交 b3f40703 编写于 作者: J Jeremy Boone 提交者: Tom Rini

Atmel TPM: Fix potential buffer overruns

Ensure that the Atmel TPM driver performs sufficient
validation of the length returned in the TPM response header.
This patch prevents memory corruption if the header contains a
length value that is larger than the destination buffer.
Signed-off-by: NJeremy Boone <jeremy.boone@nccgroup.trust>
上级 afe0e6bd
......@@ -106,13 +106,23 @@ static int tpm_atmel_twi_xfer(struct udevice *dev,
udelay(100);
}
if (!res) {
*recv_len = get_unaligned_be32(recvbuf + 2);
if (*recv_len > 10)
unsigned int hdr_recv_len;
hdr_recv_len = get_unaligned_be32(recvbuf + 2);
if (hdr_recv_len < 10) {
puts("tpm response header too small\n");
return -1;
} else if (hdr_recv_len > *recv_len) {
puts("tpm response length is bigger than receive buffer\n");
return -1;
} else {
*recv_len = hdr_recv_len;
#ifndef CONFIG_DM_I2C
res = i2c_read(0x29, 0, 0, recvbuf, *recv_len);
#else
res = dm_i2c_read(dev, 0, recvbuf, *recv_len);
#endif
}
}
if (res) {
printf("i2c_read returned %d (rlen=%d)\n", res, *recv_len);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册