
Hi Caleb,
On Wed, 31 Jul 2024 at 13:16, Caleb Connolly caleb.connolly@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)