1  // SPDX-License-Identifier: GPL-2.0-only
2  /*
3   * efi.c - EFI subsystem
4   *
5   * Copyright (C) 2001,2003,2004 Dell <Matt_Domsch@dell.com>
6   * Copyright (C) 2004 Intel Corporation <matthew.e.tolentino@intel.com>
7   * Copyright (C) 2013 Tom Gundersen <teg@jklm.no>
8   *
9   * This code registers /sys/firmware/efi{,/efivars} when EFI is supported,
10   * allowing the efivarfs to be mounted or the efivars module to be loaded.
11   * The existance of /sys/firmware/efi may also be used by userspace to
12   * determine that the system supports EFI.
13   */
14  
15  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
16  
17  #include <linux/kobject.h>
18  #include <linux/module.h>
19  #include <linux/init.h>
20  #include <linux/debugfs.h>
21  #include <linux/device.h>
22  #include <linux/efi.h>
23  #include <linux/of.h>
24  #include <linux/initrd.h>
25  #include <linux/io.h>
26  #include <linux/kexec.h>
27  #include <linux/platform_device.h>
28  #include <linux/random.h>
29  #include <linux/reboot.h>
30  #include <linux/slab.h>
31  #include <linux/acpi.h>
32  #include <linux/ucs2_string.h>
33  #include <linux/memblock.h>
34  #include <linux/security.h>
35  #include <linux/notifier.h>
36  
37  #include <asm/early_ioremap.h>
38  
39  struct efi __read_mostly efi = {
40  	.runtime_supported_mask = EFI_RT_SUPPORTED_ALL,
41  	.acpi			= EFI_INVALID_TABLE_ADDR,
42  	.acpi20			= EFI_INVALID_TABLE_ADDR,
43  	.smbios			= EFI_INVALID_TABLE_ADDR,
44  	.smbios3		= EFI_INVALID_TABLE_ADDR,
45  	.esrt			= EFI_INVALID_TABLE_ADDR,
46  	.tpm_log		= EFI_INVALID_TABLE_ADDR,
47  	.tpm_final_log		= EFI_INVALID_TABLE_ADDR,
48  #ifdef CONFIG_LOAD_UEFI_KEYS
49  	.mokvar_table		= EFI_INVALID_TABLE_ADDR,
50  #endif
51  #ifdef CONFIG_EFI_COCO_SECRET
52  	.coco_secret		= EFI_INVALID_TABLE_ADDR,
53  #endif
54  #ifdef CONFIG_UNACCEPTED_MEMORY
55  	.unaccepted		= EFI_INVALID_TABLE_ADDR,
56  #endif
57  };
58  EXPORT_SYMBOL(efi);
59  
60  unsigned long __ro_after_init efi_rng_seed = EFI_INVALID_TABLE_ADDR;
61  static unsigned long __initdata mem_reserve = EFI_INVALID_TABLE_ADDR;
62  static unsigned long __initdata rt_prop = EFI_INVALID_TABLE_ADDR;
63  static unsigned long __initdata initrd = EFI_INVALID_TABLE_ADDR;
64  
65  extern unsigned long screen_info_table;
66  
67  struct mm_struct efi_mm = {
68  	.mm_mt			= MTREE_INIT_EXT(mm_mt, MM_MT_FLAGS, efi_mm.mmap_lock),
69  	.mm_users		= ATOMIC_INIT(2),
70  	.mm_count		= ATOMIC_INIT(1),
71  	.write_protect_seq      = SEQCNT_ZERO(efi_mm.write_protect_seq),
72  	MMAP_LOCK_INITIALIZER(efi_mm)
73  	.page_table_lock	= __SPIN_LOCK_UNLOCKED(efi_mm.page_table_lock),
74  	.mmlist			= LIST_HEAD_INIT(efi_mm.mmlist),
75  	.cpu_bitmap		= { [BITS_TO_LONGS(NR_CPUS)] = 0},
76  };
77  
78  struct workqueue_struct *efi_rts_wq;
79  
80  static bool disable_runtime = IS_ENABLED(CONFIG_EFI_DISABLE_RUNTIME);
setup_noefi(char * arg)81  static int __init setup_noefi(char *arg)
82  {
83  	disable_runtime = true;
84  	return 0;
85  }
86  early_param("noefi", setup_noefi);
87  
efi_runtime_disabled(void)88  bool efi_runtime_disabled(void)
89  {
90  	return disable_runtime;
91  }
92  
__efi_soft_reserve_enabled(void)93  bool __pure __efi_soft_reserve_enabled(void)
94  {
95  	return !efi_enabled(EFI_MEM_NO_SOFT_RESERVE);
96  }
97  
parse_efi_cmdline(char * str)98  static int __init parse_efi_cmdline(char *str)
99  {
100  	if (!str) {
101  		pr_warn("need at least one option\n");
102  		return -EINVAL;
103  	}
104  
105  	if (parse_option_str(str, "debug"))
106  		set_bit(EFI_DBG, &efi.flags);
107  
108  	if (parse_option_str(str, "noruntime"))
109  		disable_runtime = true;
110  
111  	if (parse_option_str(str, "runtime"))
112  		disable_runtime = false;
113  
114  	if (parse_option_str(str, "nosoftreserve"))
115  		set_bit(EFI_MEM_NO_SOFT_RESERVE, &efi.flags);
116  
117  	return 0;
118  }
119  early_param("efi", parse_efi_cmdline);
120  
121  struct kobject *efi_kobj;
122  
123  /*
124   * Let's not leave out systab information that snuck into
125   * the efivars driver
126   * Note, do not add more fields in systab sysfs file as it breaks sysfs
127   * one value per file rule!
128   */
systab_show(struct kobject * kobj,struct kobj_attribute * attr,char * buf)129  static ssize_t systab_show(struct kobject *kobj,
130  			   struct kobj_attribute *attr, char *buf)
131  {
132  	char *str = buf;
133  
134  	if (!kobj || !buf)
135  		return -EINVAL;
136  
137  	if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
138  		str += sprintf(str, "ACPI20=0x%lx\n", efi.acpi20);
139  	if (efi.acpi != EFI_INVALID_TABLE_ADDR)
140  		str += sprintf(str, "ACPI=0x%lx\n", efi.acpi);
141  	/*
142  	 * If both SMBIOS and SMBIOS3 entry points are implemented, the
143  	 * SMBIOS3 entry point shall be preferred, so we list it first to
144  	 * let applications stop parsing after the first match.
145  	 */
146  	if (efi.smbios3 != EFI_INVALID_TABLE_ADDR)
147  		str += sprintf(str, "SMBIOS3=0x%lx\n", efi.smbios3);
148  	if (efi.smbios != EFI_INVALID_TABLE_ADDR)
149  		str += sprintf(str, "SMBIOS=0x%lx\n", efi.smbios);
150  
151  	if (IS_ENABLED(CONFIG_X86))
152  		str = efi_systab_show_arch(str);
153  
154  	return str - buf;
155  }
156  
157  static struct kobj_attribute efi_attr_systab = __ATTR_RO_MODE(systab, 0400);
158  
fw_platform_size_show(struct kobject * kobj,struct kobj_attribute * attr,char * buf)159  static ssize_t fw_platform_size_show(struct kobject *kobj,
160  				     struct kobj_attribute *attr, char *buf)
161  {
162  	return sprintf(buf, "%d\n", efi_enabled(EFI_64BIT) ? 64 : 32);
163  }
164  
165  extern __weak struct kobj_attribute efi_attr_fw_vendor;
166  extern __weak struct kobj_attribute efi_attr_runtime;
167  extern __weak struct kobj_attribute efi_attr_config_table;
168  static struct kobj_attribute efi_attr_fw_platform_size =
169  	__ATTR_RO(fw_platform_size);
170  
171  static struct attribute *efi_subsys_attrs[] = {
172  	&efi_attr_systab.attr,
173  	&efi_attr_fw_platform_size.attr,
174  	&efi_attr_fw_vendor.attr,
175  	&efi_attr_runtime.attr,
176  	&efi_attr_config_table.attr,
177  	NULL,
178  };
179  
efi_attr_is_visible(struct kobject * kobj,struct attribute * attr,int n)180  umode_t __weak efi_attr_is_visible(struct kobject *kobj, struct attribute *attr,
181  				   int n)
182  {
183  	return attr->mode;
184  }
185  
186  static const struct attribute_group efi_subsys_attr_group = {
187  	.attrs = efi_subsys_attrs,
188  	.is_visible = efi_attr_is_visible,
189  };
190  
191  struct blocking_notifier_head efivar_ops_nh;
192  EXPORT_SYMBOL_GPL(efivar_ops_nh);
193  
194  static struct efivars generic_efivars;
195  static struct efivar_operations generic_ops;
196  
generic_ops_supported(void)197  static bool generic_ops_supported(void)
198  {
199  	unsigned long name_size;
200  	efi_status_t status;
201  	efi_char16_t name;
202  	efi_guid_t guid;
203  
204  	name_size = sizeof(name);
205  
206  	if (!efi.get_next_variable)
207  		return false;
208  	status = efi.get_next_variable(&name_size, &name, &guid);
209  	if (status == EFI_UNSUPPORTED)
210  		return false;
211  
212  	return true;
213  }
214  
generic_ops_register(void)215  static int generic_ops_register(void)
216  {
217  	if (!generic_ops_supported())
218  		return 0;
219  
220  	generic_ops.get_variable = efi.get_variable;
221  	generic_ops.get_next_variable = efi.get_next_variable;
222  	generic_ops.query_variable_store = efi_query_variable_store;
223  	generic_ops.query_variable_info = efi.query_variable_info;
224  
225  	if (efi_rt_services_supported(EFI_RT_SUPPORTED_SET_VARIABLE)) {
226  		generic_ops.set_variable = efi.set_variable;
227  		generic_ops.set_variable_nonblocking = efi.set_variable_nonblocking;
228  	}
229  	return efivars_register(&generic_efivars, &generic_ops);
230  }
231  
generic_ops_unregister(void)232  static void generic_ops_unregister(void)
233  {
234  	if (!generic_ops.get_variable)
235  		return;
236  
237  	efivars_unregister(&generic_efivars);
238  }
239  
efivars_generic_ops_register(void)240  void efivars_generic_ops_register(void)
241  {
242  	generic_ops_register();
243  }
244  EXPORT_SYMBOL_GPL(efivars_generic_ops_register);
245  
efivars_generic_ops_unregister(void)246  void efivars_generic_ops_unregister(void)
247  {
248  	generic_ops_unregister();
249  }
250  EXPORT_SYMBOL_GPL(efivars_generic_ops_unregister);
251  
252  #ifdef CONFIG_EFI_CUSTOM_SSDT_OVERLAYS
253  #define EFIVAR_SSDT_NAME_MAX	16UL
254  static char efivar_ssdt[EFIVAR_SSDT_NAME_MAX] __initdata;
efivar_ssdt_setup(char * str)255  static int __init efivar_ssdt_setup(char *str)
256  {
257  	int ret = security_locked_down(LOCKDOWN_ACPI_TABLES);
258  
259  	if (ret)
260  		return ret;
261  
262  	if (strlen(str) < sizeof(efivar_ssdt))
263  		memcpy(efivar_ssdt, str, strlen(str));
264  	else
265  		pr_warn("efivar_ssdt: name too long: %s\n", str);
266  	return 1;
267  }
268  __setup("efivar_ssdt=", efivar_ssdt_setup);
269  
efivar_ssdt_load(void)270  static __init int efivar_ssdt_load(void)
271  {
272  	unsigned long name_size = 256;
273  	efi_char16_t *name = NULL;
274  	efi_status_t status;
275  	efi_guid_t guid;
276  
277  	if (!efivar_ssdt[0])
278  		return 0;
279  
280  	name = kzalloc(name_size, GFP_KERNEL);
281  	if (!name)
282  		return -ENOMEM;
283  
284  	for (;;) {
285  		char utf8_name[EFIVAR_SSDT_NAME_MAX];
286  		unsigned long data_size = 0;
287  		void *data;
288  		int limit;
289  
290  		status = efi.get_next_variable(&name_size, name, &guid);
291  		if (status == EFI_NOT_FOUND) {
292  			break;
293  		} else if (status == EFI_BUFFER_TOO_SMALL) {
294  			efi_char16_t *name_tmp =
295  				krealloc(name, name_size, GFP_KERNEL);
296  			if (!name_tmp) {
297  				kfree(name);
298  				return -ENOMEM;
299  			}
300  			name = name_tmp;
301  			continue;
302  		}
303  
304  		limit = min(EFIVAR_SSDT_NAME_MAX, name_size);
305  		ucs2_as_utf8(utf8_name, name, limit - 1);
306  		if (strncmp(utf8_name, efivar_ssdt, limit) != 0)
307  			continue;
308  
309  		pr_info("loading SSDT from variable %s-%pUl\n", efivar_ssdt, &guid);
310  
311  		status = efi.get_variable(name, &guid, NULL, &data_size, NULL);
312  		if (status != EFI_BUFFER_TOO_SMALL || !data_size)
313  			return -EIO;
314  
315  		data = kmalloc(data_size, GFP_KERNEL);
316  		if (!data)
317  			return -ENOMEM;
318  
319  		status = efi.get_variable(name, &guid, NULL, &data_size, data);
320  		if (status == EFI_SUCCESS) {
321  			acpi_status ret = acpi_load_table(data, NULL);
322  			if (ret)
323  				pr_err("failed to load table: %u\n", ret);
324  			else
325  				continue;
326  		} else {
327  			pr_err("failed to get var data: 0x%lx\n", status);
328  		}
329  		kfree(data);
330  	}
331  	return 0;
332  }
333  #else
efivar_ssdt_load(void)334  static inline int efivar_ssdt_load(void) { return 0; }
335  #endif
336  
337  #ifdef CONFIG_DEBUG_FS
338  
339  #define EFI_DEBUGFS_MAX_BLOBS 32
340  
341  static struct debugfs_blob_wrapper debugfs_blob[EFI_DEBUGFS_MAX_BLOBS];
342  
efi_debugfs_init(void)343  static void __init efi_debugfs_init(void)
344  {
345  	struct dentry *efi_debugfs;
346  	efi_memory_desc_t *md;
347  	char name[32];
348  	int type_count[EFI_BOOT_SERVICES_DATA + 1] = {};
349  	int i = 0;
350  
351  	efi_debugfs = debugfs_create_dir("efi", NULL);
352  	if (IS_ERR(efi_debugfs))
353  		return;
354  
355  	for_each_efi_memory_desc(md) {
356  		switch (md->type) {
357  		case EFI_BOOT_SERVICES_CODE:
358  			snprintf(name, sizeof(name), "boot_services_code%d",
359  				 type_count[md->type]++);
360  			break;
361  		case EFI_BOOT_SERVICES_DATA:
362  			snprintf(name, sizeof(name), "boot_services_data%d",
363  				 type_count[md->type]++);
364  			break;
365  		default:
366  			continue;
367  		}
368  
369  		if (i >= EFI_DEBUGFS_MAX_BLOBS) {
370  			pr_warn("More then %d EFI boot service segments, only showing first %d in debugfs\n",
371  				EFI_DEBUGFS_MAX_BLOBS, EFI_DEBUGFS_MAX_BLOBS);
372  			break;
373  		}
374  
375  		debugfs_blob[i].size = md->num_pages << EFI_PAGE_SHIFT;
376  		debugfs_blob[i].data = memremap(md->phys_addr,
377  						debugfs_blob[i].size,
378  						MEMREMAP_WB);
379  		if (!debugfs_blob[i].data)
380  			continue;
381  
382  		debugfs_create_blob(name, 0400, efi_debugfs, &debugfs_blob[i]);
383  		i++;
384  	}
385  }
386  #else
efi_debugfs_init(void)387  static inline void efi_debugfs_init(void) {}
388  #endif
389  
390  /*
391   * We register the efi subsystem with the firmware subsystem and the
392   * efivars subsystem with the efi subsystem, if the system was booted with
393   * EFI.
394   */
efisubsys_init(void)395  static int __init efisubsys_init(void)
396  {
397  	int error;
398  
399  	if (!efi_enabled(EFI_RUNTIME_SERVICES))
400  		efi.runtime_supported_mask = 0;
401  
402  	if (!efi_enabled(EFI_BOOT))
403  		return 0;
404  
405  	if (efi.runtime_supported_mask) {
406  		/*
407  		 * Since we process only one efi_runtime_service() at a time, an
408  		 * ordered workqueue (which creates only one execution context)
409  		 * should suffice for all our needs.
410  		 */
411  		efi_rts_wq = alloc_ordered_workqueue("efi_rts_wq", 0);
412  		if (!efi_rts_wq) {
413  			pr_err("Creating efi_rts_wq failed, EFI runtime services disabled.\n");
414  			clear_bit(EFI_RUNTIME_SERVICES, &efi.flags);
415  			efi.runtime_supported_mask = 0;
416  			return 0;
417  		}
418  	}
419  
420  	if (efi_rt_services_supported(EFI_RT_SUPPORTED_TIME_SERVICES))
421  		platform_device_register_simple("rtc-efi", 0, NULL, 0);
422  
423  	/* We register the efi directory at /sys/firmware/efi */
424  	efi_kobj = kobject_create_and_add("efi", firmware_kobj);
425  	if (!efi_kobj) {
426  		pr_err("efi: Firmware registration failed.\n");
427  		error = -ENOMEM;
428  		goto err_destroy_wq;
429  	}
430  
431  	if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE |
432  				      EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME)) {
433  		error = generic_ops_register();
434  		if (error)
435  			goto err_put;
436  		efivar_ssdt_load();
437  		platform_device_register_simple("efivars", 0, NULL, 0);
438  	}
439  
440  	BLOCKING_INIT_NOTIFIER_HEAD(&efivar_ops_nh);
441  
442  	error = sysfs_create_group(efi_kobj, &efi_subsys_attr_group);
443  	if (error) {
444  		pr_err("efi: Sysfs attribute export failed with error %d.\n",
445  		       error);
446  		goto err_unregister;
447  	}
448  
449  	/* and the standard mountpoint for efivarfs */
450  	error = sysfs_create_mount_point(efi_kobj, "efivars");
451  	if (error) {
452  		pr_err("efivars: Subsystem registration failed.\n");
453  		goto err_remove_group;
454  	}
455  
456  	if (efi_enabled(EFI_DBG) && efi_enabled(EFI_PRESERVE_BS_REGIONS))
457  		efi_debugfs_init();
458  
459  #ifdef CONFIG_EFI_COCO_SECRET
460  	if (efi.coco_secret != EFI_INVALID_TABLE_ADDR)
461  		platform_device_register_simple("efi_secret", 0, NULL, 0);
462  #endif
463  
464  	return 0;
465  
466  err_remove_group:
467  	sysfs_remove_group(efi_kobj, &efi_subsys_attr_group);
468  err_unregister:
469  	if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE |
470  				      EFI_RT_SUPPORTED_GET_NEXT_VARIABLE_NAME))
471  		generic_ops_unregister();
472  err_put:
473  	kobject_put(efi_kobj);
474  	efi_kobj = NULL;
475  err_destroy_wq:
476  	if (efi_rts_wq)
477  		destroy_workqueue(efi_rts_wq);
478  
479  	return error;
480  }
481  
482  subsys_initcall(efisubsys_init);
483  
efi_find_mirror(void)484  void __init efi_find_mirror(void)
485  {
486  	efi_memory_desc_t *md;
487  	u64 mirror_size = 0, total_size = 0;
488  
489  	if (!efi_enabled(EFI_MEMMAP))
490  		return;
491  
492  	for_each_efi_memory_desc(md) {
493  		unsigned long long start = md->phys_addr;
494  		unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
495  
496  		total_size += size;
497  		if (md->attribute & EFI_MEMORY_MORE_RELIABLE) {
498  			memblock_mark_mirror(start, size);
499  			mirror_size += size;
500  		}
501  	}
502  	if (mirror_size)
503  		pr_info("Memory: %lldM/%lldM mirrored memory\n",
504  			mirror_size>>20, total_size>>20);
505  }
506  
507  /*
508   * Find the efi memory descriptor for a given physical address.  Given a
509   * physical address, determine if it exists within an EFI Memory Map entry,
510   * and if so, populate the supplied memory descriptor with the appropriate
511   * data.
512   */
__efi_mem_desc_lookup(u64 phys_addr,efi_memory_desc_t * out_md)513  int __efi_mem_desc_lookup(u64 phys_addr, efi_memory_desc_t *out_md)
514  {
515  	efi_memory_desc_t *md;
516  
517  	if (!efi_enabled(EFI_MEMMAP)) {
518  		pr_err_once("EFI_MEMMAP is not enabled.\n");
519  		return -EINVAL;
520  	}
521  
522  	if (!out_md) {
523  		pr_err_once("out_md is null.\n");
524  		return -EINVAL;
525          }
526  
527  	for_each_efi_memory_desc(md) {
528  		u64 size;
529  		u64 end;
530  
531  		/* skip bogus entries (including empty ones) */
532  		if ((md->phys_addr & (EFI_PAGE_SIZE - 1)) ||
533  		    (md->num_pages <= 0) ||
534  		    (md->num_pages > (U64_MAX - md->phys_addr) >> EFI_PAGE_SHIFT))
535  			continue;
536  
537  		size = md->num_pages << EFI_PAGE_SHIFT;
538  		end = md->phys_addr + size;
539  		if (phys_addr >= md->phys_addr && phys_addr < end) {
540  			memcpy(out_md, md, sizeof(*out_md));
541  			return 0;
542  		}
543  	}
544  	return -ENOENT;
545  }
546  
547  extern int efi_mem_desc_lookup(u64 phys_addr, efi_memory_desc_t *out_md)
548  	__weak __alias(__efi_mem_desc_lookup);
549  
550  /*
551   * Calculate the highest address of an efi memory descriptor.
552   */
efi_mem_desc_end(efi_memory_desc_t * md)553  u64 __init efi_mem_desc_end(efi_memory_desc_t *md)
554  {
555  	u64 size = md->num_pages << EFI_PAGE_SHIFT;
556  	u64 end = md->phys_addr + size;
557  	return end;
558  }
559  
efi_arch_mem_reserve(phys_addr_t addr,u64 size)560  void __init __weak efi_arch_mem_reserve(phys_addr_t addr, u64 size) {}
561  
562  /**
563   * efi_mem_reserve - Reserve an EFI memory region
564   * @addr: Physical address to reserve
565   * @size: Size of reservation
566   *
567   * Mark a region as reserved from general kernel allocation and
568   * prevent it being released by efi_free_boot_services().
569   *
570   * This function should be called drivers once they've parsed EFI
571   * configuration tables to figure out where their data lives, e.g.
572   * efi_esrt_init().
573   */
efi_mem_reserve(phys_addr_t addr,u64 size)574  void __init efi_mem_reserve(phys_addr_t addr, u64 size)
575  {
576  	/* efi_mem_reserve() does not work under Xen */
577  	if (WARN_ON_ONCE(efi_enabled(EFI_PARAVIRT)))
578  		return;
579  
580  	if (!memblock_is_region_reserved(addr, size))
581  		memblock_reserve(addr, size);
582  
583  	/*
584  	 * Some architectures (x86) reserve all boot services ranges
585  	 * until efi_free_boot_services() because of buggy firmware
586  	 * implementations. This means the above memblock_reserve() is
587  	 * superfluous on x86 and instead what it needs to do is
588  	 * ensure the @start, @size is not freed.
589  	 */
590  	efi_arch_mem_reserve(addr, size);
591  }
592  
593  static const efi_config_table_type_t common_tables[] __initconst = {
594  	{ACPI_20_TABLE_GUID,			&efi.acpi20,		"ACPI 2.0"	},
595  	{ACPI_TABLE_GUID,			&efi.acpi,		"ACPI"		},
596  	{SMBIOS_TABLE_GUID,			&efi.smbios,		"SMBIOS"	},
597  	{SMBIOS3_TABLE_GUID,			&efi.smbios3,		"SMBIOS 3.0"	},
598  	{EFI_SYSTEM_RESOURCE_TABLE_GUID,	&efi.esrt,		"ESRT"		},
599  	{EFI_MEMORY_ATTRIBUTES_TABLE_GUID,	&efi_mem_attr_table,	"MEMATTR"	},
600  	{LINUX_EFI_RANDOM_SEED_TABLE_GUID,	&efi_rng_seed,		"RNG"		},
601  	{LINUX_EFI_TPM_EVENT_LOG_GUID,		&efi.tpm_log,		"TPMEventLog"	},
602  	{EFI_TCG2_FINAL_EVENTS_TABLE_GUID,	&efi.tpm_final_log,	"TPMFinalLog"	},
603  	{EFI_CC_FINAL_EVENTS_TABLE_GUID,	&efi.tpm_final_log,	"CCFinalLog"	},
604  	{LINUX_EFI_MEMRESERVE_TABLE_GUID,	&mem_reserve,		"MEMRESERVE"	},
605  	{LINUX_EFI_INITRD_MEDIA_GUID,		&initrd,		"INITRD"	},
606  	{EFI_RT_PROPERTIES_TABLE_GUID,		&rt_prop,		"RTPROP"	},
607  #ifdef CONFIG_EFI_RCI2_TABLE
608  	{DELLEMC_EFI_RCI2_TABLE_GUID,		&rci2_table_phys			},
609  #endif
610  #ifdef CONFIG_LOAD_UEFI_KEYS
611  	{LINUX_EFI_MOK_VARIABLE_TABLE_GUID,	&efi.mokvar_table,	"MOKvar"	},
612  #endif
613  #ifdef CONFIG_EFI_COCO_SECRET
614  	{LINUX_EFI_COCO_SECRET_AREA_GUID,	&efi.coco_secret,	"CocoSecret"	},
615  #endif
616  #ifdef CONFIG_UNACCEPTED_MEMORY
617  	{LINUX_EFI_UNACCEPTED_MEM_TABLE_GUID,	&efi.unaccepted,	"Unaccepted"	},
618  #endif
619  #ifdef CONFIG_EFI_GENERIC_STUB
620  	{LINUX_EFI_SCREEN_INFO_TABLE_GUID,	&screen_info_table			},
621  #endif
622  	{},
623  };
624  
match_config_table(const efi_guid_t * guid,unsigned long table,const efi_config_table_type_t * table_types)625  static __init int match_config_table(const efi_guid_t *guid,
626  				     unsigned long table,
627  				     const efi_config_table_type_t *table_types)
628  {
629  	int i;
630  
631  	for (i = 0; efi_guidcmp(table_types[i].guid, NULL_GUID); i++) {
632  		if (efi_guidcmp(*guid, table_types[i].guid))
633  			continue;
634  
635  		if (!efi_config_table_is_usable(guid, table)) {
636  			if (table_types[i].name[0])
637  				pr_cont("(%s=0x%lx unusable) ",
638  					table_types[i].name, table);
639  			return 1;
640  		}
641  
642  		*(table_types[i].ptr) = table;
643  		if (table_types[i].name[0])
644  			pr_cont("%s=0x%lx ", table_types[i].name, table);
645  		return 1;
646  	}
647  
648  	return 0;
649  }
650  
651  /**
652   * reserve_unaccepted - Map and reserve unaccepted configuration table
653   * @unaccepted: Pointer to unaccepted memory table
654   *
655   * memblock_add() makes sure that the table is mapped in direct mapping. During
656   * normal boot it happens automatically because the table is allocated from
657   * usable memory. But during crashkernel boot only memory specifically reserved
658   * for crash scenario is mapped. memblock_add() forces the table to be mapped
659   * in crashkernel case.
660   *
661   * Align the range to the nearest page borders. Ranges smaller than page size
662   * are not going to be mapped.
663   *
664   * memblock_reserve() makes sure that future allocations will not touch the
665   * table.
666   */
667  
reserve_unaccepted(struct efi_unaccepted_memory * unaccepted)668  static __init void reserve_unaccepted(struct efi_unaccepted_memory *unaccepted)
669  {
670  	phys_addr_t start, size;
671  
672  	start = PAGE_ALIGN_DOWN(efi.unaccepted);
673  	size = PAGE_ALIGN(sizeof(*unaccepted) + unaccepted->size);
674  
675  	memblock_add(start, size);
676  	memblock_reserve(start, size);
677  }
678  
efi_config_parse_tables(const efi_config_table_t * config_tables,int count,const efi_config_table_type_t * arch_tables)679  int __init efi_config_parse_tables(const efi_config_table_t *config_tables,
680  				   int count,
681  				   const efi_config_table_type_t *arch_tables)
682  {
683  	const efi_config_table_64_t *tbl64 = (void *)config_tables;
684  	const efi_config_table_32_t *tbl32 = (void *)config_tables;
685  	const efi_guid_t *guid;
686  	unsigned long table;
687  	int i;
688  
689  	pr_info("");
690  	for (i = 0; i < count; i++) {
691  		if (!IS_ENABLED(CONFIG_X86)) {
692  			guid = &config_tables[i].guid;
693  			table = (unsigned long)config_tables[i].table;
694  		} else if (efi_enabled(EFI_64BIT)) {
695  			guid = &tbl64[i].guid;
696  			table = tbl64[i].table;
697  
698  			if (IS_ENABLED(CONFIG_X86_32) &&
699  			    tbl64[i].table > U32_MAX) {
700  				pr_cont("\n");
701  				pr_err("Table located above 4GB, disabling EFI.\n");
702  				return -EINVAL;
703  			}
704  		} else {
705  			guid = &tbl32[i].guid;
706  			table = tbl32[i].table;
707  		}
708  
709  		if (!match_config_table(guid, table, common_tables) && arch_tables)
710  			match_config_table(guid, table, arch_tables);
711  	}
712  	pr_cont("\n");
713  	set_bit(EFI_CONFIG_TABLES, &efi.flags);
714  
715  	if (efi_rng_seed != EFI_INVALID_TABLE_ADDR) {
716  		struct linux_efi_random_seed *seed;
717  		u32 size = 0;
718  
719  		seed = early_memremap(efi_rng_seed, sizeof(*seed));
720  		if (seed != NULL) {
721  			size = min_t(u32, seed->size, SZ_1K); // sanity check
722  			early_memunmap(seed, sizeof(*seed));
723  		} else {
724  			pr_err("Could not map UEFI random seed!\n");
725  		}
726  		if (size > 0) {
727  			seed = early_memremap(efi_rng_seed,
728  					      sizeof(*seed) + size);
729  			if (seed != NULL) {
730  				add_bootloader_randomness(seed->bits, size);
731  				memzero_explicit(seed->bits, size);
732  				early_memunmap(seed, sizeof(*seed) + size);
733  			} else {
734  				pr_err("Could not map UEFI random seed!\n");
735  			}
736  		}
737  	}
738  
739  	if (!IS_ENABLED(CONFIG_X86_32) && efi_enabled(EFI_MEMMAP))
740  		efi_memattr_init();
741  
742  	efi_tpm_eventlog_init();
743  
744  	if (mem_reserve != EFI_INVALID_TABLE_ADDR) {
745  		unsigned long prsv = mem_reserve;
746  
747  		while (prsv) {
748  			struct linux_efi_memreserve *rsv;
749  			u8 *p;
750  
751  			/*
752  			 * Just map a full page: that is what we will get
753  			 * anyway, and it permits us to map the entire entry
754  			 * before knowing its size.
755  			 */
756  			p = early_memremap(ALIGN_DOWN(prsv, PAGE_SIZE),
757  					   PAGE_SIZE);
758  			if (p == NULL) {
759  				pr_err("Could not map UEFI memreserve entry!\n");
760  				return -ENOMEM;
761  			}
762  
763  			rsv = (void *)(p + prsv % PAGE_SIZE);
764  
765  			/* reserve the entry itself */
766  			memblock_reserve(prsv,
767  					 struct_size(rsv, entry, rsv->size));
768  
769  			for (i = 0; i < atomic_read(&rsv->count); i++) {
770  				memblock_reserve(rsv->entry[i].base,
771  						 rsv->entry[i].size);
772  			}
773  
774  			prsv = rsv->next;
775  			early_memunmap(p, PAGE_SIZE);
776  		}
777  	}
778  
779  	if (rt_prop != EFI_INVALID_TABLE_ADDR) {
780  		efi_rt_properties_table_t *tbl;
781  
782  		tbl = early_memremap(rt_prop, sizeof(*tbl));
783  		if (tbl) {
784  			efi.runtime_supported_mask &= tbl->runtime_services_supported;
785  			early_memunmap(tbl, sizeof(*tbl));
786  		}
787  	}
788  
789  	if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) &&
790  	    initrd != EFI_INVALID_TABLE_ADDR && phys_initrd_size == 0) {
791  		struct linux_efi_initrd *tbl;
792  
793  		tbl = early_memremap(initrd, sizeof(*tbl));
794  		if (tbl) {
795  			phys_initrd_start = tbl->base;
796  			phys_initrd_size = tbl->size;
797  			early_memunmap(tbl, sizeof(*tbl));
798  		}
799  	}
800  
801  	if (IS_ENABLED(CONFIG_UNACCEPTED_MEMORY) &&
802  	    efi.unaccepted != EFI_INVALID_TABLE_ADDR) {
803  		struct efi_unaccepted_memory *unaccepted;
804  
805  		unaccepted = early_memremap(efi.unaccepted, sizeof(*unaccepted));
806  		if (unaccepted) {
807  
808  			if (unaccepted->version == 1) {
809  				reserve_unaccepted(unaccepted);
810  			} else {
811  				efi.unaccepted = EFI_INVALID_TABLE_ADDR;
812  			}
813  
814  			early_memunmap(unaccepted, sizeof(*unaccepted));
815  		}
816  	}
817  
818  	return 0;
819  }
820  
efi_systab_check_header(const efi_table_hdr_t * systab_hdr)821  int __init efi_systab_check_header(const efi_table_hdr_t *systab_hdr)
822  {
823  	if (systab_hdr->signature != EFI_SYSTEM_TABLE_SIGNATURE) {
824  		pr_err("System table signature incorrect!\n");
825  		return -EINVAL;
826  	}
827  
828  	return 0;
829  }
830  
map_fw_vendor(unsigned long fw_vendor,size_t size)831  static const efi_char16_t *__init map_fw_vendor(unsigned long fw_vendor,
832  						size_t size)
833  {
834  	const efi_char16_t *ret;
835  
836  	ret = early_memremap_ro(fw_vendor, size);
837  	if (!ret)
838  		pr_err("Could not map the firmware vendor!\n");
839  	return ret;
840  }
841  
unmap_fw_vendor(const void * fw_vendor,size_t size)842  static void __init unmap_fw_vendor(const void *fw_vendor, size_t size)
843  {
844  	early_memunmap((void *)fw_vendor, size);
845  }
846  
efi_systab_report_header(const efi_table_hdr_t * systab_hdr,unsigned long fw_vendor)847  void __init efi_systab_report_header(const efi_table_hdr_t *systab_hdr,
848  				     unsigned long fw_vendor)
849  {
850  	char vendor[100] = "unknown";
851  	const efi_char16_t *c16;
852  	size_t i;
853  	u16 rev;
854  
855  	c16 = map_fw_vendor(fw_vendor, sizeof(vendor) * sizeof(efi_char16_t));
856  	if (c16) {
857  		for (i = 0; i < sizeof(vendor) - 1 && c16[i]; ++i)
858  			vendor[i] = c16[i];
859  		vendor[i] = '\0';
860  
861  		unmap_fw_vendor(c16, sizeof(vendor) * sizeof(efi_char16_t));
862  	}
863  
864  	rev = (u16)systab_hdr->revision;
865  	pr_info("EFI v%u.%u", systab_hdr->revision >> 16, rev / 10);
866  
867  	rev %= 10;
868  	if (rev)
869  		pr_cont(".%u", rev);
870  
871  	pr_cont(" by %s\n", vendor);
872  
873  	if (IS_ENABLED(CONFIG_X86_64) &&
874  	    systab_hdr->revision > EFI_1_10_SYSTEM_TABLE_REVISION &&
875  	    !strcmp(vendor, "Apple")) {
876  		pr_info("Apple Mac detected, using EFI v1.10 runtime services only\n");
877  		efi.runtime_version = EFI_1_10_SYSTEM_TABLE_REVISION;
878  	}
879  }
880  
881  static __initdata char memory_type_name[][13] = {
882  	"Reserved",
883  	"Loader Code",
884  	"Loader Data",
885  	"Boot Code",
886  	"Boot Data",
887  	"Runtime Code",
888  	"Runtime Data",
889  	"Conventional",
890  	"Unusable",
891  	"ACPI Reclaim",
892  	"ACPI Mem NVS",
893  	"MMIO",
894  	"MMIO Port",
895  	"PAL Code",
896  	"Persistent",
897  	"Unaccepted",
898  };
899  
efi_md_typeattr_format(char * buf,size_t size,const efi_memory_desc_t * md)900  char * __init efi_md_typeattr_format(char *buf, size_t size,
901  				     const efi_memory_desc_t *md)
902  {
903  	char *pos;
904  	int type_len;
905  	u64 attr;
906  
907  	pos = buf;
908  	if (md->type >= ARRAY_SIZE(memory_type_name))
909  		type_len = snprintf(pos, size, "[type=%u", md->type);
910  	else
911  		type_len = snprintf(pos, size, "[%-*s",
912  				    (int)(sizeof(memory_type_name[0]) - 1),
913  				    memory_type_name[md->type]);
914  	if (type_len >= size)
915  		return buf;
916  
917  	pos += type_len;
918  	size -= type_len;
919  
920  	attr = md->attribute;
921  	if (attr & ~(EFI_MEMORY_UC | EFI_MEMORY_WC | EFI_MEMORY_WT |
922  		     EFI_MEMORY_WB | EFI_MEMORY_UCE | EFI_MEMORY_RO |
923  		     EFI_MEMORY_WP | EFI_MEMORY_RP | EFI_MEMORY_XP |
924  		     EFI_MEMORY_NV | EFI_MEMORY_SP | EFI_MEMORY_CPU_CRYPTO |
925  		     EFI_MEMORY_RUNTIME | EFI_MEMORY_MORE_RELIABLE))
926  		snprintf(pos, size, "|attr=0x%016llx]",
927  			 (unsigned long long)attr);
928  	else
929  		snprintf(pos, size,
930  			 "|%3s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%2s|%3s|%2s|%2s|%2s|%2s]",
931  			 attr & EFI_MEMORY_RUNTIME		? "RUN" : "",
932  			 attr & EFI_MEMORY_MORE_RELIABLE	? "MR"  : "",
933  			 attr & EFI_MEMORY_CPU_CRYPTO   	? "CC"  : "",
934  			 attr & EFI_MEMORY_SP			? "SP"  : "",
935  			 attr & EFI_MEMORY_NV			? "NV"  : "",
936  			 attr & EFI_MEMORY_XP			? "XP"  : "",
937  			 attr & EFI_MEMORY_RP			? "RP"  : "",
938  			 attr & EFI_MEMORY_WP			? "WP"  : "",
939  			 attr & EFI_MEMORY_RO			? "RO"  : "",
940  			 attr & EFI_MEMORY_UCE			? "UCE" : "",
941  			 attr & EFI_MEMORY_WB			? "WB"  : "",
942  			 attr & EFI_MEMORY_WT			? "WT"  : "",
943  			 attr & EFI_MEMORY_WC			? "WC"  : "",
944  			 attr & EFI_MEMORY_UC			? "UC"  : "");
945  	return buf;
946  }
947  
948  /*
949   * efi_mem_attributes - lookup memmap attributes for physical address
950   * @phys_addr: the physical address to lookup
951   *
952   * Search in the EFI memory map for the region covering
953   * @phys_addr. Returns the EFI memory attributes if the region
954   * was found in the memory map, 0 otherwise.
955   */
efi_mem_attributes(unsigned long phys_addr)956  u64 efi_mem_attributes(unsigned long phys_addr)
957  {
958  	efi_memory_desc_t *md;
959  
960  	if (!efi_enabled(EFI_MEMMAP))
961  		return 0;
962  
963  	for_each_efi_memory_desc(md) {
964  		if ((md->phys_addr <= phys_addr) &&
965  		    (phys_addr < (md->phys_addr +
966  		    (md->num_pages << EFI_PAGE_SHIFT))))
967  			return md->attribute;
968  	}
969  	return 0;
970  }
971  
972  /*
973   * efi_mem_type - lookup memmap type for physical address
974   * @phys_addr: the physical address to lookup
975   *
976   * Search in the EFI memory map for the region covering @phys_addr.
977   * Returns the EFI memory type if the region was found in the memory
978   * map, -EINVAL otherwise.
979   */
efi_mem_type(unsigned long phys_addr)980  int efi_mem_type(unsigned long phys_addr)
981  {
982  	const efi_memory_desc_t *md;
983  
984  	if (!efi_enabled(EFI_MEMMAP))
985  		return -ENOTSUPP;
986  
987  	for_each_efi_memory_desc(md) {
988  		if ((md->phys_addr <= phys_addr) &&
989  		    (phys_addr < (md->phys_addr +
990  				  (md->num_pages << EFI_PAGE_SHIFT))))
991  			return md->type;
992  	}
993  	return -EINVAL;
994  }
995  
efi_status_to_err(efi_status_t status)996  int efi_status_to_err(efi_status_t status)
997  {
998  	int err;
999  
1000  	switch (status) {
1001  	case EFI_SUCCESS:
1002  		err = 0;
1003  		break;
1004  	case EFI_INVALID_PARAMETER:
1005  		err = -EINVAL;
1006  		break;
1007  	case EFI_OUT_OF_RESOURCES:
1008  		err = -ENOSPC;
1009  		break;
1010  	case EFI_DEVICE_ERROR:
1011  		err = -EIO;
1012  		break;
1013  	case EFI_WRITE_PROTECTED:
1014  		err = -EROFS;
1015  		break;
1016  	case EFI_SECURITY_VIOLATION:
1017  		err = -EACCES;
1018  		break;
1019  	case EFI_NOT_FOUND:
1020  		err = -ENOENT;
1021  		break;
1022  	case EFI_ABORTED:
1023  		err = -EINTR;
1024  		break;
1025  	default:
1026  		err = -EINVAL;
1027  	}
1028  
1029  	return err;
1030  }
1031  EXPORT_SYMBOL_GPL(efi_status_to_err);
1032  
1033  static DEFINE_SPINLOCK(efi_mem_reserve_persistent_lock);
1034  static struct linux_efi_memreserve *efi_memreserve_root __ro_after_init;
1035  
efi_memreserve_map_root(void)1036  static int __init efi_memreserve_map_root(void)
1037  {
1038  	if (mem_reserve == EFI_INVALID_TABLE_ADDR)
1039  		return -ENODEV;
1040  
1041  	efi_memreserve_root = memremap(mem_reserve,
1042  				       sizeof(*efi_memreserve_root),
1043  				       MEMREMAP_WB);
1044  	if (WARN_ON_ONCE(!efi_memreserve_root))
1045  		return -ENOMEM;
1046  	return 0;
1047  }
1048  
efi_mem_reserve_iomem(phys_addr_t addr,u64 size)1049  static int efi_mem_reserve_iomem(phys_addr_t addr, u64 size)
1050  {
1051  	struct resource *res, *parent;
1052  	int ret;
1053  
1054  	res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
1055  	if (!res)
1056  		return -ENOMEM;
1057  
1058  	res->name	= "reserved";
1059  	res->flags	= IORESOURCE_MEM;
1060  	res->start	= addr;
1061  	res->end	= addr + size - 1;
1062  
1063  	/* we expect a conflict with a 'System RAM' region */
1064  	parent = request_resource_conflict(&iomem_resource, res);
1065  	ret = parent ? request_resource(parent, res) : 0;
1066  
1067  	/*
1068  	 * Given that efi_mem_reserve_iomem() can be called at any
1069  	 * time, only call memblock_reserve() if the architecture
1070  	 * keeps the infrastructure around.
1071  	 */
1072  	if (IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK) && !ret)
1073  		memblock_reserve(addr, size);
1074  
1075  	return ret;
1076  }
1077  
efi_mem_reserve_persistent(phys_addr_t addr,u64 size)1078  int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size)
1079  {
1080  	struct linux_efi_memreserve *rsv;
1081  	unsigned long prsv;
1082  	int rc, index;
1083  
1084  	if (efi_memreserve_root == (void *)ULONG_MAX)
1085  		return -ENODEV;
1086  
1087  	if (!efi_memreserve_root) {
1088  		rc = efi_memreserve_map_root();
1089  		if (rc)
1090  			return rc;
1091  	}
1092  
1093  	/* first try to find a slot in an existing linked list entry */
1094  	for (prsv = efi_memreserve_root->next; prsv; ) {
1095  		rsv = memremap(prsv, sizeof(*rsv), MEMREMAP_WB);
1096  		if (!rsv)
1097  			return -ENOMEM;
1098  		index = atomic_fetch_add_unless(&rsv->count, 1, rsv->size);
1099  		if (index < rsv->size) {
1100  			rsv->entry[index].base = addr;
1101  			rsv->entry[index].size = size;
1102  
1103  			memunmap(rsv);
1104  			return efi_mem_reserve_iomem(addr, size);
1105  		}
1106  		prsv = rsv->next;
1107  		memunmap(rsv);
1108  	}
1109  
1110  	/* no slot found - allocate a new linked list entry */
1111  	rsv = (struct linux_efi_memreserve *)__get_free_page(GFP_ATOMIC);
1112  	if (!rsv)
1113  		return -ENOMEM;
1114  
1115  	rc = efi_mem_reserve_iomem(__pa(rsv), SZ_4K);
1116  	if (rc) {
1117  		free_page((unsigned long)rsv);
1118  		return rc;
1119  	}
1120  
1121  	/*
1122  	 * The memremap() call above assumes that a linux_efi_memreserve entry
1123  	 * never crosses a page boundary, so let's ensure that this remains true
1124  	 * even when kexec'ing a 4k pages kernel from a >4k pages kernel, by
1125  	 * using SZ_4K explicitly in the size calculation below.
1126  	 */
1127  	rsv->size = EFI_MEMRESERVE_COUNT(SZ_4K);
1128  	atomic_set(&rsv->count, 1);
1129  	rsv->entry[0].base = addr;
1130  	rsv->entry[0].size = size;
1131  
1132  	spin_lock(&efi_mem_reserve_persistent_lock);
1133  	rsv->next = efi_memreserve_root->next;
1134  	efi_memreserve_root->next = __pa(rsv);
1135  	spin_unlock(&efi_mem_reserve_persistent_lock);
1136  
1137  	return efi_mem_reserve_iomem(addr, size);
1138  }
1139  
efi_memreserve_root_init(void)1140  static int __init efi_memreserve_root_init(void)
1141  {
1142  	if (efi_memreserve_root)
1143  		return 0;
1144  	if (efi_memreserve_map_root())
1145  		efi_memreserve_root = (void *)ULONG_MAX;
1146  	return 0;
1147  }
1148  early_initcall(efi_memreserve_root_init);
1149  
1150  #ifdef CONFIG_KEXEC
update_efi_random_seed(struct notifier_block * nb,unsigned long code,void * unused)1151  static int update_efi_random_seed(struct notifier_block *nb,
1152  				  unsigned long code, void *unused)
1153  {
1154  	struct linux_efi_random_seed *seed;
1155  	u32 size = 0;
1156  
1157  	if (!kexec_in_progress)
1158  		return NOTIFY_DONE;
1159  
1160  	seed = memremap(efi_rng_seed, sizeof(*seed), MEMREMAP_WB);
1161  	if (seed != NULL) {
1162  		size = min(seed->size, EFI_RANDOM_SEED_SIZE);
1163  		memunmap(seed);
1164  	} else {
1165  		pr_err("Could not map UEFI random seed!\n");
1166  	}
1167  	if (size > 0) {
1168  		seed = memremap(efi_rng_seed, sizeof(*seed) + size,
1169  				MEMREMAP_WB);
1170  		if (seed != NULL) {
1171  			seed->size = size;
1172  			get_random_bytes(seed->bits, seed->size);
1173  			memunmap(seed);
1174  		} else {
1175  			pr_err("Could not map UEFI random seed!\n");
1176  		}
1177  	}
1178  	return NOTIFY_DONE;
1179  }
1180  
1181  static struct notifier_block efi_random_seed_nb = {
1182  	.notifier_call = update_efi_random_seed,
1183  };
1184  
register_update_efi_random_seed(void)1185  static int __init register_update_efi_random_seed(void)
1186  {
1187  	if (efi_rng_seed == EFI_INVALID_TABLE_ADDR)
1188  		return 0;
1189  	return register_reboot_notifier(&efi_random_seed_nb);
1190  }
1191  late_initcall(register_update_efi_random_seed);
1192  #endif
1193