Don't free GetVariable() return data without checking the status code.

This breaks every machine from before Secure Boot was a thing.

Signed-off-by: Peter Jones <pjones@redhat.com>
This commit is contained in:
Peter Jones 2013-10-30 16:36:01 -04:00
parent 83b3a7cf6d
commit 556c445ea1

15
shim.c
View File

@ -456,21 +456,30 @@ static BOOLEAN secure_mode (void)
return FALSE;
status = get_variable(L"SecureBoot", &Data, &len, global_var);
if (status != EFI_SUCCESS) {
if (verbose)
console_notify(L"Secure boot not enabled\n");
return FALSE;
}
sb = *Data;
FreePool(Data);
/* FIXME - more paranoia here? */
if (status != EFI_SUCCESS || sb != 1) {
if (sb != 1) {
if (verbose)
console_notify(L"Secure boot not enabled\n");
return FALSE;
}
status = get_variable(L"SetupMode", &Data, &len, global_var);
if (status == EFI_SUCCESS) {
if (verbose)
console_notify(L"Platform is in setup mode\n");
return FALSE;
}
setupmode = *Data;
FreePool(Data);
if (status == EFI_SUCCESS && setupmode == 1) {
if (setupmode == 1) {
if (verbose)
console_notify(L"Platform is in setup mode\n");
return FALSE;