summaryrefslogtreecommitdiff
path: root/MokManager.c
diff options
context:
space:
mode:
authorMatthew Garrett <mjg@redhat.com>2012-10-06 17:30:46 -0400
committerMatthew Garrett <mjg@redhat.com>2012-10-06 17:30:46 -0400
commit24eace99538f7281f9490c39f02e640956032c92 (patch)
tree969cb80d9ff6ea0b94ff7a05088ccb9ec3065f4e /MokManager.c
parent27a8fc9fd1f94526965713e0b6b362df49e5569e (diff)
downloadefi-boot-shim-24eace99538f7281f9490c39f02e640956032c92.tar.gz
efi-boot-shim-24eace99538f7281f9490c39f02e640956032c92.zip
Fix menu items
Only show the MOK manipulation menu item if MokNew existed
Diffstat (limited to 'MokManager.c')
-rw-r--r--MokManager.c48
1 files changed, 31 insertions, 17 deletions
diff --git a/MokManager.c b/MokManager.c
index 3325bb30..71d6b4b3 100644
--- a/MokManager.c
+++ b/MokManager.c
@@ -990,33 +990,47 @@ UINTN find_fs (void *data, void *data2) {
return 0;
}
-static int enter_mok_menu(EFI_HANDLE image_handle, void *MokNew)
+static EFI_STATUS enter_mok_menu(EFI_HANDLE image_handle, void *MokNew)
{
- struct menu_item menu_item[3];
+ struct menu_item *menu_item;
UINT32 MokNum;
+ UINTN menucount = 0;
+
+ if (MokNew)
+ menu_item = AllocatePool(sizeof(struct menu_item) * 3);
+ else
+ menu_item = AllocatePool(sizeof(struct menu_item) * 2);
+
+ if (!menu_item)
+ return EFI_OUT_OF_RESOURCES;
menu_item[0].text = StrDuplicate(L"Continue boot");
menu_item[0].colour = EFI_WHITE;
menu_item[0].callback = NULL;
- CopyMem(&MokNum, MokNew, sizeof(UINT32));
- if (MokNum == 0) {
- menu_item[1].text = StrDuplicate(L"Delete MOK");
- menu_item[1].colour = EFI_WHITE;
- menu_item[1].data = MokNew;
- menu_item[1].callback = mok_deletion_prompt;
- } else {
- menu_item[1].text = StrDuplicate(L"Enroll MOK\n");
- menu_item[1].colour = EFI_WHITE;
- menu_item[1].data = MokNew;
- menu_item[1].callback = mok_enrollment_prompt;
+ menucount++;
+
+ if (MokNew) {
+ CopyMem(&MokNum, MokNew, sizeof(UINT32));
+ if (MokNum == 0) {
+ menu_item[1].text = StrDuplicate(L"Delete MOK");
+ menu_item[1].colour = EFI_WHITE;
+ menu_item[1].data = MokNew;
+ menu_item[1].callback = mok_deletion_prompt;
+ } else {
+ menu_item[1].text = StrDuplicate(L"Enroll MOK\n");
+ menu_item[1].colour = EFI_WHITE;
+ menu_item[1].data = MokNew;
+ menu_item[1].callback = mok_enrollment_prompt;
+ }
+ menucount++;
}
- menu_item[2].text = StrDuplicate(L"Enroll key from disk");
- menu_item[2].colour = EFI_WHITE;
- menu_item[2].callback = find_fs;
+ menu_item[menucount].text = StrDuplicate(L"Enroll key from disk");
+ menu_item[menucount].colour = EFI_WHITE;
+ menu_item[menucount].callback = find_fs;
- run_menu(menu_item, 3);
+ run_menu(menu_item, menucount);
return 0;
}