EFI fix for v4.9 queue
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(-)
PATCH 1/1 x86/efi: Round EFI memmap reservations to EFI_PAGE_SIZE
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.
--- arch/x86/platform/efi/quirks.c | 6 +++++- drivers/firmware/efi/memmap.c | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-)
arch/x86/platform/efi/quirks.c +5 -1
@@ -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);
drivers/firmware/efi/memmap.c +11 -0
@@ -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) {
Signature · 1 line
2.9.3
Quoted 21 lines · Matt Fleming
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/efiinto 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.gittags/efi-nextfor 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 toEFI_PAGE_SIZEboundaries causing bogus regions to be inserted into the global EFI memory map - Matt Fleming
Quoted 7 lines
----------------------------------------------------------------
Matt Fleming (1):
x86/efi: Round EFI memmap reservations toEFI_PAGE_SIZEarch/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