| diff --git a/mok.c b/mok.c |
| index 9b8fc2bc..beac0ff6 100644 |
| --- a/mok.c |
| +++ b/mok.c |
| @@ -261,6 +261,9 @@ static const uint8_t null_sha256[32] = { 0, }; |
| |
| typedef UINTN SIZE_T; |
| |
| +#define EFI_MAJOR_VERSION(tablep) ((UINT16)((((tablep)->Hdr.Revision) >> 16) & 0xfffful)) |
| +#define EFI_MINOR_VERSION(tablep) ((UINT16)(((tablep)->Hdr.Revision) & 0xfffful)) |
| + |
| static EFI_STATUS |
| get_max_var_sz(UINT32 attrs, SIZE_T *max_var_szp) |
| { |
| @@ -270,11 +273,21 @@ get_max_var_sz(UINT32 attrs, SIZE_T *max_var_szp) |
| uint64_t max_var_sz = 0; |
| |
| *max_var_szp = 0; |
| - efi_status = gRT->QueryVariableInfo(attrs, &max_storage_sz, |
| - &remaining_sz, &max_var_sz); |
| - if (EFI_ERROR(efi_status)) { |
| - perror(L"Could not get variable storage info: %r\n", efi_status); |
| - return efi_status; |
| + if (EFI_MAJOR_VERSION(gRT) < 2) { |
| + dprint(L"EFI %d.%d; no RT->QueryVariableInfo(). Using 1024!\n", |
| + EFI_MAJOR_VERSION(gRT), EFI_MINOR_VERSION(gRT)); |
| + max_var_sz = remaining_sz = max_storage_sz = 1024; |
| + efi_status = EFI_SUCCESS; |
| + } else { |
| + dprint(L"calling RT->QueryVariableInfo() at 0x%lx\n", |
| + gRT->QueryVariableInfo); |
| + efi_status = gRT->QueryVariableInfo(attrs, &max_storage_sz, |
| + &remaining_sz, &max_var_sz); |
| + if (EFI_ERROR(efi_status)) { |
| + perror(L"Could not get variable storage info: %r\n", |
| + efi_status); |
| + return efi_status; |
| + } |
| } |
| |
| /* |