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 >