[PATCH] efi_selftest: fix guid comparison
Vincent Stehlé
vincent.stehle at arm.com
Mon Jun 15 11:57:35 CEST 2026
On Sat, Jun 13, 2026 at 10:22:39AM +0200, Heinrich Schuchardt wrote:
> On 6/11/26 11:29, Vincent Stehlé wrote:
> > The `loaded image' efi selftest is comparing protocol GUIDs with the wrong
> > polarity.
> > This can be verified on the sandbox, where two protocols GUIDs are
> > retrieved by the test from the image handle in the following order:
> >
> > 1. Loaded Image Device Path Protocol GUID
> > 2. Loaded Image Protocol GUID
> >
> > The test matches on the first GUID, while it is in fact looking for the
> > second one; fix the comparison polarity.
> >
> > While at it, use guidcmp() instead of memcmp() to spare the size parameter,
> > and use the Loaded Image Protocol GUID definition from efi_api.h instead or
> > redefining it locally.
>
> Hello Vincent,
>
> Thank you for catching the issue with the incorrect checkout for the Loaded
> Image Protocol.
Hi Heinrich,
Thanks for your review.
> We never use U-Boot library functions in efi_selftest to allow converting it
> into a standalone EFI application.
Ok, this makes sense.
I will send a v2 keeping memcmp().
Note that I see 4 calls to guidcmp() in the selftests already. I think this does
not harm in practice because guidcmp() this is marked inline.
I also see more than a dozen places where memcmp() is used to compare GUIDs in
the selftests.
Would you like me to send another series to add a local definition of guidcmp()
for the selftests and convert all memcmp() when appropriate?
Or should I rather send a series converting all uses of guidcmp() in the
selftests to memcmp(), maybe?
>
> >
> > Fixes: efe79a7c0de0 ("efi_selftest: test for loaded image protocol")
> > Signed-off-by: Vincent Stehlé <vincent.stehle at arm.com>
> > Cc: Heinrich Schuchardt <xypron.glpk at gmx.de>
> > Cc: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> > Cc: Tom Rini <trini at konsulko.com>
> > Cc: Alexander Graf <agraf at suse.de>
> > ---
> > lib/efi_selftest/efi_selftest_loaded_image.c | 7 ++-----
> > 1 file changed, 2 insertions(+), 5 deletions(-)
> >
> > diff --git a/lib/efi_selftest/efi_selftest_loaded_image.c b/lib/efi_selftest/efi_selftest_loaded_image.c
> > index 5889ab12617..48890a66db7 100644
> > --- a/lib/efi_selftest/efi_selftest_loaded_image.c
> > +++ b/lib/efi_selftest/efi_selftest_loaded_image.c
> > @@ -9,9 +9,7 @@
> > #include <efi_selftest.h>
> > -static efi_guid_t loaded_image_protocol_guid =
> > - EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2,
> > - 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b);
> > +static efi_guid_t loaded_image_protocol_guid = EFI_LOADED_IMAGE_PROTOCOL_GUID;
>
> This change is not described in the commit message.
It was a bit hidden, but it was mentioned:
(..) and use the Loaded Image Protocol GUID definition from efi_api.h instead
or redefining it locally.
> With the change we no
> longer test if efi_api.h has the correct value of the GUID. Why would you
> prefer this?
Sure, it could make sense to duplicate the GUIDs definitions for test purposes.
I will keep the definition as it is in the v2.
Note that we have a dozen places in the selftests using the common GUID
definitions from efi_api.h; shall I send a patch series to replace those?
Best regards,
Vincent.
>
> > static struct efi_boot_services *boottime;
> > efi_handle_t image_handle;
> > @@ -60,8 +58,7 @@ static int execute(void)
> > efi_st_printf("%u protocols installed on image handle\n",
> > (unsigned int)protocol_buffer_count);
> > for (i = 0; i < protocol_buffer_count; ++i) {
> > - if (memcmp(protocol_buffer[i], &loaded_image_protocol_guid,
> > - sizeof(efi_guid_t)))
> > + if (!guidcmp(protocol_buffer[i], &loaded_image_protocol_guid))
> > found = true;
>
> Changing the polarity is correct.
>
> Best regards
>
> Heinrich
>
> > }
> > if (!found) {
--
Vincent.
More information about the U-Boot
mailing list