1
Description: Don't permit loading modules on UEFI secure boot
2
Author: Matthew Garrett <mjg@redhat.com>
3
Author: Colin Watson <cjwatson@ubuntu.com>
4
Origin: vendor, http://pkgs.fedoraproject.org/cgit/grub2.git/tree/grub-2.00-no-insmod-on-sb.patch
6
Last-Update: 2012-09-19
8
Index: b/grub-core/kern/dl.c
9
===================================================================
10
--- a/grub-core/kern/dl.c
11
+++ b/grub-core/kern/dl.c
16
+#ifdef GRUB_MACHINE_EFI
17
+#include <grub/efi/efi.h>
22
#pragma GCC diagnostic ignored "-Wcast-align"
27
+#ifdef GRUB_MACHINE_EFI
28
+ if (grub_efi_secure_boot ())
30
+ grub_error (GRUB_ERR_ACCESS_DENIED,
31
+ "Secure Boot forbids loading module from %s", filename);
36
file = grub_file_open (filename);
39
Index: b/grub-core/kern/efi/efi.c
40
===================================================================
41
--- a/grub-core/kern/efi/efi.c
42
+++ b/grub-core/kern/efi/efi.c
48
+grub_efi_secure_boot (void)
50
+ grub_efi_guid_t efi_var_guid = GRUB_EFI_GLOBAL_VARIABLE_GUID;
51
+ grub_size_t datasize;
52
+ char *secure_boot = NULL;
53
+ char *setup_mode = NULL;
54
+ grub_efi_boolean_t ret = 0;
56
+ secure_boot = grub_efi_get_variable("SecureBoot", &efi_var_guid, &datasize);
58
+ if (datasize != 1 || !secure_boot)
61
+ setup_mode = grub_efi_get_variable("SetupMode", &efi_var_guid, &datasize);
63
+ if (datasize != 1 || !setup_mode)
66
+ if (*secure_boot && !*setup_mode)
70
+ grub_free (secure_boot);
71
+ grub_free (setup_mode);
75
#pragma GCC diagnostic ignored "-Wcast-align"
77
/* Search the mods section from the PE32/PE32+ image. This code uses
78
Index: b/include/grub/efi/efi.h
79
===================================================================
80
--- a/include/grub/efi/efi.h
81
+++ b/include/grub/efi/efi.h
83
const grub_efi_guid_t *guid,
85
grub_size_t datasize);
86
+grub_efi_boolean_t EXPORT_FUNC (grub_efi_secure_boot) (void);
88
EXPORT_FUNC (grub_efi_compare_device_paths) (const grub_efi_device_path_t *dp1,
89
const grub_efi_device_path_t *dp2);