mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-18 13:11:31 +00:00
efi_loader: correct reported length in GetNextVariable()
The runtime service GetNextVariable() returns the length of the next
variable including the closing 0x0000. This length should be in bytes.
Comparing the output of EDK2 and U-Boot shows that this is currently not
correctly implemented:
EDK2:
OsIndicationsSupported: 46
PlatformLang: 26
PlatformLangCodes: 36
U-Boot:
OsIndicationsSupported: 23
PlatformLang: 13
PlatformLangCodes: 18
Provide correct length in GetNextVariable().
Fixes: d99a87f84b
("efi_loader: implement GetNextVariableName()")
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
47a9596354
commit
4d7f5af841
1 changed files with 6 additions and 5 deletions
|
@ -273,7 +273,8 @@ static efi_status_t parse_uboot_variable(char *variable,
|
|||
u32 *attributes)
|
||||
{
|
||||
char *guid, *name, *end, c;
|
||||
unsigned long name_len;
|
||||
size_t name_len;
|
||||
efi_uintn_t old_variable_name_size;
|
||||
u16 *p;
|
||||
|
||||
guid = strchr(variable, '_');
|
||||
|
@ -289,17 +290,17 @@ static efi_status_t parse_uboot_variable(char *variable,
|
|||
return EFI_INVALID_PARAMETER;
|
||||
|
||||
name_len = end - name;
|
||||
if (*variable_name_size < (name_len + 1)) {
|
||||
*variable_name_size = name_len + 1;
|
||||
old_variable_name_size = *variable_name_size;
|
||||
*variable_name_size = sizeof(u16) * (name_len + 1);
|
||||
if (old_variable_name_size < *variable_name_size)
|
||||
return EFI_BUFFER_TOO_SMALL;
|
||||
}
|
||||
|
||||
end++; /* point to value */
|
||||
|
||||
/* variable name */
|
||||
p = variable_name;
|
||||
utf8_utf16_strncpy(&p, name, name_len);
|
||||
variable_name[name_len] = 0;
|
||||
*variable_name_size = name_len + 1;
|
||||
|
||||
/* guid */
|
||||
c = *(name - 1);
|
||||
|
|
Loading…
Add table
Reference in a new issue