Commit ec4cf5db authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'efi-fixes-for-v6.1-1' of git://git.kernel.org/pub/scm/linux/kernel/git/efi/efi

Pull EFI fixes from Ard Biesheuvel:

 - fixes for the EFI variable store refactor that landed in v6.0

 - fixes for issues that were introduced during the merge window

 - back out some changes related to EFI zboot signing - we'll add a
   better solution for this during the next cycle

* tag 'efi-fixes-for-v6.1-1' of git://git.kernel.org/pub/scm/linux/kernel/git/efi/efi:
  efi: runtime: Don't assume virtual mappings are missing if VA == PA == 0
  efi: libstub: Fix incorrect payload size in zboot header
  efi: libstub: Give efi_main() asmlinkage qualification
  efi: efivars: Fix variable writes without query_variable_store()
  efi: ssdt: Don't free memory if ACPI table was loaded successfully
  efi: libstub: Remove zboot signing from build options
parents e97eace6 37926f96
Loading
Loading
Loading
Loading
+0 −22
Original line number Original line Diff line number Diff line
@@ -124,28 +124,6 @@ config EFI_ZBOOT
	  is supported by the encapsulated image. (The compression algorithm
	  is supported by the encapsulated image. (The compression algorithm
	  used is described in the zboot image header)
	  used is described in the zboot image header)


config EFI_ZBOOT_SIGNED
	def_bool y
	depends on EFI_ZBOOT_SIGNING_CERT != ""
	depends on EFI_ZBOOT_SIGNING_KEY != ""

config EFI_ZBOOT_SIGNING
	bool "Sign the EFI decompressor for UEFI secure boot"
	depends on EFI_ZBOOT
	help
	  Use the 'sbsign' command line tool (which must exist on the host
	  path) to sign both the EFI decompressor PE/COFF image, as well as the
	  encapsulated PE/COFF image, which is subsequently compressed and
	  wrapped by the former image.

config EFI_ZBOOT_SIGNING_CERT
	string "Certificate to use for signing the compressed EFI boot image"
	depends on EFI_ZBOOT_SIGNING

config EFI_ZBOOT_SIGNING_KEY
	string "Private key to use for signing the compressed EFI boot image"
	depends on EFI_ZBOOT_SIGNING

config EFI_ARMSTUB_DTB_LOADER
config EFI_ARMSTUB_DTB_LOADER
	bool "Enable the DTB loader"
	bool "Enable the DTB loader"
	depends on EFI_GENERIC_STUB && !RISCV && !LOONGARCH
	depends on EFI_GENERIC_STUB && !RISCV && !LOONGARCH
+1 −1
Original line number Original line Diff line number Diff line
@@ -63,7 +63,7 @@ static bool __init efi_virtmap_init(void)


		if (!(md->attribute & EFI_MEMORY_RUNTIME))
		if (!(md->attribute & EFI_MEMORY_RUNTIME))
			continue;
			continue;
		if (md->virt_addr == 0)
		if (md->virt_addr == U64_MAX)
			return false;
			return false;


		ret = efi_create_mapping(&efi_mm, md);
		ret = efi_create_mapping(&efi_mm, md);
+2 −0
Original line number Original line Diff line number Diff line
@@ -271,6 +271,8 @@ static __init int efivar_ssdt_load(void)
			acpi_status ret = acpi_load_table(data, NULL);
			acpi_status ret = acpi_load_table(data, NULL);
			if (ret)
			if (ret)
				pr_err("failed to load table: %u\n", ret);
				pr_err("failed to load table: %u\n", ret);
			else
				continue;
		} else {
		} else {
			pr_err("failed to get var data: 0x%lx\n", status);
			pr_err("failed to get var data: 0x%lx\n", status);
		}
		}
+4 −25
Original line number Original line Diff line number Diff line
@@ -20,18 +20,7 @@ zboot-size-len-y := 4
zboot-method-$(CONFIG_KERNEL_GZIP)	:= gzip
zboot-method-$(CONFIG_KERNEL_GZIP)	:= gzip
zboot-size-len-$(CONFIG_KERNEL_GZIP)	:= 0
zboot-size-len-$(CONFIG_KERNEL_GZIP)	:= 0


