efi_loader: correct device path check
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Mon, 20 May 2019 19:55:18 +0000 (19:55 +0000)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Fri, 24 May 2019 16:58:13 +0000 (18:58 +0200)
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>
lib/efi_loader/efi_boottime.c

index 971bd5f..54fff85 100644 (file)
@@ -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;
                        }