diff mbox series

[3/3] efi_loader: fix efi_tcg2_hash_log_extend_event() parameter check

Message ID 20210903015552.17180-4-masahisa.kojima@linaro.org
State New
Headers show
Series Miscellaneous fixes of efi_tcg2 | expand

Commit Message

Masahisa Kojima Sept. 3, 2021, 1:55 a.m. UTC
TCG EFI Protocol Specification defines that PCRIndex parameter
passed from caller must be 0 to 23.
TPM2_MAX_PCRS is currently used to check the range of PCRIndex,
but TPM2_MAX_PCRS is tpm2 device dependent and may have larger value.
This commit newly adds EFI_TCG2_MAX_PCR_INDEX macro, it is used to
check the range of PCRIndex parameter.

Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>

---
 include/efi_tcg2.h        | 2 ++
 lib/efi_loader/efi_tcg2.c | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

-- 
2.17.1

Comments

Ilias Apalodimas Sept. 3, 2021, 6:20 a.m. UTC | #1
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>


On Fri, 3 Sept 2021 at 04:54, Masahisa Kojima
<masahisa.kojima@linaro.org> wrote:
>

> TCG EFI Protocol Specification defines that PCRIndex parameter

> passed from caller must be 0 to 23.

> TPM2_MAX_PCRS is currently used to check the range of PCRIndex,

> but TPM2_MAX_PCRS is tpm2 device dependent and may have larger value.

> This commit newly adds EFI_TCG2_MAX_PCR_INDEX macro, it is used to

> check the range of PCRIndex parameter.

>

> Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>

> ---

>  include/efi_tcg2.h        | 2 ++

>  lib/efi_loader/efi_tcg2.c | 2 +-

>  2 files changed, 3 insertions(+), 1 deletion(-)

>

> diff --git a/include/efi_tcg2.h b/include/efi_tcg2.h

> index 45788d55d5..b647361d44 100644

> --- a/include/efi_tcg2.h

> +++ b/include/efi_tcg2.h

> @@ -28,6 +28,8 @@

>  #define EFI_TCG2_EXTEND_ONLY 0x0000000000000001

>  #define PE_COFF_IMAGE 0x0000000000000010

>

> +#define EFI_TCG2_MAX_PCR_INDEX 23

> +

>  /* Algorithm Registry */

>  #define EFI_TCG2_BOOT_HASH_ALG_SHA1    0x00000001

>  #define EFI_TCG2_BOOT_HASH_ALG_SHA256  0x00000002

> diff --git a/lib/efi_loader/efi_tcg2.c b/lib/efi_loader/efi_tcg2.c

> index c4e9f61fd6..b268a02976 100644

> --- a/lib/efi_loader/efi_tcg2.c

> +++ b/lib/efi_loader/efi_tcg2.c

> @@ -958,7 +958,7 @@ efi_tcg2_hash_log_extend_event(struct efi_tcg2_protocol *this, u64 flags,

>                 goto out;

>         }

>

