linux-efi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [GIT PULL] EFI fix for v4.9 queue
@ 2016-09-20 14:46 Matt Fleming
  2016-09-20 14:46 ` [PATCH] x86/efi: Round EFI memmap reservations to EFI_PAGE_SIZE Matt Fleming
  2016-09-20 14:59 ` [GIT PULL] EFI fix for v4.9 queue Ingo Molnar
  0 siblings, 2 replies; 3+ messages in thread
From: Matt Fleming @ 2016-09-20 14:46 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H . Peter Anvin
  Cc: Matt Fleming, Ard Biesheuvel, linux-kernel, linux-efi,
	Mark Rutland, Mike Galbraith, Mike Krinkin, Peter Jones,
	Taku Izumi

Folks, please pull the following fix for the v4.9 EFI queue sat in
tip/efi/core.

The following changes since commit 5465fe0fc3316f7cdda66732a7986f4ebe76d949:

  Merge tag 'efi-next' of git://git.kernel.org/pub/scm/linux/kernel/git/mfleming/efi into efi/core (2016-09-13 20:21:55 +0200)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/mfleming/efi.git tags/efi-next

for you to fetch changes up to 92dc33501bfba74655dbf3ec63ea82d040fd6d58:

  x86/efi: Round EFI memmap reservations to EFI_PAGE_SIZE (2016-09-20 15:43:31 +0100)

----------------------------------------------------------------
 * Fix a boot crash reported by Mike Galbraith and Mike Krinkin. The
   new EFI memory map reservation code didn't align reservations to
   EFI_PAGE_SIZE boundaries causing bogus regions to be inserted into
   the global EFI memory map - Matt Fleming

----------------------------------------------------------------
Matt Fleming (1):
      x86/efi: Round EFI memmap reservations to EFI_PAGE_SIZE

 arch/x86/platform/efi/quirks.c |  6 +++++-
 drivers/firmware/efi/memmap.c  | 11 +++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH] x86/efi: Round EFI memmap reservations to EFI_PAGE_SIZE
  2016-09-20 14:46 [GIT PULL] EFI fix for v4.9 queue Matt Fleming
@ 2016-09-20 14:46 ` Matt Fleming
  2016-09-20 14:59 ` [GIT PULL] EFI fix for v4.9 queue Ingo Molnar
  1 sibling, 0 replies; 3+ messages in thread
From: Matt Fleming @ 2016-09-20 14:46 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H . Peter Anvin
  Cc: Matt Fleming, Ard Biesheuvel, linux-kernel, linux-efi,
	Mark Rutland, Mike Galbraith, Mike Krinkin, Peter Jones,
	Taku Izumi

Mike Galbraith reported that his machine started rebooting during boot
after,

  commit 8e80632fb23f ("efi/esrt: Use efi_mem_reserve() and avoid a kmalloc()")

The ESRT table on his machine is 56 bytes and at no point in the
efi_arch_mem_reserve() call path is that size rounded up to
EFI_PAGE_SIZE, nor is the start address on an EFI_PAGE_SIZE boundary.

Since the EFI memory map only deals with whole pages, inserting an EFI
memory region with 56 bytes results in a new entry covering zero
pages, and completely screws up the calculations for the old regions
that were trimmed.

Round all sizes upwards, and start addresses downwards, to the nearest
EFI_PAGE_SIZE boundary.

Additionally, efi_memmap_insert() expects the mem::range::end value to
be one less than the end address for the region.

Reported-by: Mike Galbraith <umgwanakikbuti@gmail.com>
Reported-by: Mike Krinkin <krinkin.m.u@gmail.com>
Tested-by: Mike Krinkin <krinkin.m.u@gmail.com>
Cc: Peter Jones <pjones@redhat.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Taku Izumi <izumi.taku@jp.fujitsu.com>
Signed-off-by: Matt Fleming <matt@codeblueprint.co.uk>
---
 arch/x86/platform/efi/quirks.c |  6 +++++-
 drivers/firmware/efi/memmap.c  | 11 +++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/arch/x86/platform/efi/quirks.c b/arch/x86/platform/efi/quirks.c
index f14b7a9da24b..10aca63a50d7 100644
--- a/arch/x86/platform/efi/quirks.c
+++ b/arch/x86/platform/efi/quirks.c
@@ -201,8 +201,12 @@ void __init efi_arch_mem_reserve(phys_addr_t addr, u64 size)
 		return;
 	}
 
