Message ID | 20200320182820.149823-2-xypron.glpk@gmx.de |
---|---|
State | New |
Headers | show |
Series | efi_loader: correct reported length in GetNextVariable() | expand |
Hi Heinrich, Heinrich Schuchardt <xypron.glpk at gmx.de> writes: > 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: d99a87f84b75 ("efi_loader: implement GetNextVariableName()") > Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de> > --- > lib/efi_loader/efi_variable.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/lib/efi_loader/efi_variable.c b/lib/efi_loader/efi_variable.c > index c316bdfec0..04ead34c6f 100644 > --- a/lib/efi_loader/efi_variable.c > +++ b/lib/efi_loader/efi_variable.c > @@ -299,7 +299,7 @@ static efi_status_t parse_uboot_variable(char *variable, > p = variable_name; > utf8_utf16_strncpy(&p, name, name_len); > variable_name[name_len] = 0; > - *variable_name_size = name_len + 1; > + *variable_name_size = sizeof(u16) * (name_len + 1); Maybe I am missing something, but isn't a similar fix needed in the function where the buffer is checked for sufficient size? For context, I am referring to if (*variable_name_size < (name_len + 1)) { *variable_name_size = name_len + 1; return EFI_BUFFER_TOO_SMALL; } Thanks, Punit > > /* guid */ > c = *(name - 1); > -- > 2.25.1
On Fri, Mar 20, 2020 at 07:28:19PM +0100, Heinrich Schuchardt wrote: > 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(). Please also correct a function description of GetNextVariable(). -Takahiro Akashi > Fixes: d99a87f84b75 ("efi_loader: implement GetNextVariableName()") > Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de> > --- > lib/efi_loader/efi_variable.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/lib/efi_loader/efi_variable.c b/lib/efi_loader/efi_variable.c > index c316bdfec0..04ead34c6f 100644 > --- a/lib/efi_loader/efi_variable.c > +++ b/lib/efi_loader/efi_variable.c > @@ -299,7 +299,7 @@ static efi_status_t parse_uboot_variable(char *variable, > p = variable_name; > utf8_utf16_strncpy(&p, name, name_len); > variable_name[name_len] = 0; > - *variable_name_size = name_len + 1; > + *variable_name_size = sizeof(u16) * (name_len + 1); > > /* guid */ > c = *(name - 1); > -- > 2.25.1 >
diff --git a/lib/efi_loader/efi_variable.c b/lib/efi_loader/efi_variable.c index c316bdfec0..04ead34c6f 100644 --- a/lib/efi_loader/efi_variable.c +++ b/lib/efi_loader/efi_variable.c @@ -299,7 +299,7 @@ static efi_status_t parse_uboot_variable(char *variable, p = variable_name; utf8_utf16_strncpy(&p, name, name_len); variable_name[name_len] = 0; - *variable_name_size = name_len + 1; + *variable_name_size = sizeof(u16) * (name_len + 1); /* guid */ c = *(name - 1);
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: d99a87f84b75 ("efi_loader: implement GetNextVariableName()") Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de> --- lib/efi_loader/efi_variable.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.25.1