mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-06 17:35:20 +02:00
tpm: Clean up TPM space after command failure
[ Upstream commite3aaebcbb7
] tpm_dev_transmit prepares the TPM space before attempting command transmission. However if the command fails no rollback of this preparation is done. This can result in transient handles being leaked if the device is subsequently closed with no further commands performed. Fix this by flushing the space in the event of command transmission failure. Fixes:745b361e98
("tpm: infrastructure for TPM spaces") Signed-off-by: Jonathan McDowell <noodles@meta.com> Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org> Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
9c21cdae4b
commit
82478cb8a2
|
@ -47,6 +47,8 @@ static ssize_t tpm_dev_transmit(struct tpm_chip *chip, struct tpm_space *space,
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = tpm2_commit_space(chip, space, buf, &len);
|
ret = tpm2_commit_space(chip, space, buf, &len);
|
||||||
|
else
|
||||||
|
tpm2_flush_space(chip);
|
||||||
|
|
||||||
out_rc:
|
out_rc:
|
||||||
return ret ? ret : len;
|
return ret ? ret : len;
|
||||||
|
|
|
@ -166,6 +166,9 @@ void tpm2_flush_space(struct tpm_chip *chip)
|
||||||
struct tpm_space *space = &chip->work_space;
|
struct tpm_space *space = &chip->work_space;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (!space)
|
||||||
|
return;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(space->context_tbl); i++)
|
for (i = 0; i < ARRAY_SIZE(space->context_tbl); i++)
|
||||||
if (space->context_tbl[i] && ~space->context_tbl[i])
|
if (space->context_tbl[i] && ~space->context_tbl[i])
|
||||||
tpm2_flush_context(chip, space->context_tbl[i]);
|
tpm2_flush_context(chip, space->context_tbl[i]);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user