[SeaBIOS] Questions on SeaBIOS TPM

Kevin O'Connor kevin at koconnor.net
Fri Nov 20 18:26:08 CET 2015

On Fri, Nov 20, 2015 at 05:09:07PM +0000, Stefan Berger wrote:
> "Kevin O'Connor" <kevin at koconnor.net> wrote on 11/20/2015 11:12:53 AM:
> > I don't understand the error handling in tpm_extend_acpi_log() and
> > tpm_extend().  Why does a log overflow in tpm_extend_acpi_log()
> > shutdown the tpm chip (via tpm_set_failure() )?  In particular,
> > tpm_extend_acpi_log can be called from clients via the 16bit BIOS
> > interface, and it's the only way a client could cause the tpm chip to
> > shutdown.  Why does tpm_extend() call reset_acpi_log() on failure?  It
> > seems odd that a failure in communication with the TPM chip would
> > result in an ACPI log reset - no other TPM chip failure does that.
> The intention here was to invalidate the log that is supposed to be 
> written along with PCR extensions, resulting in attestation not being 
> possible due to a failure in the extend.

Okay - so there isn't a specific need to handle a failure in
tpm_extend_acpi_log() differently from a failure in tpm_extend()?
That is, the goal is just to prevent attestation after a failed

> > Is it expected that the tcpa ACPI table could move or be modified at
> > runtime?  The code rescans for the table twice on every call to
> > tpm_extend_acpi_log() - if it can't move or be modified then I think
> > it would be simpler to cache the values.
> I will have a look whether we can cache that. I guess for as long as it's 
> scanned for 'early' we are not write-protected, yet. You may have seen I 
> am also rescanning the log every time something is appended to it. Here 
> the reason was that we are running in ROM mode and I cannot write to 
> static variables anymore that would allow to set the pointer to the last 
> entry. So back when I wrote this I handled the ACPI table in the same way 
> - rescanning.

Oh, so the code could assume that the tcpa table is not moved nor
modified _and_ that the BIOS is also the only writer to the log?

BTW, to make a global variable read/writable at runtime, one can add
the VARLOW attribute to the variable.


More information about the SeaBIOS mailing list