Fix menu items

Only show the MOK manipulation menu item if MokNew existed
This commit is contained in:
Matthew Garrett 2012-10-06 17:25:57 -04:00
parent ba3c876b24
commit d2188bbf12

View File

@ -990,33 +990,47 @@ UINTN find_fs (void *data, void *data2) {
return 0; 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; 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].text = StrDuplicate(L"Continue boot");
menu_item[0].colour = EFI_WHITE; menu_item[0].colour = EFI_WHITE;
menu_item[0].callback = NULL; menu_item[0].callback = NULL;
CopyMem(&MokNum, MokNew, sizeof(UINT32)); menucount++;
if (MokNum == 0) {
menu_item[1].text = StrDuplicate(L"Delete MOK"); if (MokNew) {
menu_item[1].colour = EFI_WHITE; CopyMem(&MokNum, MokNew, sizeof(UINT32));
menu_item[1].data = MokNew; if (MokNum == 0) {
menu_item[1].callback = mok_deletion_prompt; menu_item[1].text = StrDuplicate(L"Delete MOK");
} else { menu_item[1].colour = EFI_WHITE;
menu_item[1].text = StrDuplicate(L"Enroll MOK\n"); menu_item[1].data = MokNew;
menu_item[1].colour = EFI_WHITE; menu_item[1].callback = mok_deletion_prompt;
menu_item[1].data = MokNew; } else {
menu_item[1].callback = mok_enrollment_prompt; 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[menucount].text = StrDuplicate(L"Enroll key from disk");
menu_item[2].colour = EFI_WHITE; menu_item[menucount].colour = EFI_WHITE;
menu_item[2].callback = find_fs; menu_item[menucount].callback = find_fs;
run_menu(menu_item, 3); run_menu(menu_item, menucount);
return 0; return 0;
} }