[PATCH] efi_loader: add missing EFI_EXIT in efi_disconnect_controller

Vincent Stehlé vincent.stehle at arm.com
Thu Jun 18 17:48:58 CEST 2026


On Thu, Jun 18, 2026 at 04:27:00PM +0100, Simon Glass wrote:
> On Thu, 18 Jun 2026 at 16:21, Ilias Apalodimas
> <ilias.apalodimas at linaro.org> wrote:
> >
> > Hi Vincent,
> >
> >
> > On Thu, 18 Jun 2026 at 18:19, Simon Glass <sjg at chromium.org> wrote:
> >>
> >> Hi Vincent,
> >>
> >> On Thu, 18 Jun 2026 at 16:09, Vincent Stehlé <vincent.stehle at arm.com> wrote:
> >> >
> >> > Make sure to call EFI_EXIT() in efi_disconnect_controller(), when returning
> >> > after having called EFI_ENTRY().
> >> >
> >> > This is inspired by a barebox fix. [1]
> >>
> >> Hmm, does Barebox support EFI_LOADER now? I wish we could bring these
> >> projects back together :-)
> >>
> >> >
> >> > Link: https://git.pengutronix.de/cgit/barebox/commit/?id=080db65e39a877b000baaf843c997a69821dfe69 [1]
> >> > Fixes: 314bed6c854e ("efi_loader: fix DisconnectController() for sole child")
> >> > 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>
> >> > ---
> >> >  lib/efi_loader/efi_boottime.c | 2 +-
> >> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >> >
> >> > diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
> >> > index de57823bd44..b6966652d97 100644
> >> > --- a/lib/efi_loader/efi_boottime.c
> >> > +++ b/lib/efi_loader/efi_boottime.c
> >> > @@ -3895,7 +3895,7 @@ efi_status_t EFIAPI efi_disconnect_controller(
> >> >                                       &number_of_children,
> >> >                                       &child_handle_buffer);
> >> >         if (r != EFI_SUCCESS)
> >> > -               return r;
> >> > +               return EFI_EXIT(r);
> >
> >
> > Any reason we can just goto out;
> 
> +1...every other error path uses 'goto out' so the single EFI_EXIT()
> at the bottom handles things - child_handle_buffer is initialised to
> NULL so the free() at out is safe.

Hi,

I think you are right; I will send a v2.

Best regards,
Vincent.

> 
> >
> > Thanks
> > /Ilias
> >>
> >> >         sole_child = (number_of_children == 1);
> >> >
> >> >         if (child_handle) {
> >> > --
> >> > 2.53.0
> 
> Regards,
> Simon


More information about the U-Boot mailing list