[Skiboot] [PATCH] secvar: fix endian conversion
dja at axtens.net
Mon Jun 21 18:53:48 AEST 2021
> unpack_timestamp() calls le32_to_cpu() for endian conversion of
> uint16_t "year" value. This patch fixes the code to use le16_to_cpu().
I checked the rest of this file.
There are 13 *_to_cpu()s. SignatureSize, SignatureHeaderSize and
SignatureListSize are consistantly le32_to_cpu().
There's a le32_to_cpu conversion for auth_info.hdr.dw_length; that
matches the type of dw_length which is u32.
With this patch, every use of timestamp->year is converted with
There is only 1 cpu_to_*, which is a conversion of SECVAR_ATTRIBUTES.
[I note in passing that this will only make a difference at runtime if
the code is run as BE, I thought skiboot was run as LE these days? Maybe
Running with `make C=1` at some point, sparse reports a number of issues
with this file:
edk2-compat-process.c:109:32: warning: incorrect type in argument 1 (different base types)
edk2-compat-process.c:109:32: expected restricted leint32_t [usertype] le_val
edk2-compat-process.c:109:32: got unsigned int [usertype] SignatureListSize
edk2-compat-process.c:402:9: warning: incorrect type in argument 1 (different base types)
edk2-compat-process.c:402:9: expected restricted leint16_t [usertype] le_val
edk2-compat-process.c:402:9: got unsigned short [usertype] year
I think a lot of those relate to the structure not defining members like
SignatureListSize as le32 - perhaps it would be worth seeing if any of
this should be fixed up while we're looking at endianness issues.
As far as this specific fix goes, however:
Reviewed-by: Daniel Axtens <dja at axtens.net>
> Signed-off-by: Nayna Jain <nayna at linux.ibm.com>
> libstb/secvar/backend/edk2-compat-process.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> diff --git a/libstb/secvar/backend/edk2-compat-process.c b/libstb/secvar/backend/edk2-compat-process.c
> index 244f2340..037c1b49 100644
> --- a/libstb/secvar/backend/edk2-compat-process.c
> +++ b/libstb/secvar/backend/edk2-compat-process.c
> @@ -370,7 +370,7 @@ int update_timestamp(const char *key, const struct efi_time *timestamp, char *la
> static uint64_t unpack_timestamp(const struct efi_time *timestamp)
> uint64_t val = 0;
> - uint16_t year = le32_to_cpu(timestamp->year);
> + uint16_t year = le16_to_cpu(timestamp->year);
> /* pad1, nanosecond, timezone, daylight and pad2 are meant to be zero */
> val |= ((uint64_t) timestamp->pad1 & 0xFF) << 0;
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
More information about the Skiboot