From 3a3e5039b97dc1c52700f556726601eff65ea5be Mon Sep 17 00:00:00 2001 From: Marcin Wojtas Date: Wed, 3 Apr 2019 08:22:58 +0000 Subject: [PATCH] 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 Reviewed by: delphij Obtained from: Semihalf Sponsored by: Stormshield Differential Revision: https://reviews.freebsd.org/D19712 --- sys/dev/tpm/tpm20.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sys/dev/tpm/tpm20.c b/sys/dev/tpm/tpm20.c index 4e07b6eebbbf..29a9cf34cc00 100644 --- a/sys/dev/tpm/tpm20.c +++ b/sys/dev/tpm/tpm20.c @@ -263,6 +263,8 @@ tpm20_harvest(void *arg) sc = arg; 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)); result = sc->transmit(sc, sizeof(cmd));