quiet_cmd_sbsign = SBSIGN  $@
$(obj)/vmlinuz: $(obj)/$(EFI_ZBOOT_PAYLOAD) FORCE
      cmd_sbsign = sbsign --out $@ $< \
		   --key $(CONFIG_EFI_ZBOOT_SIGNING_KEY) \
		   --cert $(CONFIG_EFI_ZBOOT_SIGNING_CERT)

$(obj)/$(EFI_ZBOOT_PAYLOAD).signed: $(obj)/$(EFI_ZBOOT_PAYLOAD) FORCE
	$(call if_changed,sbsign)

ZBOOT_PAYLOAD-y				 := $(EFI_ZBOOT_PAYLOAD)
ZBOOT_PAYLOAD-$(CONFIG_EFI_ZBOOT_SIGNED) := $(EFI_ZBOOT_PAYLOAD).signed

$(obj)/vmlinuz: $(obj)/$(ZBOOT_PAYLOAD-y) FORCE
	$(call if_changed,$(zboot-method-y))
	$(call if_changed,$(zboot-method-y))


OBJCOPYFLAGS_vmlinuz.o := -I binary -O $(EFI_ZBOOT_BFD_TARGET) \
OBJCOPYFLAGS_vmlinuz.o := -I binary -O $(EFI_ZBOOT_BFD_TARGET) \
@@ -53,18 +42,8 @@ LDFLAGS_vmlinuz.efi.elf := -T $(srctree)/drivers/firmware/efi/libstub/zboot.lds
$(obj)/vmlinuz.efi.elf: $(obj)/vmlinuz.o $(ZBOOT_DEPS) FORCE
$(obj)/vmlinuz.efi.elf: $(obj)/vmlinuz.o $(ZBOOT_DEPS) FORCE
	$(call if_changed,ld)
	$(call if_changed,ld)


ZBOOT_EFI-y				:= vmlinuz.efi
OBJCOPYFLAGS_vmlinuz.efi := -O binary
ZBOOT_EFI-$(CONFIG_EFI_ZBOOT_SIGNED)	:= vmlinuz.efi.unsigned
$(obj)/vmlinuz.efi: $(obj)/vmlinuz.efi.elf FORCE

OBJCOPYFLAGS_$(ZBOOT_EFI-y) := -O binary
$(obj)/$(ZBOOT_EFI-y): $(obj)/vmlinuz.efi.elf FORCE
	$(call if_changed,objcopy)
	$(call if_changed,objcopy)


targets += zboot-header.o vmlinuz vmlinuz.o vmlinuz.efi.elf vmlinuz.efi
targets += zboot-header.o vmlinuz vmlinuz.o vmlinuz.efi.elf vmlinuz.efi

ifneq ($(CONFIG_EFI_ZBOOT_SIGNED),)
$(obj)/vmlinuz.efi: $(obj)/vmlinuz.efi.unsigned FORCE
	$(call if_changed,sbsign)
endif

targets += $(EFI_ZBOOT_PAYLOAD).signed vmlinuz.efi.unsigned
+4 −4
Original line number Original line Diff line number Diff line
@@ -313,16 +313,16 @@ efi_status_t allocate_new_fdt_and_exit_boot(void *handle,


			/*
			/*
			 * Set the virtual address field of all
			 * Set the virtual address field of all
			 * EFI_MEMORY_RUNTIME entries to 0. This will signal
			 * EFI_MEMORY_RUNTIME entries to U64_MAX. This will
			 * the incoming kernel that no virtual translation has
			 * signal the incoming kernel that no virtual
			 * been installed.
			 * translation has been installed.
			 */
			 */
			for (l = 0; l < priv.boot_memmap->map_size;
			for (l = 0; l < priv.boot_memmap->map_size;
			     l += priv.boot_memmap->desc_size) {
			     l += priv.boot_memmap->desc_size) {
				p = (void *)priv.boot_memmap->map + l;
				p = (void *)priv.boot_memmap->map + l;


				if (p->attribute & EFI_MEMORY_RUNTIME)
				if (p->attribute & EFI_MEMORY_RUNTIME)
					p->virt_addr = 0;
					p->virt_addr = U64_MAX;
			}
			}
		}
		}
		return EFI_SUCCESS;
		return EFI_SUCCESS;
Loading