diff options
author | Heinrich Schuchardt | 2021-02-02 17:53:14 +0100 |
---|---|---|
committer | Heinrich Schuchardt | 2021-02-04 20:09:02 +0100 |
commit | b9b0ea30c70bf37cc172604c67e6e9c5548870c1 (patch) | |
tree | f88ef75c8c226b889cf5e3c12a1c1d64be991086 | |
parent | 1bc9fc3483ece303ad7181ea024312248d8ce928 (diff) |
efi_loader: install UEFI System Partition GUID
On the handle for the UEFI System Partition we must install the System
Partition GUID (with a NULL interface).
Let the efidebug command display the GUID.
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
-rw-r--r-- | cmd/efidebug.c | 5 | ||||
-rw-r--r-- | lib/efi_loader/efi_disk.c | 15 |
2 files changed, 12 insertions, 8 deletions
diff --git a/cmd/efidebug.c b/cmd/efidebug.c index 83bc2196a5a..bbbcb0a5464 100644 --- a/cmd/efidebug.c +++ b/cmd/efidebug.c @@ -16,6 +16,7 @@ #include <log.h> #include <malloc.h> #include <mapmem.h> +#include <part.h> #include <search.h> #include <linux/ctype.h> @@ -502,6 +503,10 @@ static const struct { "Device-Tree Fixup", EFI_DT_FIXUP_PROTOCOL_GUID, }, + { + "System Partition", + PARTITION_SYSTEM_GUID + }, /* Configuration table GUIDs */ { "ACPI table", diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c index d0aad0252a5..1f6b817dead 100644 --- a/lib/efi_loader/efi_disk.c +++ b/lib/efi_loader/efi_disk.c @@ -19,6 +19,7 @@ struct efi_system_partition efi_system_partition; const efi_guid_t efi_block_io_guid = EFI_BLOCK_IO_PROTOCOL_GUID; +const efi_guid_t efi_system_partition_guid = PARTITION_SYSTEM_GUID; /** * struct efi_disk_obj - EFI disk object @@ -362,6 +363,7 @@ static efi_status_t efi_disk_add_dev( { struct efi_disk_obj *diskobj; struct efi_object *handle; + const efi_guid_t *guid = NULL; efi_status_t ret; /* Don't add empty devices */ @@ -400,6 +402,8 @@ static efi_status_t efi_disk_add_dev( efi_free_pool(node); diskobj->offset = part_info->start; diskobj->media.last_block = part_info->size - 1; + if (part_info->bootable & PART_EFI_SYSTEM_PARTITION) + guid = &efi_system_partition_guid; } else { diskobj->dp = efi_dp_from_part(desc, part); diskobj->offset = 0; @@ -417,7 +421,8 @@ static efi_status_t efi_disk_add_dev( handle = &diskobj->header; ret = EFI_CALL(efi_install_multiple_protocol_interfaces( &handle, &efi_guid_device_path, diskobj->dp, - &efi_block_io_guid, &diskobj->ops, NULL)); + &efi_block_io_guid, &diskobj->ops, + guid, NULL, NULL)); if (ret != EFI_SUCCESS) return ret; @@ -467,13 +472,7 @@ static efi_status_t efi_disk_add_dev( /* Store first EFI system partition */ if (part && !efi_system_partition.if_type) { - int r; - struct disk_partition info; - - r = part_get_info(desc, part, &info); - if (r) - return EFI_DEVICE_ERROR; - if (info.bootable & PART_EFI_SYSTEM_PARTITION) { + if (part_info->bootable & PART_EFI_SYSTEM_PARTITION) { efi_system_partition.if_type = desc->if_type; efi_system_partition.devnum = desc->devnum; efi_system_partition.part = part; |