vtpmmgr: Shutdown more gracefully

vtpmmgr uses the default, weak app_shutdown, which immediately calls the
shutdown hypercall.  This short circuits the vtpmmgr clean up logic.  We
need to perform the clean up to actually Flush our key out of the tpm.

Setting do_shutdown is one step in that direction, but vtpmmgr will most
likely be waiting in tpmback_req_any.  We need to call shutdown_tpmback
to cancel the wait inside tpmback and perform the shutdown.

Signed-off-by: Jason Andryuk <jandryuk@gmail.com>
Reviewed-by: Samuel Thibault <samuel.thibaut@ens-lyon.org>
Reviewed-by: Daniel P. Smith <dpsmith@apertussolutions.com>
This commit is contained in:
Jason Andryuk authored and Andrew Cooper committed 2021-05-10 14:49:01 +01:00
1 parent 746d20b112
commit 1b4bfa0b8f
1 file changed
+11 -1
+11 -1
View File
@@ -67,11 +67,21 @@ int hw_is_tpm2(void)
return (hardware_version.hw_version == TPM2_HARDWARE) ? 1 : 0;
}
static int do_shutdown;
void app_shutdown(unsigned int reason)
{
printk("Shutdown requested: %d\n", reason);
do_shutdown = 1;
shutdown_tpmback();
}
void main_loop(void) {
tpmcmd_t* tpmcmd;
uint8_t respbuf[TCPA_MAX_BUFFER_LENGTH];
while(1) {
while (!do_shutdown) {
/* Wait for requests from a vtpm */
vtpmloginfo(VTPM_LOG_VTPM, "Waiting for commands from vTPM's:\n");
if((tpmcmd = tpmback_req_any()) == NULL) {
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.