]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Do not attempt to use console output after ExitBootServices()
authorMichael Brown <mcb30@ipxe.org>
Sun, 21 Nov 2021 13:19:55 +0000 (13:19 +0000)
committerMichael Brown <mcb30@ipxe.org>
Sun, 21 Nov 2021 13:24:24 +0000 (13:24 +0000)
A successful call to ExitBootServices() will result in the EFI console
becoming unusable.  Ensure that the EFI wrapper produces a complete
line of debug output before calling the wrapped ExitBootServices()
method, and attempt subsequent debug output only if the call fails.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/interface/efi/efi_wrap.c

index 5c02a7ee18987ac9e7807561e64b1850afa75068..65c70ea28fd864adb5bf198277e21306cb32f7aa 100644 (file)
@@ -735,11 +735,14 @@ efi_exit_boot_services_wrapper ( EFI_HANDLE image_handle, UINTN map_key ) {
        void *retaddr = __builtin_return_address ( 0 );
        EFI_STATUS efirc;
 
-       DBGC ( colour, "ExitBootServices ( %s, %#llx ) ",
+       DBGC ( colour, "ExitBootServices ( %s, %#llx ) -> %p\n",
               efi_handle_name ( image_handle ),
-              ( ( unsigned long long ) map_key ) );
+              ( ( unsigned long long ) map_key ), retaddr );
        efirc = bs->ExitBootServices ( image_handle, map_key );
-       DBGC ( colour, "= %s -> %p\n", efi_status ( efirc ), retaddr );
+       if ( efirc != 0 ) {
+               DBGC ( colour, "ExitBootServices ( ... ) = %s -> %p\n",
+                      efi_status ( efirc ), retaddr );
+       }
        return efirc;
 }