[PATCH v5 02/11] lib: uuid: add UUID v5 support

Ilias Apalodimas ilias.apalodimas at linaro.org
Wed Jul 31 14:01:50 CEST 2024


Hi Caleb,

On Wed, 31 Jul 2024 at 13:16, Caleb Connolly <caleb.connolly at linaro.org> wrote:
>
>
> >> +       /* Make little endian */
> >> +       tmp32 = (uint32_t *)&guid->b[0];
> >> +       *tmp32 = be32_to_cpu(*tmp32);
> >> +       tmp16 = (uint16_t *)&guid->b[4];
> >> +       *tmp16 = be16_to_cpu(*tmp16);
> >> +       tmp16 = (uint16_t *)&guid->b[6];
> >> +       *tmp16 = be16_to_cpu(*tmp16);
> >
> > you need to explicitly convert those to LE, instead of relying to the
> > native cpu endianess here
>
> The EFI spec iirc is not explicit on the binary format for GUIDs on big
> endian systems (and currently doesn't support them at all??). Is LE
> always correct??

Appendix A on GUIDs and formats says
"It should also be noted that TimeLow, TimeMid, TimeHighAndVersion
fields in the EFI are encoded as little endian".  So, the native
endianness shouldn't matter

Cheers
/Ilias

> >
> > cheers
> > /Ilias
> >> +}
> >> +
> >>   #if defined(CONFIG_RANDOM_UUID) || defined(CONFIG_CMD_UUID)
> >>   void gen_rand_uuid(unsigned char *uuid_bin)
> >>   {
> >>          u32 ptr[4];
> >> @@ -394,15 +444,9 @@ void gen_rand_uuid(unsigned char *uuid_bin)
> >>          /* Set all fields randomly */
> >>          for (i = 0; i < 4; i++)
> >>                  ptr[i] = rand();
> >>
> >> -       clrsetbits_be16(&uuid->time_hi_and_version,
> >> -                       UUID_VERSION_MASK,
> >> -                       UUID_VERSION << UUID_VERSION_SHIFT);
> >> -
> >> -       clrsetbits_8(&uuid->clock_seq_hi_and_reserved,
> >> -                    UUID_VARIANT_MASK,
> >> -                    UUID_VARIANT << UUID_VARIANT_SHIFT);
> >> +       configure_uuid(uuid, UUID_VERSION);
> >>
> >>          memcpy(uuid_bin, uuid, 16);
> >>   }
> >>
> >>
> >> --
> >> 2.45.2
> >>
>
> --
> // Caleb (they/them)


More information about the U-Boot mailing list