mirror of
https://git.proxmox.com/git/efi-boot-shim
synced 2026-01-05 22:48:08 +00:00
shim: Ignore UEFI LoadOptions that are just NUL characters.
I don't know when or why we ever see this, but it's easy enough to avoid. Resolves github issue #95 Signed-off-by: Peter Jones <pjones@redhat.com>
This commit is contained in:
parent
e207388577
commit
6c8d08c0af
6
shim.c
6
shim.c
@ -2582,6 +2582,12 @@ EFI_STATUS set_second_stage (EFI_HANDLE image_handle)
|
||||
li->LoadOptionsSize -= 16;
|
||||
}
|
||||
|
||||
/*
|
||||
* Apparently sometimes we get L"\0\0"? Which isn't useful at all.
|
||||
*/
|
||||
if (is_all_nuls(li->LoadOptions, li->LoadOptionsSize))
|
||||
return EFI_SUCCESS;
|
||||
|
||||
/*
|
||||
* Check and see if this is just a list of strings. If it's an
|
||||
* EFI_LOAD_OPTION, it'll be 0, since we know EndEntire device path
|
||||
|
||||
20
ucs2.h
20
ucs2.h
@ -36,6 +36,8 @@
|
||||
#ifndef SHIM_UCS2_H
|
||||
#define SHIM_UCS2_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
static inline INTN
|
||||
__attribute__((unused))
|
||||
StrCaseCmp(CHAR16 *s0, CHAR16 *s1)
|
||||
@ -89,6 +91,24 @@ StrCSpn(const CHAR16 *s, const CHAR16 *reject)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Test if an entire buffer is nothing but NUL characters. This
|
||||
* implementation "gracefully" ignores the difference between the
|
||||
* UTF-8/ASCII 1-byte NUL and the UCS-2 2-byte NUL.
|
||||
*/
|
||||
static inline bool
|
||||
__attribute__((__unused__))
|
||||
is_all_nuls(UINT8 *data, UINTN data_size)
|
||||
{
|
||||
UINTN i;
|
||||
|
||||
for (i = 0; i < data_size; i++) {
|
||||
if (data[i] != 0)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline UINTN
|
||||
__attribute__((__unused__))
|
||||
count_ucs2_strings(UINT8 *data, UINTN data_size)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user