Add a cv_wait to the TPM2.0 harvesting function

Harvesting has to compete for the TPM chip with userspace.
Before this change the callout could hijack an unread buffer
causing a userspace call to the TPM to fail.

Submitted by: Kornel Duleba <mindal@semihalf.com>
Reviewed by: delphij
Obtained from: Semihalf
Sponsored by: Stormshield
Differential Revision: https://reviews.freebsd.org/D19712
This commit is contained in:
mw 2019-04-03 08:22:58 +00:00
parent f7ba4b241e
commit 77b8255fbc

View File

@ -263,6 +263,8 @@ tpm20_harvest(void *arg)
sc = arg; sc = arg;
sx_xlock(&sc->dev_lock); sx_xlock(&sc->dev_lock);
while (sc->pending_data_length != 0)
cv_wait(&sc->buf_cv, &sc->dev_lock);
memcpy(sc->buf, cmd, sizeof(cmd)); memcpy(sc->buf, cmd, sizeof(cmd));
result = sc->transmit(sc, sizeof(cmd)); result = sc->transmit(sc, sizeof(cmd));