Message ID | 20210506135923.161427-9-jandryuk@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | vtpmmgr: Some fixes - still incomplete | expand |
On Thu, May 6, 2021 at 10:00 AM Jason Andryuk <jandryuk@gmail.com> wrote: > > 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> Whoops, this should be "Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>". The above is missing an "l" in the last name. -Jason
On 5/6/21 9:59 AM, Jason Andryuk wrote: > 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> > stubdom/vtpmmgr/vtpmmgr.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/stubdom/vtpmmgr/vtpmmgr.c b/stubdom/vtpmmgr/vtpmmgr.c > index 9fddaa24f8..46ea018921 100644 > --- a/stubdom/vtpmmgr/vtpmmgr.c > +++ b/stubdom/vtpmmgr/vtpmmgr.c > @@ -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) { >
diff --git a/stubdom/vtpmmgr/vtpmmgr.c b/stubdom/vtpmmgr/vtpmmgr.c index 9fddaa24f8..46ea018921 100644 --- a/stubdom/vtpmmgr/vtpmmgr.c +++ b/stubdom/vtpmmgr/vtpmmgr.c @@ -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) {