[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