diff options
| author | Gary Ching-Pang Lin <glin@suse.com> | 2012-09-07 18:11:45 +0800 |
|---|---|---|
| committer | Gary Ching-Pang Lin <glin@suse.com> | 2012-09-07 18:11:45 +0800 |
| commit | 0d7c3dbde528bc6dbf8aaf90514b9402052bbd60 (patch) | |
| tree | c770022b0b27024018da7f9dca5d4b3b9cb0f27f | |
| parent | e235c85af1e8d29ba7096a7f66a4ffec45c9ee60 (diff) | |
| download | efi-boot-shim-0d7c3dbde528bc6dbf8aaf90514b9402052bbd60.tar.gz efi-boot-shim-0d7c3dbde528bc6dbf8aaf90514b9402052bbd60.zip | |
Load MokManager for MOK management
| -rw-r--r-- | shim.c | 39 |
1 files changed, 39 insertions, 0 deletions
@@ -41,6 +41,7 @@ #include "signature.h" #define SECOND_STAGE L"\\grub.efi" +#define MOK_MANAGER L"\\MokManager.efi" static EFI_SYSTEM_TABLE *systab; static EFI_STATUS (EFIAPI *entry_point) (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *system_table); @@ -933,6 +934,42 @@ done: return efi_status; } +EFI_STATUS check_mok_request(EFI_HANDLE image_handle) +{ + EFI_STATUS efi_status; + EFI_LOADED_IMAGE *li; + EFI_DEVICE_PATH *mokpath; + CHAR16 *PathName; + EFI_GUID loaded_image_protocol = LOADED_IMAGE_PROTOCOL; + + /* TODO Check whether there is a request */ + + efi_status = uefi_call_wrapper(BS->HandleProtocol, 3, image_handle, + &loaded_image_protocol, &li); + + if (efi_status != EFI_SUCCESS) { + Print(L"Unable to init protocol\n"); + return efi_status; + } + + efi_status = generate_path(li, MOK_MANAGER, &mokpath, &PathName); + + if (efi_status != EFI_SUCCESS) { + Print(L"Unable to generate MokManager path\n"); + goto done; + } + + efi_status = start_image(image_handle, li, PathName); + + if (efi_status != EFI_SUCCESS) { + Print(L"Failed to start MokManager\n"); + goto done; + } +done: + + return efi_status; +} + EFI_STATUS efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *passed_systab) { EFI_GUID shim_lock_guid = SHIM_LOCK_GUID; @@ -946,6 +983,8 @@ EFI_STATUS efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *passed_systab) InitializeLib(image_handle, systab); + efi_status = check_mok_request(image_handle); + uefi_call_wrapper(BS->InstallProtocolInterface, 4, &handle, &shim_lock_guid, EFI_NATIVE_INTERFACE, &shim_lock_interface); |
