tpmdd updates for Linux v5.16
-----BEGIN PGP SIGNATURE----- iIgEABYIADAWIQRE6pSOnaBC00OEHEIaerohdGur0gUCYXdi4xIcamFya2tvQGtl cm5lbC5vcmcACgkQGnq6IXRrq9LSLgD/cnxDX1yhRPve9udhWlvP4n1e/GRSM5Jy 69mOWRP2MqUBANxayKOcFCWKOFWT4xgepA9/rrf9CjK/Du/Hk5OnpuYJ =NzZ4 -----END PGP SIGNATURE----- Merge tag 'tpmdd-next-v5.16' of git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd Pull tpm updates from Jarkko Sakkinen: "Only bug fixes" * tag 'tpmdd-next-v5.16' of git://git.kernel.org/pub/scm/linux/kernel/git/jarkko/linux-tpmdd: tpm_tis_spi: Add missing SPI ID tpm: fix Atmel TPM crash caused by too frequent queries tpm: Check for integer overflow in tpm2_map_response_body() tpm: tis: Kconfig: Add helper dependency on COMPILE_TEST
This commit is contained in:
Коммит
ad98a92466
|
@ -76,7 +76,7 @@ config TCG_TIS_SPI_CR50
|
|||
|
||||
config TCG_TIS_SYNQUACER
|
||||
tristate "TPM Interface Specification 1.2 Interface / TPM 2.0 FIFO Interface (MMIO - SynQuacer)"
|
||||
depends on ARCH_SYNQUACER
|
||||
depends on ARCH_SYNQUACER || COMPILE_TEST
|
||||
select TCG_TIS_CORE
|
||||
help
|
||||
If you have a TPM security chip that is compliant with the
|
||||
|
|
|
@ -455,6 +455,9 @@ static int tpm2_map_response_body(struct tpm_chip *chip, u32 cc, u8 *rsp,
|
|||
if (be32_to_cpu(data->capability) != TPM2_CAP_HANDLES)
|
||||
return 0;
|
||||
|
||||
if (be32_to_cpu(data->count) > (UINT_MAX - TPM_HEADER_SIZE - 9) / 4)
|
||||
return -EFAULT;
|
||||
|
||||
if (len != TPM_HEADER_SIZE + 9 + 4 * be32_to_cpu(data->count))
|
||||
return -EFAULT;
|
||||
|
||||
|
|
|
@ -48,6 +48,7 @@ static int wait_for_tpm_stat(struct tpm_chip *chip, u8 mask,
|
|||
unsigned long timeout, wait_queue_head_t *queue,
|
||||
bool check_cancel)
|
||||
{
|
||||
struct tpm_tis_data *priv = dev_get_drvdata(&chip->dev);
|
||||
unsigned long stop;
|
||||
long rc;
|
||||
u8 status;
|
||||
|
@ -80,8 +81,8 @@ again:
|
|||
}
|
||||
} else {
|
||||
do {
|
||||
usleep_range(TPM_TIMEOUT_USECS_MIN,
|
||||
TPM_TIMEOUT_USECS_MAX);
|
||||
usleep_range(priv->timeout_min,
|
||||
priv->timeout_max);
|
||||
status = chip->ops->status(chip);
|
||||
if ((status & mask) == mask)
|
||||
return 0;
|
||||
|
@ -945,7 +946,22 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
|
|||
chip->timeout_b = msecs_to_jiffies(TIS_TIMEOUT_B_MAX);
|
||||
chip->timeout_c = msecs_to_jiffies(TIS_TIMEOUT_C_MAX);
|
||||
chip->timeout_d = msecs_to_jiffies(TIS_TIMEOUT_D_MAX);
|
||||
priv->timeout_min = TPM_TIMEOUT_USECS_MIN;
|
||||
priv->timeout_max = TPM_TIMEOUT_USECS_MAX;
|
||||
priv->phy_ops = phy_ops;
|
||||
|
||||
rc = tpm_tis_read32(priv, TPM_DID_VID(0), &vendor);
|
||||
if (rc < 0)
|
||||
goto out_err;
|
||||
|
||||
priv->manufacturer_id = vendor;
|
||||
|
||||
if (priv->manufacturer_id == TPM_VID_ATML &&
|
||||
!(chip->flags & TPM_CHIP_FLAG_TPM2)) {
|
||||
priv->timeout_min = TIS_TIMEOUT_MIN_ATML;
|
||||
priv->timeout_max = TIS_TIMEOUT_MAX_ATML;
|
||||
}
|
||||
|
||||
dev_set_drvdata(&chip->dev, priv);
|
||||
|
||||
if (is_bsw()) {
|
||||
|
@ -988,12 +1004,6 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
|
|||
if (rc)
|
||||
goto out_err;
|
||||
|
||||
rc = tpm_tis_read32(priv, TPM_DID_VID(0), &vendor);
|
||||
if (rc < 0)
|
||||
goto out_err;
|
||||
|
||||
priv->manufacturer_id = vendor;
|
||||
|
||||
rc = tpm_tis_read8(priv, TPM_RID(0), &rid);
|
||||
if (rc < 0)
|
||||
goto out_err;
|
||||
|
|
|
@ -54,6 +54,8 @@ enum tis_defaults {
|
|||
TIS_MEM_LEN = 0x5000,
|
||||
TIS_SHORT_TIMEOUT = 750, /* ms */
|
||||
TIS_LONG_TIMEOUT = 2000, /* 2 sec */
|
||||
TIS_TIMEOUT_MIN_ATML = 14700, /* usecs */
|
||||
TIS_TIMEOUT_MAX_ATML = 15000, /* usecs */
|
||||
};
|
||||
|
||||
/* Some timeout values are needed before it is known whether the chip is
|
||||
|
@ -98,6 +100,8 @@ struct tpm_tis_data {
|
|||
wait_queue_head_t read_queue;
|
||||
const struct tpm_tis_phy_ops *phy_ops;
|
||||
unsigned short rng_quality;
|
||||
unsigned int timeout_min; /* usecs */
|
||||
unsigned int timeout_max; /* usecs */
|
||||
};
|
||||
|
||||
struct tpm_tis_phy_ops {
|
||||
|
|
|
@ -267,6 +267,7 @@ static const struct spi_device_id tpm_tis_spi_id[] = {
|
|||
{ "st33htpm-spi", (unsigned long)tpm_tis_spi_probe },
|
||||
{ "slb9670", (unsigned long)tpm_tis_spi_probe },
|
||||
{ "tpm_tis_spi", (unsigned long)tpm_tis_spi_probe },
|
||||
{ "tpm_tis-spi", (unsigned long)tpm_tis_spi_probe },
|
||||
{ "cr50", (unsigned long)cr50_spi_probe },
|
||||
{}
|
||||
};
|
||||
|
|
|
@ -269,6 +269,7 @@ enum tpm2_cc_attrs {
|
|||
#define TPM_VID_INTEL 0x8086
|
||||
#define TPM_VID_WINBOND 0x1050
|
||||
#define TPM_VID_STM 0x104A
|
||||
#define TPM_VID_ATML 0x1114
|
||||
|
||||
enum tpm_chip_flags {
|
||||
TPM_CHIP_FLAG_TPM2 = BIT(1),
|
||||
|
|
Загрузка…
Ссылка в новой задаче