diff mbox series

[v5,2/7] tpm: remove definition of TPM2_ACTIVE_PCR_BANKS

Message ID 20181114153108.12907-3-roberto.sassu@huawei.com (mailing list archive)
State New, archived
Headers show
Series tpm: retrieve digest size of unknown algorithms from TPM | expand

Commit Message

Roberto Sassu Nov. 14, 2018, 3:31 p.m. UTC
tcg_efi_specid_event and tcg_pcr_event2 declaration contains static arrays
for a list of hash algorithms used for event logs and event log digests.

However, according to TCG EFI Protocol Specification, these arrays have
variable sizes. Setting the array size to zero or 3 does not make any
difference, because the parser has to adjust the offset depending on the
actual array size to access structure members after the static arrays.

Thus, this patch removes the declaration of TPM2_ACTIVE_PCR_BANKS and sets
the array size to zero.

Fixes: 4d23cc323cdb ("tpm: add securityfs support for TPM 2.0 firmware
event log")

Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
---
 include/linux/tpm_eventlog.h | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

Comments

Jarkko Sakkinen Nov. 16, 2018, 1:38 p.m. UTC | #1
On Wed, Nov 14, 2018 at 04:31:03PM +0100, Roberto Sassu wrote:
> tcg_efi_specid_event and tcg_pcr_event2 declaration contains static arrays
> for a list of hash algorithms used for event logs and event log digests.
> 
> However, according to TCG EFI Protocol Specification, these arrays have
> variable sizes. Setting the array size to zero or 3 does not make any
> difference, because the parser has to adjust the offset depending on the
> actual array size to access structure members after the static arrays.
> 
> Thus, this patch removes the declaration of TPM2_ACTIVE_PCR_BANKS and sets
> the array size to zero.
> 
> Fixes: 4d23cc323cdb ("tpm: add securityfs support for TPM 2.0 firmware
> event log")
> 
> Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
> ---
>  include/linux/tpm_eventlog.h | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/include/linux/tpm_eventlog.h b/include/linux/tpm_eventlog.h
> index 20d9da77fc11..3d5d162f09cc 100644
> --- a/include/linux/tpm_eventlog.h
> +++ b/include/linux/tpm_eventlog.h
> @@ -8,7 +8,6 @@
>  #define TCG_EVENT_NAME_LEN_MAX	255
>  #define MAX_TEXT_EVENT		1000	/* Max event string length */
>  #define ACPI_TCPA_SIG		"TCPA"	/* 0x41504354 /'TCPA' */
> -#define TPM2_ACTIVE_PCR_BANKS	3
>  
>  #define EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2 0x1
>  #define EFI_TCG2_EVENT_LOG_FORMAT_TCG_2   0x2
> @@ -90,7 +89,7 @@ struct tcg_efi_specid_event {
>  	u8 spec_errata;
>  	u8 uintnsize;
>  	u32 num_algs;
> -	struct tcg_efi_specid_event_algs digest_sizes[TPM2_ACTIVE_PCR_BANKS];
> +	struct tcg_efi_specid_event_algs digest_sizes[0];
>  	u8 vendor_info_size;
>  	u8 vendor_info[0];
>  } __packed;
> @@ -117,7 +116,7 @@ struct tcg_pcr_event2 {
>  	u32 pcr_idx;
>  	u32 event_type;
>  	u32 count;
> -	struct tpm2_digest digests[TPM2_ACTIVE_PCR_BANKS];
> +	struct tpm2_digest digests[0];
>  	struct tcg_event_field event;
>  } __packed;
>  
> -- 
> 2.17.1
> 

NAK for the same reason as last time.

/Jarkko
Roberto Sassu Nov. 28, 2018, 7:50 a.m. UTC | #2
On 11/16/2018 2:38 PM, Jarkko Sakkinen wrote:
> On Wed, Nov 14, 2018 at 04:31:03PM +0100, Roberto Sassu wrote:
>> tcg_efi_specid_event and tcg_pcr_event2 declaration contains static arrays
>> for a list of hash algorithms used for event logs and event log digests.
>>
>> However, according to TCG EFI Protocol Specification, these arrays have
>> variable sizes. Setting the array size to zero or 3 does not make any
>> difference, because the parser has to adjust the offset depending on the
>> actual array size to access structure members after the static arrays.
>>
>> Thus, this patch removes the declaration of TPM2_ACTIVE_PCR_BANKS and sets
>> the array size to zero.
>>
>> Fixes: 4d23cc323cdb ("tpm: add securityfs support for TPM 2.0 firmware
>> event log")
>>
>> Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
>> ---
>>   include/linux/tpm_eventlog.h | 5 ++---
>>   1 file changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/include/linux/tpm_eventlog.h b/include/linux/tpm_eventlog.h
>> index 20d9da77fc11..3d5d162f09cc 100644
>> --- a/include/linux/tpm_eventlog.h
>> +++ b/include/linux/tpm_eventlog.h
>> @@ -8,7 +8,6 @@
>>   #define TCG_EVENT_NAME_LEN_MAX	255
>>   #define MAX_TEXT_EVENT		1000	/* Max event string length */
>>   #define ACPI_TCPA_SIG		"TCPA"	/* 0x41504354 /'TCPA' */
>> -#define TPM2_ACTIVE_PCR_BANKS	3
>>   
>>   #define EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2 0x1
>>   #define EFI_TCG2_EVENT_LOG_FORMAT_TCG_2   0x2
>> @@ -90,7 +89,7 @@ struct tcg_efi_specid_event {
>>   	u8 spec_errata;
>>   	u8 uintnsize;
>>   	u32 num_algs;
>> -	struct tcg_efi_specid_event_algs digest_sizes[TPM2_ACTIVE_PCR_BANKS];
>> +	struct tcg_efi_specid_event_algs digest_sizes[0];
>>   	u8 vendor_info_size;
>>   	u8 vendor_info[0];
>>   } __packed;
>> @@ -117,7 +116,7 @@ struct tcg_pcr_event2 {
>>   	u32 pcr_idx;
>>   	u32 event_type;
>>   	u32 count;
>> -	struct tpm2_digest digests[TPM2_ACTIVE_PCR_BANKS];
>> +	struct tpm2_digest digests[0];
>>   	struct tcg_event_field event;
>>   } __packed;
>>   
>> -- 
>> 2.17.1
>>
> 
> NAK for the same reason as last time.

No Fixes tag, or Fixes tag without newline?

Roberto


> /Jarkko
>
Roberto Sassu Nov. 28, 2018, 12:17 p.m. UTC | #3
On 11/16/2018 2:38 PM, Jarkko Sakkinen wrote:
> On Wed, Nov 14, 2018 at 04:31:03PM +0100, Roberto Sassu wrote:
>> tcg_efi_specid_event and tcg_pcr_event2 declaration contains static arrays
>> for a list of hash algorithms used for event logs and event log digests.
>>
>> However, according to TCG EFI Protocol Specification, these arrays have
>> variable sizes. Setting the array size to zero or 3 does not make any
>> difference, because the parser has to adjust the offset depending on the
>> actual array size to access structure members after the static arrays.
>>
>> Thus, this patch removes the declaration of TPM2_ACTIVE_PCR_BANKS and sets
>> the array size to zero.
>>
>> Fixes: 4d23cc323cdb ("tpm: add securityfs support for TPM 2.0 firmware
>> event log")
>>
>> Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
>> ---
>>   include/linux/tpm_eventlog.h | 5 ++---
>>   1 file changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/include/linux/tpm_eventlog.h b/include/linux/tpm_eventlog.h
>> index 20d9da77fc11..3d5d162f09cc 100644
>> --- a/include/linux/tpm_eventlog.h
>> +++ b/include/linux/tpm_eventlog.h
>> @@ -8,7 +8,6 @@
>>   #define TCG_EVENT_NAME_LEN_MAX	255
>>   #define MAX_TEXT_EVENT		1000	/* Max event string length */
>>   #define ACPI_TCPA_SIG		"TCPA"	/* 0x41504354 /'TCPA' */
>> -#define TPM2_ACTIVE_PCR_BANKS	3
>>   
>>   #define EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2 0x1
>>   #define EFI_TCG2_EVENT_LOG_FORMAT_TCG_2   0x2
>> @@ -90,7 +89,7 @@ struct tcg_efi_specid_event {
>>   	u8 spec_errata;
>>   	u8 uintnsize;
>>   	u32 num_algs;
>> -	struct tcg_efi_specid_event_algs digest_sizes[TPM2_ACTIVE_PCR_BANKS];
>> +	struct tcg_efi_specid_event_algs digest_sizes[0];
>>   	u8 vendor_info_size;
>>   	u8 vendor_info[0];
>>   } __packed;
>> @@ -117,7 +116,7 @@ struct tcg_pcr_event2 {
>>   	u32 pcr_idx;
>>   	u32 event_type;
>>   	u32 count;
>> -	struct tpm2_digest digests[TPM2_ACTIVE_PCR_BANKS];
>> +	struct tpm2_digest digests[0];
>>   	struct tcg_event_field event;
>>   } __packed;
>>   
>> -- 
>> 2.17.1
>>
> 
> NAK for the same reason as last time.

I added this comment to include/linux/tpm_eventlog.h:

/*
  * http://www.trustedcomputinggroup.org/tcg-efi-protocol-specification/
  *
  * Set the size of 'digest_sizes' and 'digests', members of 
tcg_efi_specid_event
  * and tcg_pcr_event2, to zero. Structures with variable-sized arrays 
placed
  * midway are not suitable for type casting.
  */

Is it ok?

Thanks

Roberto


> /Jarkko
>
Roberto Sassu Nov. 29, 2018, 12:04 p.m. UTC | #4
On 11/28/2018 1:17 PM, Roberto Sassu wrote:
> On 11/16/2018 2:38 PM, Jarkko Sakkinen wrote:
>> On Wed, Nov 14, 2018 at 04:31:03PM +0100, Roberto Sassu wrote:
>>> tcg_efi_specid_event and tcg_pcr_event2 declaration contains static 
>>> arrays
>>> for a list of hash algorithms used for event logs and event log digests.
>>>
>>> However, according to TCG EFI Protocol Specification, these arrays have
>>> variable sizes. Setting the array size to zero or 3 does not make any
>>> difference, because the parser has to adjust the offset depending on the
>>> actual array size to access structure members after the static arrays.
>>>
>>> Thus, this patch removes the declaration of TPM2_ACTIVE_PCR_BANKS and 
>>> sets
>>> the array size to zero.
>>>
>>> Fixes: 4d23cc323cdb ("tpm: add securityfs support for TPM 2.0 firmware
>>> event log")
>>>
>>> Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
>>> ---
>>>   include/linux/tpm_eventlog.h | 5 ++---
>>>   1 file changed, 2 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/include/linux/tpm_eventlog.h b/include/linux/tpm_eventlog.h
>>> index 20d9da77fc11..3d5d162f09cc 100644
>>> --- a/include/linux/tpm_eventlog.h
>>> +++ b/include/linux/tpm_eventlog.h
>>> @@ -8,7 +8,6 @@
>>>   #define TCG_EVENT_NAME_LEN_MAX    255
>>>   #define MAX_TEXT_EVENT        1000    /* Max event string length */
>>>   #define ACPI_TCPA_SIG        "TCPA"    /* 0x41504354 /'TCPA' */
>>> -#define TPM2_ACTIVE_PCR_BANKS    3
>>>   #define EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2 0x1
>>>   #define EFI_TCG2_EVENT_LOG_FORMAT_TCG_2   0x2
>>> @@ -90,7 +89,7 @@ struct tcg_efi_specid_event {
>>>       u8 spec_errata;
>>>       u8 uintnsize;
>>>       u32 num_algs;
>>> -    struct tcg_efi_specid_event_algs 
>>> digest_sizes[TPM2_ACTIVE_PCR_BANKS];
>>> +    struct tcg_efi_specid_event_algs digest_sizes[0];
>>>       u8 vendor_info_size;
>>>       u8 vendor_info[0];
>>>   } __packed;
>>> @@ -117,7 +116,7 @@ struct tcg_pcr_event2 {
>>>       u32 pcr_idx;
>>>       u32 event_type;
>>>       u32 count;
>>> -    struct tpm2_digest digests[TPM2_ACTIVE_PCR_BANKS];
>>> +    struct tpm2_digest digests[0];
>>>       struct tcg_event_field event;
>>>   } __packed;
>>> -- 
>>> 2.17.1
>>>
>>
>> NAK for the same reason as last time.
> 
> I added this comment to include/linux/tpm_eventlog.h:
> 
> /*
>   * http://www.trustedcomputinggroup.org/tcg-efi-protocol-specification/
>   *
>   * Set the size of 'digest_sizes' and 'digests', members of 
> tcg_efi_specid_event
>   * and tcg_pcr_event2, to zero. Structures with variable-sized arrays 
> placed
>   * midway are not suitable for type casting.
>   */
> 

If this comment is ok, I will send a new version of the patch set.

Roberto


>> /Jarkko
>>
>
Jarkko Sakkinen Nov. 30, 2018, 7:41 p.m. UTC | #5
On Thu, Nov 29, 2018 at 01:04:40PM +0100, Roberto Sassu wrote:
> > > > +    struct tpm2_digest digests[0];
> > > >       struct tcg_event_field event;
> > > >   } __packed;
> > > > -- 
> > > > 2.17.1
> > > > 
> > > 
> > > NAK for the same reason as last time.
> > 
> > I added this comment to include/linux/tpm_eventlog.h:
> > 
> > /*
> >   * http://www.trustedcomputinggroup.org/tcg-efi-protocol-specification/
> >   *
> >   * Set the size of 'digest_sizes' and 'digests', members of
> > tcg_efi_specid_event
> >   * and tcg_pcr_event2, to zero. Structures with variable-sized arrays
> > placed
> >   * midway are not suitable for type casting.
> >   */
> > 
> 
> If this comment is ok, I will send a new version of the patch set.
> 
> Roberto

Even after looking at the spec the last field does not make sense as the
event after digests and digests are not in union. It is just not right.

The comment does not fix that.

/Jarkko
Jarkko Sakkinen Nov. 30, 2018, 7:45 p.m. UTC | #6
On Fri, Nov 30, 2018 at 11:41:49AM -0800, Jarkko Sakkinen wrote:
> Even after looking at the spec the last field does not make sense as the
> event after digests and digests are not in union. It is just not right.
> 
> The comment does not fix that.

You should remove the last field and rename the struct as maybe
struct tcg_pcr_event2_head. If we ever need the very last field
we can create struct *_tail.

Not your fault but there is clear bug in the struct definition
that should be fixed in a commit of its own.

No new comments are needed.

/Jarkko
Jarkko Sakkinen Nov. 30, 2018, 10:18 p.m. UTC | #7
On Fri, Nov 30, 2018 at 11:45:27AM -0800, Jarkko Sakkinen wrote:
> On Fri, Nov 30, 2018 at 11:41:49AM -0800, Jarkko Sakkinen wrote:
> > Even after looking at the spec the last field does not make sense as the
> > event after digests and digests are not in union. It is just not right.
> > 
> > The comment does not fix that.
> 
> You should remove the last field and rename the struct as maybe
> struct tcg_pcr_event2_head. If we ever need the very last field
> we can create struct *_tail.
> 
> Not your fault but there is clear bug in the struct definition
> that should be fixed in a commit of its own.
> 
> No new comments are needed.

I checked and did not find the field even used anywhere. Can you
peer check this and then just remove it? And yeah maybe the struct
should have _head suffix.

/Jarkko
Roberto Sassu Dec. 3, 2018, 9:59 a.m. UTC | #8
On 11/30/2018 8:45 PM, Jarkko Sakkinen wrote:
> On Fri, Nov 30, 2018 at 11:41:49AM -0800, Jarkko Sakkinen wrote:
>> Even after looking at the spec the last field does not make sense as the
>> event after digests and digests are not in union. It is just not right.
>>
>> The comment does not fix that.
> 
> You should remove the last field and rename the struct as maybe
> struct tcg_pcr_event2_head. If we ever need the very last field
> we can create struct *_tail.
> 
> Not your fault but there is clear bug in the struct definition
> that should be fixed in a commit of its own.

Given that I explain the problem in the new patch, I would also remove
TPM2_ACTIVE_PCR_BANKS in the same patch. Is it ok?

Thanks

Roberto

> No new comments are needed.
> 
> /Jarkko
>
Jarkko Sakkinen Dec. 3, 2018, 5:31 p.m. UTC | #9
On Mon, Dec 03, 2018 at 10:59:10AM +0100, Roberto Sassu wrote:
> On 11/30/2018 8:45 PM, Jarkko Sakkinen wrote:
> > On Fri, Nov 30, 2018 at 11:41:49AM -0800, Jarkko Sakkinen wrote:
> > > Even after looking at the spec the last field does not make sense as the
> > > event after digests and digests are not in union. It is just not right.
> > > 
> > > The comment does not fix that.
> > 
> > You should remove the last field and rename the struct as maybe
> > struct tcg_pcr_event2_head. If we ever need the very last field
> > we can create struct *_tail.
> > 
> > Not your fault but there is clear bug in the struct definition
> > that should be fixed in a commit of its own.
> 
> Given that I explain the problem in the new patch, I would also remove
> TPM2_ACTIVE_PCR_BANKS in the same patch. Is it ok?

Yes.

/Jarkko
diff mbox series

Patch

diff --git a/include/linux/tpm_eventlog.h b/include/linux/tpm_eventlog.h
index 20d9da77fc11..3d5d162f09cc 100644
--- a/include/linux/tpm_eventlog.h
+++ b/include/linux/tpm_eventlog.h
@@ -8,7 +8,6 @@ 
 #define TCG_EVENT_NAME_LEN_MAX	255
 #define MAX_TEXT_EVENT		1000	/* Max event string length */
 #define ACPI_TCPA_SIG		"TCPA"	/* 0x41504354 /'TCPA' */
-#define TPM2_ACTIVE_PCR_BANKS	3
 
 #define EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2 0x1
 #define EFI_TCG2_EVENT_LOG_FORMAT_TCG_2   0x2
@@ -90,7 +89,7 @@  struct tcg_efi_specid_event {
 	u8 spec_errata;
 	u8 uintnsize;
 	u32 num_algs;
-	struct tcg_efi_specid_event_algs digest_sizes[TPM2_ACTIVE_PCR_BANKS];
+	struct tcg_efi_specid_event_algs digest_sizes[0];
 	u8 vendor_info_size;
 	u8 vendor_info[0];
 } __packed;
@@ -117,7 +116,7 @@  struct tcg_pcr_event2 {
 	u32 pcr_idx;
 	u32 event_type;
 	u32 count;
-	struct tpm2_digest digests[TPM2_ACTIVE_PCR_BANKS];
+	struct tpm2_digest digests[0];
 	struct tcg_event_field event;
 } __packed;