[SLOF] [PATCH 3/3] tcgbios: Measure the bootloader file read from disk
Stefan Berger
stefanb at linux.ibm.com
Thu Apr 2 00:57:22 AEDT 2020
On 4/1/20 12:31 AM, Alexey Kardashevskiy wrote:
>
> 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.
I would like to keep them though since this function will have different
callers. Also, practically all functions return a return code.
>
>
>> + ELSE
>> + 2drop
>> + THEN
>> +;
>> +
>> : load-from-gpt-prep-partition ( addr -- size )
> So it is GPT only, not MBR?
for MBR we have this here already:
: load-from-dos-boot-partition ( addr -- size )
no-mbr? IF drop FALSE EXIT THEN \ read MBR and check for DOS
disk-label magic
[..]
block-size * read ( size )
block block-size measure-mbr
UNLOOP EXIT
[...]
I thought for MBR there was a tiny piece of code in the sectors that are
read here and that's all there is.
>
>
>> 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,
Yes, easier. Done.
Stefan
>
>
>> + block-size * read ( addr size )
>> + 2dup measure-file ( addr size )
>> + nip ( size)
>> UNLOOP EXIT
>> THEN
>> seek-pos gpt-part-size + to seek-pos
>>
More information about the SLOF
mailing list