[SeaBIOS] [PATCH v2 4/6] Rework the assertion of physical presence

Kevin O'Connor kevin at koconnor.net
Thu Jan 7 17:21:02 CET 2016


On Thu, Jan 07, 2016 at 07:55:39AM -0500, Stefan Berger wrote:
> From: Stefan Berger <stefanb at linux.vnet.ibm.com>
> 
> Rework the assertion of physical presence by calling assert_physical_presence
> in tpm_setup. This call will assert physical presence if SW assertion is
> possible or by checking whether HW physical presence is enabled.
> The TPM menu will only be shown if physical presence is asserted or HW
> physical presence is enabled after this call.
> 
> Signed-off-by: Stefan Berger <stefanb at linux.vnet.ibm.com>
> ---
>  src/boot.c    |  2 +-
>  src/tcgbios.c | 33 +++++++++++++++++----------------
>  src/tcgbios.h |  1 +
>  3 files changed, 19 insertions(+), 17 deletions(-)
> 
> diff --git a/src/boot.c b/src/boot.c
> index a251eb4..27b85d5 100644
> --- a/src/boot.c
> +++ b/src/boot.c
> @@ -499,7 +499,7 @@ interactive_bootmenu(void)
>          scan_code = get_keystroke(1000);
>          if (scan_code == 1 && !irqtimer_check(esc_accepted_time))
>              continue;
> -        if (tpm_is_working() && scan_code == 20 /* t */) {
> +        if (tpm_can_show_menu() && scan_code == 20 /* t */) {
>              printf("\n");
>              tpm_menu();
>          }
> diff --git a/src/tcgbios.c b/src/tcgbios.c
> index 7a81d00..d14468e 100644
> --- a/src/tcgbios.c
> +++ b/src/tcgbios.c
> @@ -60,6 +60,8 @@ struct {
>      u8 *          log_area_last_entry;
>  } tpm_state VARLOW;
>  
> +static int TPM_has_physical_presence;
> +
>  static struct tcpa_descriptor_rev2 *
>  find_tcpa_by_rsdp(struct rsdp_descriptor *rsdp)
>  {
> @@ -164,6 +166,12 @@ tpm_is_working(void)
>      return CONFIG_TCGBIOS && TPM_working;
>  }
>  
> +int
> +tpm_can_show_menu(void)
> +{
> +    return tpm_is_working() && TPM_has_physical_presence;
> +}
> +
>  /*
>   * Send a TPM command with the given ordinal. Append the given buffer
>   * containing all data in network byte order to the command (this is
> @@ -477,6 +485,11 @@ tpm_startup(void)
>      if (ret)
>          goto err_exit;
>  
> +    /* assertion of physical presence is only possible after startup */
> +    ret = assert_physical_presence();
> +    if (!ret)
> +        TPM_has_physical_presence = 1;
> +
>      ret = determine_timeouts();
>      if (ret)
>          return -1;
> @@ -521,6 +534,10 @@ tpm_setup(void)
>      if (ret)
>          return;
>  
> +    ret = assert_physical_presence();
> +    if (!ret)
> +        TPM_has_physical_presence = 1;
> +
>      tpm_smbios_measure();
>      tpm_add_action(2, "Start Option ROM Scan");
>  }

This calls assert_physical_presence() twice during setup.  I'm
guessing the first was a copy-and-paste error and only the one in
tpm_setup() is desired?

[...]
> --- a/src/tcgbios.h
> +++ b/src/tcgbios.h
> @@ -14,6 +14,7 @@ void tpm_add_cdrom(u32 bootdrv, const u8 *addr, u32 length);
>  void tpm_add_cdrom_catalog(const u8 *addr, u32 length);
>  void tpm_option_rom(const void *addr, u32 len);
>  int tpm_is_working(void);
> +int tpm_can_show_menu(void);

Now that tpm_is_working() is no longer used, it should be marked as
static and not exported.

-Kevin



More information about the SeaBIOS mailing list