Skip to content

Commit

Permalink
Unhook system services as we exit.
Browse files Browse the repository at this point in the history
If we never find a valid thing to boot, we need to undo the weird things
we've done.

Signed-off-by: Peter Jones <pjones@redhat.com>
  • Loading branch information
vathpela committed Oct 4, 2013
1 parent 3c0ee51 commit f95ccd0
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
2 changes: 1 addition & 1 deletion replacements.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ static typeof(systab->BootServices->ExitBootServices) system_exit_boot_services;

extern UINT8 insecure_mode;

static void
void
unhook_system_services(void)
{
if (insecure_mode)
Expand Down
1 change: 1 addition & 0 deletions replacements.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,6 @@ extern verification_method_t verification_method;
extern int loader_is_participating;

extern void hook_system_services(EFI_SYSTEM_TABLE *local_systab);
extern void unhook_system_services(void);

#endif /* SHIM_REPLACEMENTS_H */
14 changes: 10 additions & 4 deletions shim.c
Original file line number Diff line number Diff line change
Expand Up @@ -1767,18 +1767,24 @@ EFI_STATUS efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *passed_systab)

efi_status = init_grub(image_handle);

#if defined(OVERRIDE_SECURITY_POLICY)
/*
* Clean up the security protocol hook
*/
security_policy_uninstall();
#endif

/*
* If we're back here then clean everything up before exiting
*/
uefi_call_wrapper(BS->UninstallProtocolInterface, 3, handle,
&shim_lock_guid, &shim_lock_interface);

#if defined(OVERRIDE_SECURITY_POLICY)

/*
* Clean up the security protocol hook
* Remove our hooks from system services.
*/
security_policy_uninstall();
#endif
unhook_system_services();

/*
* Free the space allocated for the alternative 2nd stage loader
Expand Down

0 comments on commit f95ccd0

Please sign in to comment.