u-boot/lib/efi_loader
Alexander Graf 905cb9e172 efi_loader: Ensure efi_dp_find_obj() finds exact matches
When calling efi_dp_find_obj(), we usually want to find the *exact* match
of an object for a given device path. However, I ran into a nasty corner case
where I had the following objects with paths available:

Handle 0x9feffa70
  /HardwareVendor(e61d73b9-a384-4acc-aeab-82e828f3628b)[0: ]/USB(6,0)/EndEntire
Handle 0x9feffb58
  /HardwareVendor(e61d73b9-a384-4acc-aeab-82e828f3628b)[0: ]/USB(6,0)/HD(1,800,32000,2de808cb00000000,1,1)/EndEntire

and was searching for

  /HardwareVendor(e61d73b9-a384-4acc-aeab-82e828f3628b)[0: ]/USB(6,0)/HD(1,800,32000,2de808cb00000000,1,1)/EndEntire

But because our device path search looked for any substring match, it would
return

  /HardwareVendor(e61d73b9-a384-4acc-aeab-82e828f3628b)[0: ]/USB(6,0)/EndEntire

because that path is a full substring of the path we were searching for.

So this patch adapts the device path search logic to always look for exact
matches first. The way we distinguish between those cases is by looking at
whether our caller actually deals with remainders.

As a side effect, the code as is from all I can tell now never does a
substring match anymore, because it always gets called with rem=NULL, so
we always only do exact matches now.

Reported-by: Jonathan Gray <jsg@jsg.id.au>
Signed-off-by: Alexander Graf <agraf@suse.de>
2017-12-16 22:51:19 +01:00
..
.gitignore lib: gitignore *.elf and *.so generated by efi_loader 2017-01-09 10:30:24 -05:00
efi_bootmgr.c efi_loader: add bootmgr 2017-09-20 11:08:01 +02:00
efi_boottime.c efi_loader: helper function to add EFI object to list 2017-12-01 13:41:01 +01:00
efi_console.c efi_loader: efi_console: use helper functions 2017-12-01 13:22:56 +01:00
efi_device_path.c efi_loader: Ensure efi_dp_find_obj() finds exact matches 2017-12-16 22:51:19 +01:00
efi_device_path_to_text.c efi_loader: add missing breaks 2017-12-01 22:29:02 +01:00
efi_disk.c efi_loader: Fix partition offsets 2017-12-01 22:30:47 +01:00
efi_file.c efi_loader: add file/filesys support 2017-09-20 10:43:54 +02:00
efi_gop.c efi_loader: helper function to add EFI object to list 2017-12-01 13:41:01 +01:00
efi_image_loader.c efi_loader: set loaded image code/data type properly 2017-09-20 11:10:24 +02:00
efi_memory.c efi_loader: consistently use efi_uintn_t in boot services 2017-12-01 13:22:56 +01:00
efi_net.c efi_loader: helper function to add EFI object to list 2017-12-01 13:41:01 +01:00
efi_runtime.c efi_loader: efi variable support 2017-09-20 11:00:57 +02:00
efi_smbios.c smbios: Expose in efi_loader as table 2016-10-19 09:01:52 +02:00
efi_variable.c efi_loader: print GUIDs 2017-09-20 11:10:42 +02:00
efi_watchdog.c efi_loader: implement SetWatchdogTimer 2017-12-01 13:22:55 +01:00
helloworld.c efi_loader: helloworld.c: Explicitly use .rodata for loaded_image_guid 2017-12-16 22:51:19 +01:00
Kconfig x86: Enable EFI loader support 2016-11-14 23:24:04 +01:00
Makefile efi_loader helloworld.efi: Fix building with -Os 2017-12-01 22:31:00 +01:00