[Skiboot] [PATCH] secvar/backend: use endian-aware types in edk2.h

Nicholas Piggin npiggin at gmail.com
Tue Jun 22 21:19:50 AEST 2021


Excerpts from Daniel Axtens's message of June 22, 2021 12:59 pm:
> Recently we had an issue where we did the following:
> 
> uint16_t year = le32_to_cpu(timestamp->year);
> 
> This is wrong and will break on BE. However, we didn't catch this
> with sparse because there was a whole slew of warnings.
> 
> The reason for the slew of warnings is that we didn't annotate the
> types that store little-endian specific data in edk2.h.
> 
> Provide the appropriate annotations.
> 
> We now get a single sparse warning for the file, which correctly
> identifies the issue:
> 
> edk2-compat-process.c:374:46: warning: incorrect type in argument 1 (different base types)
> edk2-compat-process.c:374:46:    expected restricted leint32_t [usertype] le_val
> edk2-compat-process.c:374:46:    got restricted leint16_t const [usertype] year
> 
> There's one annotation that I'm not super happy about - the
> annotation of efi_time->timezone. Happy for other ideas on that
> one.

Is timezone used anywhere?

> 
> Signed-off-by: Daniel Axtens <dja at axtens.net>
> ---
>  libstb/secvar/backend/edk2.h | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/libstb/secvar/backend/edk2.h b/libstb/secvar/backend/edk2.h
> index ef6d7c79e7ff..17df2b7bc536 100644
> --- a/libstb/secvar/backend/edk2.h
> +++ b/libstb/secvar/backend/edk2.h
> @@ -125,15 +125,15 @@ static const uuid_t EFI_CERT_RSA2048_GUID = {{ 0xe8, 0x66, 0x57, 0x3c, 0x9c, 0x2
>   *   TimeZone:   -1440 to 1440 or 2047
>   */
>  struct efi_time {
> -	u16 year;
> +	le16 year;
>  	u8 month;
>  	u8 day;
>  	u8 hour;
>  	u8 minute;
>  	u8 second;
>  	u8 pad1;
> -	u32 nanosecond;
> -	s16 timezone;
> +	le32 nanosecond;
> +	s16 ENDIAN_TYPE timezone;
>  	u8 daylight;
>  	u8 pad2;
>  };

Why does it need to be annotated? None of the Linux tree's efi structs 
seem to have any endian annotations, is that just because they're only
used on little endian platforms I wonder?

Thanks,
Nick


More information about the Skiboot mailing list