static grub_guid_t shim_lock_guid = GRUB_EFI_SHIM_LOCK_GUID;
+static bool shim_lock_enabled = false;
+
/*
* Determine whether we're in secure boot mode.
*
/* Enforce shim_lock_verifier. */
grub_verifier_register (&shim_lock_verifier);
+ shim_lock_enabled = true;
+
grub_env_set ("shim_lock", "y");
grub_env_export ("shim_lock");
}
+
+bool
+grub_is_shim_lock_enabled (void)
+{
+ return shim_lock_enabled;
+}
#include <grub/efi/fdtload.h>
#include <grub/efi/memory.h>
#include <grub/efi/pe32.h>
+#include <grub/efi/sb.h>
#include <grub/i18n.h>
#include <grub/lib/cmdline.h>
#include <grub/verify.h>
grub_dl_ref (my_mod);
+ if (grub_is_shim_lock_enabled () == true)
+ {
+#if defined(__i386__) || defined(__x86_64__)
+ grub_dprintf ("linux", "shim_lock enabled, falling back to legacy Linux kernel loader\n");
+
+ err = grub_cmd_linux_x86_legacy (cmd, argc, argv);
+
+ if (err == GRUB_ERR_NONE)
+ return GRUB_ERR_NONE;
+ else
+ goto fail;
+#else
+ grub_dprintf ("linux", "shim_lock enabled, trying Linux kernel EFI stub loader\n");
+#endif
+ }
+
if (argc == 0)
{
grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
#include <grub/types.h>
#include <grub/dl.h>
-#define GRUB_EFI_SECUREBOOT_MODE_UNSET 0
+#define GRUB_EFI_SECUREBOOT_MODE_UNSET 0
#define GRUB_EFI_SECUREBOOT_MODE_UNKNOWN 1
#define GRUB_EFI_SECUREBOOT_MODE_DISABLED 2
#define GRUB_EFI_SECUREBOOT_MODE_ENABLED 3
extern grub_uint8_t
EXPORT_FUNC (grub_efi_get_secureboot) (void);
+extern bool
+EXPORT_FUNC (grub_is_shim_lock_enabled) (void);
+
extern void
grub_shim_lock_verifier_setup (void);
#else