Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1487393 > unrolled thread
| Started by | Matt Fleming <matt@codeblueprint.co.uk> |
|---|---|
| First post | 2016-09-20 16:50 +0200 |
| Last post | 2016-09-20 17:10 +0200 |
| Articles | 3 — 2 participants |
Back to article view | Back to linux.kernel
[GIT PULL] EFI fix for v4.9 queue Matt Fleming <matt@codeblueprint.co.uk> - 2016-09-20 16:50 +0200
[PATCH] x86/efi: Round EFI memmap reservations to EFI_PAGE_SIZE Matt Fleming <matt@codeblueprint.co.uk> - 2016-09-20 16:50 +0200
Re: [GIT PULL] EFI fix for v4.9 queue Ingo Molnar <mingo@kernel.org> - 2016-09-20 17:10 +0200
| From | Matt Fleming <matt@codeblueprint.co.uk> |
|---|---|
| Date | 2016-09-20 16:50 +0200 |
| Subject | [GIT PULL] EFI fix for v4.9 queue |
| Message-ID | <sjuwW-4dq-21@gated-at.bofh.it> |
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(-)
[toc] | [next] | [standalone]
| From | Matt Fleming <matt@codeblueprint.co.uk> |
|---|---|
| Date | 2016-09-20 16:50 +0200 |
| Subject | [PATCH] x86/efi: Round EFI memmap reservations to EFI_PAGE_SIZE |
| Message-ID | <sjuwW-4dq-25@gated-at.bofh.it> |
| In reply to | #1487393 |
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
[toc] | [prev] | [next] | [standalone]
| From | Ingo Molnar <mingo@kernel.org> |
|---|---|
| Date | 2016-09-20 17:10 +0200 |
| Message-ID | <sjuQi-4Gm-19@gated-at.bofh.it> |
| In reply to | #1487393 |
* 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
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web