[SLOF] [PATCH 3/3] tcgbios: Measure the bootloader file read from disk

Alexey Kardashevskiy aik at ozlabs.ru
Wed Apr 1 15:31:47 AEDT 2020



On 27/03/2020 07:20, Stefan Berger wrote:
> From: Stefan Berger <stefanb at linux.ibm.com>
> 
> Measure the bootloader file read from disk into PCR 4 and log it with
> the description 'BOOTLOADER' and the event type EV_COMPACT_HASH
> (code 0xc). Since the loaded file should be an ELF file, have its size
> determined and only the bytes from the ELF image measured rather than
> the whole buffer that it was read into and is much bigger (0x700000).
> 
> Signed-off-by: Stefan Berger <stefanb at linux.ibm.com>
> ---
>  slof/fs/packages/disk-label.fs | 19 ++++++++++++++++++-
>  1 file changed, 18 insertions(+), 1 deletion(-)
> 
> diff --git a/slof/fs/packages/disk-label.fs b/slof/fs/packages/disk-label.fs
> index bb64022..d7b6418 100644
> --- a/slof/fs/packages/disk-label.fs
> +++ b/slof/fs/packages/disk-label.fs
> @@ -452,6 +452,20 @@ CREATE GPT-LINUX-PARTITION 10 allot
>     THEN
>  ;
>  
> +\ Measure the boot loader file into PCR 4 as event type EV_COMPACT_HASH (0xc)
> +
> +: measure-file ( data-ptr data-len -- )
> +   s" /ibm,vtpm" find-node IF
> +      4 -rot                    ( 4 data-ptr data-len )
> +      c -rot                    ( 4 c data-ptr data-len )
> +      s" BOOTLOADER"            ( 4 c data-ptr data-len desc-ptr desc-len )
> +      true tpm-hash-log-extend-event-file   ( rc )
> +      drop

This is what I commented in 2/3 - these "true" and "drop" are not used.


> +   ELSE
> +      2drop
> +   THEN
> +;
> +
>  : load-from-gpt-prep-partition ( addr -- size )

So it is GPT only, not MBR?


>     get-gpt-partition 0= IF false EXIT THEN
>     block gpt>num-part-entry l at -le dup 0= IF false exit THEN
> @@ -465,7 +479,10 @@ CREATE GPT-LINUX-PARTITION 10 allot
>           swap                                 ( addr blocks first-lba )
>           block-size * to part-offset          ( addr blocks )
>           0 0 seek drop                        ( addr blocks )
> -         block-size * read                    ( size )
> +         over -rot                            ( addr addr blocks)


Nit: "swap" instead of "-rot". Thanks,


> +         block-size * read                    ( addr size )
> +         2dup measure-file                    ( addr size )
> +         nip                                  ( size)
>           UNLOOP EXIT
>       THEN
>       seek-pos gpt-part-size + to seek-pos
> 

-- 
Alexey


More information about the SLOF mailing list