summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Ching-Pang Lin <glin@suse.com>2012-09-07 18:11:45 +0800
committerGary Ching-Pang Lin <glin@suse.com>2012-09-07 18:11:45 +0800
commit0d7c3dbde528bc6dbf8aaf90514b9402052bbd60 (patch)
treec770022b0b27024018da7f9dca5d4b3b9cb0f27f
parente235c85af1e8d29ba7096a7f66a4ffec45c9ee60 (diff)
downloadefi-boot-shim-0d7c3dbde528bc6dbf8aaf90514b9402052bbd60.tar.gz
efi-boot-shim-0d7c3dbde528bc6dbf8aaf90514b9402052bbd60.zip
Load MokManager for MOK management
-rw-r--r--shim.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/shim.c b/shim.c
index fd1573c5..71c80ce7 100644
--- a/shim.c
+++ b/shim.c
@@ -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);