diff options
author | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2019-05-20 19:55:18 +0000 |
---|---|---|
committer | Heinrich Schuchardt <xypron.glpk@gmx.de> | 2019-05-24 18:58:13 +0200 |
commit | 20562893fab953a1409abbe3594446ebb79d81c6 (patch) | |
tree | 7afeb426b68defa7e534af5f8d7b90cbb3e1da98 /lib | |
parent | bb2b13d52877c06f798600c848ddf1eb750ba85f (diff) | |
download | u-boot-20562893fab953a1409abbe3594446ebb79d81c6.zip u-boot-20562893fab953a1409abbe3594446ebb79d81c6.tar.gz u-boot-20562893fab953a1409abbe3594446ebb79d81c6.tar.bz2 |
efi_loader: correct device path check
Since commit 226cddbe32f0 ("efi_loader: check device path in
InstallMultipleProtocolInterfaces") iPXE fails to access the network.
LocateDevicePath() returns EFI_SUCCESS even if a shorter path is found as a
partial match. It returns the remaining path. So to be sure that we found a
complete match we need to check that the remaining path refers to an end
node.
Provide debug output if a device path has already been installed.
Fixes: 226cddbe32f0 ("efi_loader: check device path in
InstallMultipleProtocolInterfaces")
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/efi_loader/efi_boottime.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index 971bd5f..54fff85 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -2360,7 +2360,10 @@ efi_status_t EFIAPI efi_install_multiple_protocol_interfaces r = EFI_CALL(efi_locate_device_path(protocol, &dp, &old_handle)); - if (r == EFI_SUCCESS) { + if (r == EFI_SUCCESS && + dp->type == DEVICE_PATH_TYPE_END) { + EFI_PRINT("Path %pD already installed\n", + protocol_interface); r = EFI_ALREADY_STARTED; break; } |