> -       if (efi_tcg_event->header.pcr_index > TPM2_MAX_PCRS) {

> +       if (efi_tcg_event->header.pcr_index > EFI_TCG2_MAX_PCR_INDEX) {

>                 ret = EFI_INVALID_PARAMETER;

>                 goto out;

>         }

> --

> 2.17.1

>
Heinrich Schuchardt Sept. 3, 2021, 6:22 a.m. UTC | #2
On 9/3/21 3:55 AM, Masahisa Kojima wrote:
> TCG EFI Protocol Specification defines that PCRIndex parameter

> passed from caller must be 0 to 23.

> TPM2_MAX_PCRS is currently used to check the range of PCRIndex,

> but TPM2_MAX_PCRS is tpm2 device dependent and may have larger value.

> This commit newly adds EFI_TCG2_MAX_PCR_INDEX macro, it is used to

> check the range of PCRIndex parameter.


In the U-Boot code we have TPM2_MAX_PCRS hard coded as 32. Can the value
be less?

>

> Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>

> ---

>   include/efi_tcg2.h        | 2 ++

>   lib/efi_loader/efi_tcg2.c | 2 +-

>   2 files changed, 3 insertions(+), 1 deletion(-)

>

> diff --git a/include/efi_tcg2.h b/include/efi_tcg2.h

> index 45788d55d5..b647361d44 100644

> --- a/include/efi_tcg2.h

> +++ b/include/efi_tcg2.h

> @@ -28,6 +28,8 @@

>   #define EFI_TCG2_EXTEND_ONLY 0x0000000000000001

>   #define PE_COFF_IMAGE 0x0000000000000010

>

> +#define EFI_TCG2_MAX_PCR_INDEX 23

> +

>   /* Algorithm Registry */

>   #define EFI_TCG2_BOOT_HASH_ALG_SHA1    0x00000001

>   #define EFI_TCG2_BOOT_HASH_ALG_SHA256  0x00000002

> diff --git a/lib/efi_loader/efi_tcg2.c b/lib/efi_loader/efi_tcg2.c

> index c4e9f61fd6..b268a02976 100644

> --- a/lib/efi_loader/efi_tcg2.c

> +++ b/lib/efi_loader/efi_tcg2.c

> @@ -958,7 +958,7 @@ efi_tcg2_hash_log_extend_event(struct efi_tcg2_protocol *this, u64 flags,

>   		goto out;

>   	}

>

> -	if (efi_tcg_event->header.pcr_index > TPM2_MAX_PCRS) {


If TPM2_MAX_PCRS were device dependent and could be less then 23 we
would need a check against both constants.

Could you, please, clarify the issue. If TPM2_MAX_PCRS is always greater
then 23, please, mention this in the commit message and perhaps add a
comment in the code here.

Best regards

Heinrich

> +	if (efi_tcg_event->header.pcr_index > EFI_TCG2_MAX_PCR_INDEX) {

>   		ret = EFI_INVALID_PARAMETER;

>   		goto out;

>   	}

>
Ilias Apalodimas Sept. 3, 2021, 6:51 a.m. UTC | #3
Hi Heinrich,

On Fri, Sep 03, 2021 at 08:22:30AM +0200, Heinrich Schuchardt wrote:
> On 9/3/21 3:55 AM, Masahisa Kojima wrote:

> > TCG EFI Protocol Specification defines that PCRIndex parameter

> > passed from caller must be 0 to 23.

> > TPM2_MAX_PCRS is currently used to check the range of PCRIndex,

> > but TPM2_MAX_PCRS is tpm2 device dependent and may have larger value.

> > This commit newly adds EFI_TCG2_MAX_PCR_INDEX macro, it is used to

> > check the range of PCRIndex parameter.

> 

> In the U-Boot code we have TPM2_MAX_PCRS hard coded as 32. Can the value

> be less?


This is defined in [1] 
[1] https://trustedcomputinggroup.org/wp-content/uploads/TSS_Overview_Common_v0p9_r10_12june2021.pdf

> 

> > 

> > Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>

> > ---

> >   include/efi_tcg2.h        | 2 ++

> >   lib/efi_loader/efi_tcg2.c | 2 +-

> >   2 files changed, 3 insertions(+), 1 deletion(-)

> > 

> > diff --git a/include/efi_tcg2.h b/include/efi_tcg2.h

> > index 45788d55d5..b647361d44 100644

> > --- a/include/efi_tcg2.h

> > +++ b/include/efi_tcg2.h

> > @@ -28,6 +28,8 @@

> >   #define EFI_TCG2_EXTEND_ONLY 0x0000000000000001

> >   #define PE_COFF_IMAGE 0x0000000000000010

> > 

> > +#define EFI_TCG2_MAX_PCR_INDEX 23

> > +

> >   /* Algorithm Registry */

> >   #define EFI_TCG2_BOOT_HASH_ALG_SHA1    0x00000001

> >   #define EFI_TCG2_BOOT_HASH_ALG_SHA256  0x00000002

> > diff --git a/lib/efi_loader/efi_tcg2.c b/lib/efi_loader/efi_tcg2.c

> > index c4e9f61fd6..b268a02976 100644

> > --- a/lib/efi_loader/efi_tcg2.c

> > +++ b/lib/efi_loader/efi_tcg2.c

> > @@ -958,7 +958,7 @@ efi_tcg2_hash_log_extend_event(struct efi_tcg2_protocol *this, u64 flags,

> >   		goto out;

> >   	}

> > 

> > -	if (efi_tcg_event->header.pcr_index > TPM2_MAX_PCRS) {

> 

> If TPM2_MAX_PCRS were device dependent and could be less then 23 we

> would need a check against both constants.

> 

> Could you, please, clarify the issue. If TPM2_MAX_PCRS is always greater

> then 23, please, mention this in the commit message and perhaps add a

> comment in the code here.


You don't need that (I think). If the spec says you have to check against
23, then that's what Kojima-san fixes here. 
If the device supports less than 23, then the current code as-is will
return EFI_DEVICE_ERROR, in case the device has less than 23 PCRs. 

We could ofc just check against the value we get from GetCapability, which
would be correct as well?

> 

> Best regards

> 

> Heinrich

> 

> > +	if (efi_tcg_event->header.pcr_index > EFI_TCG2_MAX_PCR_INDEX) {

> >   		ret = EFI_INVALID_PARAMETER;

> >   		goto out;

> >   	}

> > 


[1] https://trustedcomputinggroup.org/wp-content/uploads/TSS_Overview_Common_v0p9_r10_12june2021.pdf

Regards
/Ilias
Heinrich Schuchardt Sept. 3, 2021, 7:11 a.m. UTC | #4
On 9/3/21 8:51 AM, Ilias Apalodimas wrote:
> Hi Heinrich,

>

> On Fri, Sep 03, 2021 at 08:22:30AM +0200, Heinrich Schuchardt wrote:

>> On 9/3/21 3:55 AM, Masahisa Kojima wrote:

>>> TCG EFI Protocol Specification defines that PCRIndex parameter

>>> passed from caller must be 0 to 23.

>>> TPM2_MAX_PCRS is currently used to check the range of PCRIndex,

>>> but TPM2_MAX_PCRS is tpm2 device dependent and may have larger value.

>>> This commit newly adds EFI_TCG2_MAX_PCR_INDEX macro, it is used to

>>> check the range of PCRIndex parameter.

>>

>> In the U-Boot code we have TPM2_MAX_PCRS hard coded as 32. Can the value

>> be less?

>

> This is defined in [1]

> [1] https://trustedcomputinggroup.org/wp-content/uploads/TSS_Overview_Common_v0p9_r10_12june2021.pdf

>

>>

>>>

>>> Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>

>>> ---

>>>    include/efi_tcg2.h        | 2 ++

>>>    lib/efi_loader/efi_tcg2.c | 2 +-

>>>    2 files changed, 3 insertions(+), 1 deletion(-)

>>>

>>> diff --git a/include/efi_tcg2.h b/include/efi_tcg2.h

>>> index 45788d55d5..b647361d44 100644

>>> --- a/include/efi_tcg2.h

>>> +++ b/include/efi_tcg2.h

>>> @@ -28,6 +28,8 @@

>>>    #define EFI_TCG2_EXTEND_ONLY 0x0000000000000001

>>>    #define PE_COFF_IMAGE 0x0000000000000010

>>>

>>> +#define EFI_TCG2_MAX_PCR_INDEX 23

>>> +

>>>    /* Algorithm Registry */

>>>    #define EFI_TCG2_BOOT_HASH_ALG_SHA1    0x00000001

>>>    #define EFI_TCG2_BOOT_HASH_ALG_SHA256  0x00000002

>>> diff --git a/lib/efi_loader/efi_tcg2.c b/lib/efi_loader/efi_tcg2.c

>>> index c4e9f61fd6..b268a02976 100644

>>> --- a/lib/efi_loader/efi_tcg2.c

>>> +++ b/lib/efi_loader/efi_tcg2.c

>>> @@ -958,7 +958,7 @@ efi_tcg2_hash_log_extend_event(struct efi_tcg2_protocol *this, u64 flags,

>>>    		goto out;

>>>    	}

>>>

>>> -	if (efi_tcg_event->header.pcr_index > TPM2_MAX_PCRS) {

>>

>> If TPM2_MAX_PCRS were device dependent and could be less then 23 we

>> would need a check against both constants.

>>

>> Could you, please, clarify the issue. If TPM2_MAX_PCRS is always greater

>> then 23, please, mention this in the commit message and perhaps add a

>> comment in the code here.

>

> You don't need that (I think). If the spec says you have to check against

> 23, then that's what Kojima-san fixes here.

> If the device supports less than 23, then the current code as-is will

> return EFI_DEVICE_ERROR, in case the device has less than 23 PCRs.

>

> We could ofc just check against the value we get from GetCapability, which

> would be correct as well?


Acked-by: Heinrich Schuchardt <xypron.glpk@gmx.de>


>

>>

>> Best regards

>>

>> Heinrich

>>

>>> +	if (efi_tcg_event->header.pcr_index > EFI_TCG2_MAX_PCR_INDEX) {

>>>    		ret = EFI_INVALID_PARAMETER;

>>>    		goto out;

>>>    	}

>>>

>

> [1] https://trustedcomputinggroup.org/wp-content/uploads/TSS_Overview_Common_v0p9_r10_12june2021.pdf

>

> Regards

> /Ilias

>
diff mbox series

Patch

diff --git a/include/efi_tcg2.h b/include/efi_tcg2.h
index 45788d55d5..b647361d44 100644
--- a/include/efi_tcg2.h
+++ b/include/efi_tcg2.h
@@ -28,6 +28,8 @@ 
 #define EFI_TCG2_EXTEND_ONLY 0x0000000000000001
 #define PE_COFF_IMAGE 0x0000000000000010
 
+#define EFI_TCG2_MAX_PCR_INDEX 23
+
 /* Algorithm Registry */
 #define EFI_TCG2_BOOT_HASH_ALG_SHA1    0x00000001
 #define EFI_TCG2_BOOT_HASH_ALG_SHA256  0x00000002
diff --git a/lib/efi_loader/efi_tcg2.c b/lib/efi_loader/efi_tcg2.c
index c4e9f61fd6..b268a02976 100644
--- a/lib/efi_loader/efi_tcg2.c
+++ b/lib/efi_loader/efi_tcg2.c
@@ -958,7 +958,7 @@  efi_tcg2_hash_log_extend_event(struct efi_tcg2_protocol *this, u64 flags,
 		goto out;
 	}
 
-	if (efi_tcg_event->header.pcr_index > TPM2_MAX_PCRS) {
+	if (efi_tcg_event->header.pcr_index > EFI_TCG2_MAX_PCR_INDEX) {
 		ret = EFI_INVALID_PARAMETER;
 		goto out;
 	}