[PATCH 1/2] efi_loader: multi part device paths to text
Heinrich Schuchardt
xypron.glpk at gmx.de
Fri Feb 19 12:45:38 CET 2021
On 19.02.21 11:13, Ilias Apalodimas wrote:
> Hi Heinrich
>
> On Thu, Feb 18, 2021 at 06:30:43PM +0100, Heinrich Schuchardt wrote:
>> Our current implementation of
>> EFI_DEVICE_PATH_TO_TEXT_PROTOCOL.ConvertDevicePathToText() truncates multi
>> part device paths after the first part. We should convert all parts.
>>
>> Render device path instance ends as commas. This is not explicitly
>> described in the UEFI spec but mimics what EDK II does.
>>
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
>> ---
>> lib/efi_loader/efi_device_path_to_text.c | 17 ++++++++++++-----
>> 1 file changed, 12 insertions(+), 5 deletions(-)
>>
>> diff --git a/lib/efi_loader/efi_device_path_to_text.c b/lib/efi_loader/efi_device_path_to_text.c
>> index 1aaa9f94fa..81b8ac23ba 100644
>> --- a/lib/efi_loader/efi_device_path_to_text.c
>> +++ b/lib/efi_loader/efi_device_path_to_text.c
>> @@ -369,11 +369,18 @@ static uint16_t EFIAPI *efi_convert_device_path_to_text(
>>
>> if (!device_path)
>> goto out;
>> - while (device_path &&
>> - str + MAX_NODE_LEN < buffer + MAX_PATH_LEN) {
>> - *str++ = '/';
>> - str = efi_convert_single_device_node_to_text(str, device_path);
>> - device_path = efi_dp_next(device_path);
>> + while (device_path && str + MAX_NODE_LEN < buffer + MAX_PATH_LEN) {
>> + if (device_path->type == DEVICE_PATH_TYPE_END) {
>> + if (device_path->sub_type !=
>> + DEVICE_PATH_SUB_TYPE_INSTANCE_END)
>
> maybe it's better to check explicitly for '== DEVICE_PATH_SUB_TYPE_END'?
Thank you for reviewing.
I want to leave the loop when an unexpected value occurs.
Best regards
Heinrich
>
>> + break;
>> + *str++ = ',';
>> + } else {
>> + *str++ = '/';
>> + str = efi_convert_single_device_node_to_text(
>> + str, device_path);
>> + }
>> + *(u8 **)&device_path += device_path->length;
>> }
>>
>> text = efi_str_to_u16(buffer);
>> --
>> 2.30.0
>>
>
> Cheers
> /Ilias
>
More information about the U-Boot
mailing list