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.g...@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
>

Reply via email to