Re: [PATCH] efi_loader: explicitly return EFI_UNSUPPORTED for TCG 1.0 compatibility
Heinrich Schuchardt
xypron.glpk at gmx.de
Thu Jun 1 08:30:25 CEST 2023
Am 1. Juni 2023 01:35:01 MESZ schrieb Stuart Yoder <stuart.yoder at arm.com>:
>
>
>On 5/31/23 5:09 PM, Heinrich Schuchardt wrote:
>>
>>
>> Am 31. Mai 2023 22:40:23 MESZ schrieb Stuart Yoder <stuart.yoder at arm.com>:
>>>
>>>
>>> On 5/31/23 3:10 PM, Heinrich Schuchardt wrote:
>>>> On 5/31/23 21:37, Stuart Yoder wrote:
>>>>>
>>>>> Unfortunately, the TCG spec is very confusing in section 6.4.4 #2 and
>>>>> #3. They attempted to clarify in an errata:
>>>>> https://trustedcomputinggroup.org/wp-content/uploads/EFI-Protocol-Specification-Errata-v.5.pdf
>>>>>
>>>>> ...but it is still confusing.
>>>>>
>>>>> Ilias and I had discussed the ambiguities, and back in March 2022 I
>>>>> requested clarification from the TCG workgroup. In cases of
>>>>> ambiguity TCG frequently will defer to how EDK2 has implemented
>>>>> a point in the spec.
>>>>>
>>>>> Here are my notes following the call with TCG about the intent
>>>>> of #2 and #3, which was based on their review of the EDK2
>>>>> implementation:
>>>>>
>>>>> a. If a client passes in a Size that is the full size including all
>>>>> fields including ActivePcrBanks, the return code is SUCCESS and
>>>>> all fields are populated. [This is a 1.1 client scenario]
>>>>>
>>>>> b. If a client passes in a Size that includes all fields up to
>>>>> and including the vendor ID, the return code is SUCCESS and all
>>>>> fields up to including the vendor ID are populated. [This is a
>>>>> 1.0 client scenario, so a populated 1.0 struct is returned]
>>>>
>>>> This contradicts the TCG EFI Protocol Specifiction which knows of no 1.0
>>>> structure but requires:
>>>>
>>>> If the input ProtocolCapability.Size <
>>>> sizeof(EFI_TCG2_BOOT_SERVICE_CAPABILITY) the function will initialize
>>>> the fields included in ProtocolCapability.Size. The values of the
>>>> remaining fields will be undefined.
>>>>
>>>> We should stick with what is specified.
>>>>
>>>> The above requirement is not yet implemented in U-Boot.
>>>>
>>>> Could you, please, indicated where the 1.0 structure was ever defined. I
>>>> could not find any a document linked on
>>>> https://trustedcomputinggroup.org/resource/tcg-efi-protocol-specification/
>>>
>>> I can't find any public spec with the 1.0 struct.
>>
>> If it does not exist in a specification, why care about it?
>
>In theory there could be old clients from 6+ years ago that were
>built to support the 1.0 struct. But, this seems unlikely
>given how much time has passed.
>
>This is exactly why Ilias doesn't want to put support for the 1.0
>struct in u-boot. We don't care about 1.0 clients.
>
>>>
>>>>>
>>>>> c. If a client passes in a Size that is less than the size up to
>>>>> and including the vendor ID, the return code is BUFFER_TOO_SMALL
>>>>> and the Size field is populated with the full size of the struct
>>>>> supported by the firmware. [This allows a client to determine
>>>>> whether it is talking to 1.0 or 1.1 firmware]
>>>>
>>>> Yes, it is the client's task to check the protocol version and not the
>>>> firmware's task to guess what the client has in mind.
>>>>
>>>> ARM should fix their tests that don't comply with the TCG EFI Protocol
>>>> Specification and then upstream them to edk-test. U-Boot should not try
>>>> to work around incorrect vendor tests.
>>>
>>> The spec is not clear. And the committee that owns the spec provided
>>> the clarifications I outlined. They were supposed to provide an errata
>>> update to publish those clarifications, but it seems somehow that
>>> didn't happen.
>>>
>>> I specifically defined the SCT test spec based on what the committee
>>> told me:
>>> https://github.com/stuyod01/edk2-test/blob/master/uefi-sct/Doc/UEFI-SCT-Case-Spec/30_Protocols_TCG2_Test.md
>>>
>>> The Arm created tests match what I've been told is the the _intent_ of
>>> the spec. What is missing is getting TCG to publish errata documenting
>>> that.
>>
>> As you wrote above the tests don't relate to a known specification.
>
>I'm going to push TCG to publish the errata clarifying this. Once that
>is published the tests will match the spec.
>
>Thanks,
>Stuart
https://www.trustedcomputinggroup.org/wp-content/uploads/EFI-Protocol-Specification-rev9-150513_Public-Review.pdf
is a draft version using ProtocolVersion = 1.3. I would assume 1.0 relates to an earlier draft not to a published specification.
Best regards
Heinrich
More information about the U-Boot
mailing list