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