+	size += addr % EFI_PAGE_SIZE;
+	size = round_up(size, EFI_PAGE_SIZE);
+	addr = round_down(addr, EFI_PAGE_SIZE);
+
 	mr.range.start = addr;
-	mr.range.end = addr + size;
+	mr.range.end = addr + size - 1;
 	mr.attribute = md.attribute | EFI_MEMORY_RUNTIME;
 
 	num_entries = efi_memmap_split_count(&md, &mr.range);
diff --git a/drivers/firmware/efi/memmap.c b/drivers/firmware/efi/memmap.c
index cd96086fd851..f03ddecd232b 100644
--- a/drivers/firmware/efi/memmap.c
+++ b/drivers/firmware/efi/memmap.c
@@ -225,6 +225,17 @@ void __init efi_memmap_insert(struct efi_memory_map *old_memmap, void *buf,
 	m_end = mem->range.end;
 	m_attr = mem->attribute;
 
+	/*
+	 * The EFI memory map deals with regions in EFI_PAGE_SIZE
+	 * units. Ensure that the region described by 'mem' is aligned
+	 * correctly.
+	 */
+	if (!IS_ALIGNED(m_start, EFI_PAGE_SIZE) ||
+	    !IS_ALIGNED(m_end + 1, EFI_PAGE_SIZE)) {
+		WARN_ON(1);
+		return;
+	}
+
 	for (old = old_memmap->map, new = buf;
 	     old < old_memmap->map_end;
 	     old += old_memmap->desc_size, new += old_memmap->desc_size) {
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [GIT PULL] EFI fix for v4.9 queue
  2016-09-20 14:46 [GIT PULL] EFI fix for v4.9 queue Matt Fleming
  2016-09-20 14:46 ` [PATCH] x86/efi: Round EFI memmap reservations to EFI_PAGE_SIZE Matt Fleming
@ 2016-09-20 14:59 ` Ingo Molnar
  1 sibling, 0 replies; 3+ messages in thread
From: Ingo Molnar @ 2016-09-20 14:59 UTC (permalink / raw)
  To: Matt Fleming
  Cc: Thomas Gleixner, H . Peter Anvin, Ard Biesheuvel, linux-kernel,
	linux-efi, Mark Rutland, Mike Galbraith, Mike Krinkin,
	Peter Jones, Taku Izumi


* Matt Fleming <matt@codeblueprint.co.uk> wrote:

> Folks, please pull the following fix for the v4.9 EFI queue sat in
> tip/efi/core.
> 
> The following changes since commit 5465fe0fc3316f7cdda66732a7986f4ebe76d949:
> 
>   Merge tag 'efi-next' of git://git.kernel.org/pub/scm/linux/kernel/git/mfleming/efi into efi/core (2016-09-13 20:21:55 +0200)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/mfleming/efi.git tags/efi-next
> 
> for you to fetch changes up to 92dc33501bfba74655dbf3ec63ea82d040fd6d58:
> 
>   x86/efi: Round EFI memmap reservations to EFI_PAGE_SIZE (2016-09-20 15:43:31 +0100)
> 
> ----------------------------------------------------------------
>  * Fix a boot crash reported by Mike Galbraith and Mike Krinkin. The
>    new EFI memory map reservation code didn't align reservations to
>    EFI_PAGE_SIZE boundaries causing bogus regions to be inserted into
>    the global EFI memory map - Matt Fleming
> 
> ----------------------------------------------------------------
> Matt Fleming (1):
>       x86/efi: Round EFI memmap reservations to EFI_PAGE_SIZE
> 
>  arch/x86/platform/efi/quirks.c |  6 +++++-
>  drivers/firmware/efi/memmap.c  | 11 +++++++++++
>  2 files changed, 16 insertions(+), 1 deletion(-)

Pulled into tip:efi/core, thanks a lot Matt!

	Ingo

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-09-20 14:59 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-20 14:46 [GIT PULL] EFI fix for v4.9 queue Matt Fleming
2016-09-20 14:46 ` [PATCH] x86/efi: Round EFI memmap reservations to EFI_PAGE_SIZE Matt Fleming
2016-09-20 14:59 ` [GIT PULL] EFI fix for v4.9 queue Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).