[PATCH 1/2] tpm: Make response length of tpm2_get_capability() configurable

Heinrich Schuchardt xypron.glpk at gmx.de
Wed Nov 4 17:50:16 CET 2020


On 04.11.20 16:56, Ilias Apalodimas wrote:
> Hi Heinrich,
>
> [...]
>>> +++ b/lib/tpm-v2.c
>>> @@ -161,7 +161,7 @@ u32 tpm2_pcr_read(struct udevice *dev, u32 idx, unsigned int idx_min_sz,
>>>  }
>>>
>>>  u32 tpm2_get_capability(struct udevice *dev, u32 capability, u32 property,
>>> -			void *buf, size_t prop_count)
>>> +			void *buf, size_t prop_count, bool get_count)
>>
>> The implementation would be more stable if we would derive the offset
>> from field property instead of adding get_count.
>>
>
> We are not defining the tpmv2 internal structures anywhere in U-Boot.
> That's why the code is doing static sizeof(uX) instead of using offsetof.
> In the EFI part of the patchset, I've done exaclty that.
> Working with offsets on well defined struct is better, but out of scope for this
> patchset imho.
> We can look into refactoring the generic tpmv2 code once I add the rest of the EFI
> protocol parts?

Can't we add the structures that we need to tpm-v2.h and use their size
here?

Best regards

Heinrich

>
>>>  {
>>>  	u8 command_v2[COMMAND_BUFFER_SIZE] = {
>>
>> Shouldn't COMMAND_BUFFER_SIZE be changed to something with TPM in the
>> name, e.g TPM_COMMAND_BUFFER_SIZE?
>>
>>>  		tpm_u16(TPM2_ST_NO_SESSIONS),		/* TAG */
>>> @@ -181,13 +181,17 @@ u32 tpm2_get_capability(struct udevice *dev, u32 capability, u32 property,
>>>  	if (ret)
>>>  		return ret;
>>>
>>> +	/* When reading PCR properties we need the count */
>>> +	properties_off = sizeof(u16) + sizeof(u32) + sizeof(u32) +
>>> +			 sizeof(u8) + sizeof(u32);
>>>  	/*
>>>  	 * In the response buffer, the properties are located after the:
>>>  	 * tag (u16), response size (u32), response code (u32),
>>>  	 * YES/NO flag (u8), TPM_CAP (u32) and TPMU_CAPABILITIES (u32).
>>>  	 */
>>
>> This comment should be above 'properties_off ='. 'get_count' related
>> field should be mentioned.
>
> Sure, I'll fix this
>
> Regards
> /Ilias
>>
>> Best regards
>>
>> Heinrich
>>
>>> -	properties_off = sizeof(u16) + sizeof(u32) + sizeof(u32) +
>>> -			 sizeof(u8) + sizeof(u32) + sizeof(u32);
>>> +	if (!get_count)
>>> +		properties_off += sizeof(u32);
>>> +
>>>  	memcpy(buf, &response[properties_off], response_len - properties_off);
>>>
>>>  	return 0;
>>>
>>



More information about the U-Boot mailing list