mirror of
https://github.com/systemd/systemd
synced 2024-10-14 20:17:52 +00:00
Merge pull request #25350 from poettering/efi-guid-equal
efi: add efi_guid_equal() helper
This commit is contained in:
commit
c68523e00d
|
@ -8,13 +8,6 @@
|
|||
|
||||
#define FDT_V1_SIZE (7*4)
|
||||
|
||||
static void *get_dtb_table(void) {
|
||||
for (UINTN i = 0; i < ST->NumberOfTableEntries; i++)
|
||||
if (memcmp(&EfiDtbTableGuid, &ST->ConfigurationTable[i].VendorGuid, sizeof(EfiDtbTableGuid)) == 0)
|
||||
return ST->ConfigurationTable[i].VendorTable;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static EFI_STATUS devicetree_allocate(struct devicetree_state *state, UINTN size) {
|
||||
UINTN pages = DIV_ROUND_UP(size, EFI_PAGE_SIZE);
|
||||
EFI_STATUS err;
|
||||
|
@ -81,7 +74,7 @@ EFI_STATUS devicetree_install(struct devicetree_state *state, EFI_FILE *root_dir
|
|||
assert(root_dir);
|
||||
assert(name);
|
||||
|
||||
state->orig = get_dtb_table();
|
||||
state->orig = find_configuration_table(&EfiDtbTableGuid);
|
||||
if (!state->orig)
|
||||
return EFI_UNSUPPORTED;
|
||||
|
||||
|
@ -121,7 +114,7 @@ EFI_STATUS devicetree_install_from_memory(struct devicetree_state *state,
|
|||
assert(state);
|
||||
assert(dtb_buffer && dtb_length > 0);
|
||||
|
||||
state->orig = get_dtb_table();
|
||||
state->orig = find_configuration_table(&EfiDtbTableGuid);
|
||||
if (!state->orig)
|
||||
return EFI_UNSUPPORTED;
|
||||
|
||||
|
|
|
@ -134,7 +134,7 @@ static EFI_STATUS try_gpt(
|
|||
EFI_PARTITION_ENTRY *entry =
|
||||
(EFI_PARTITION_ENTRY *) ((uint8_t *) entries + gpt.gpt_header.SizeOfPartitionEntry * i);
|
||||
|
||||
if (memcmp(&entry->PartitionTypeGUID, type, sizeof(entry->PartitionTypeGUID)) != 0)
|
||||
if (!efi_guid_equal(&entry->PartitionTypeGUID, type))
|
||||
continue;
|
||||
|
||||
if (entry->EndingLBA < entry->StartingLBA) /* Bogus? */
|
||||
|
|
|
@ -141,12 +141,7 @@ EFI_STATUS process_random_seed(EFI_FILE *root_dir) {
|
|||
/* Some basic domain separation in case somebody uses this data elsewhere */
|
||||
sha256_process_bytes(HASH_LABEL, sizeof(HASH_LABEL) - 1, &hash);
|
||||
|
||||
for (size_t i = 0; i < ST->NumberOfTableEntries; ++i)
|
||||
if (memcmp(&(const EFI_GUID)LINUX_EFI_RANDOM_SEED_TABLE_GUID,
|
||||
&ST->ConfigurationTable[i].VendorGuid, sizeof(EFI_GUID)) == 0) {
|
||||
previous_seed_table = ST->ConfigurationTable[i].VendorTable;
|
||||
break;
|
||||
}
|
||||
previous_seed_table = find_configuration_table(&(const EFI_GUID) LINUX_EFI_RANDOM_SEED_TABLE_GUID);
|
||||
if (!previous_seed_table) {
|
||||
size = 0;
|
||||
sha256_process_bytes(&size, sizeof(size), &hash);
|
||||
|
|
|
@ -747,3 +747,11 @@ bool in_hypervisor(void) {
|
|||
return !!(ecx & 0x80000000U);
|
||||
}
|
||||
#endif
|
||||
|
||||
void *find_configuration_table(const EFI_GUID *guid) {
|
||||
for (UINTN i = 0; i < ST->NumberOfTableEntries; i++)
|
||||
if (efi_guid_equal(&ST->ConfigurationTable[i].VendorGuid, guid))
|
||||
return ST->ConfigurationTable[i].VendorTable;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -242,3 +242,9 @@ static inline bool in_hypervisor(void) {
|
|||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline bool efi_guid_equal(const EFI_GUID *a, const EFI_GUID *b) {
|
||||
return memcmp(a, b, sizeof(EFI_GUID)) == 0;
|
||||
}
|
||||
|
||||
void *find_configuration_table(const EFI_GUID *guid);
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
/* detect direct boot */
|
||||
bool is_direct_boot(EFI_HANDLE device) {
|
||||
EFI_STATUS err;
|
||||
VENDOR_DEVICE_PATH *dp;
|
||||
VENDOR_DEVICE_PATH *dp; /* NB: Alignment of this structure might be quirky! */
|
||||
|
||||
err = BS->HandleProtocol(device, &DevicePathProtocol, (void **) &dp);
|
||||
if (err != EFI_SUCCESS)
|
||||
|
@ -27,7 +27,7 @@ bool is_direct_boot(EFI_HANDLE device) {
|
|||
/* 'qemu -kernel systemd-bootx64.efi' */
|
||||
if (dp->Header.Type == MEDIA_DEVICE_PATH &&
|
||||
dp->Header.SubType == MEDIA_VENDOR_DP &&
|
||||
memcmp(&dp->Guid, &(EFI_GUID)QEMU_KERNEL_LOADER_FS_MEDIA_GUID, sizeof(EFI_GUID)) == 0)
|
||||
memcmp(&dp->Guid, &(EFI_GUID)QEMU_KERNEL_LOADER_FS_MEDIA_GUID, sizeof(EFI_GUID)) == 0) /* Don't change to efi_guid_equal() because EFI device path objects are not necessarily aligned! */
|
||||
return true;
|
||||
|
||||
/* loaded from firmware volume (sd-boot added to ovmf) */
|
||||
|
|
Loading…
Reference in a new issue