From 411d3b79f725abf71004a5eb845a838c46c217ce Mon Sep 17 00:00:00 2001 From: "Justin M. Forbes" Date: Mon, 16 Jan 2017 10:06:57 -0600 Subject: [PATCH] Linux v4.10-rc4 --- ...efi-prune-invalid-memory-map-entries.patch | 141 ------------------ efi-lockdown.patch | 4 +- gitrev | 2 +- kernel.spec | 12 +- sources | 3 +- 5 files changed, 9 insertions(+), 153 deletions(-) delete mode 100644 0001-efi-prune-invalid-memory-map-entries.patch diff --git a/0001-efi-prune-invalid-memory-map-entries.patch b/0001-efi-prune-invalid-memory-map-entries.patch deleted file mode 100644 index 4b65ef504..000000000 --- a/0001-efi-prune-invalid-memory-map-entries.patch +++ /dev/null @@ -1,141 +0,0 @@ -From c7c7030a020405d5826c03839e38986e0f78f2ea Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Dec 2016 10:25:10 +0000 -Subject: [PATCH] efi: prune invalid memory map entries - -Some machines, such as the Lenovo ThinkPad W541 with firmware GNET80WW -(2.28), include memory map entries with phys_addr=0x0 and num_pages=0. - -Currently the log output for this case (with efi=debug) looks like: - -[ 0.000000] efi: mem45: [Reserved | | | | | | | | | | | | ] range=[0x0000000000000000-0xffffffffffffffff] (0MB) - -This is clearly wrong, and also not as informative as it could be. This -patch changes it so that if we find obviously invalid memory map -entries, we print an error and those entries. It also detects the -display of the address range calculation overflow, so the new output is: - -[ 0.000000] efi: [Firmware Bug]: Invalid EFI memory map entries: -[ 0.000000] efi: mem45: [Reserved | | | | | | | | | | | | ] range=[0x0000000000000000-0x0000000000000000] (invalid) - -It also detects memory map sizes that would overflow the physical -address, for example phys_addr=0xfffffffffffff000 and -num_pages=0x0200000000000001, and prints: - -[ 0.000000] efi: [Firmware Bug]: Invalid EFI memory map entries: -[ 0.000000] efi: mem45: [Reserved | | | | | | | | | | | | ] range=[phys_addr=0xfffffffffffff000-0x20ffffffffffffffff] (invalid) - -It then removes these entries from the memory map. - -Cc: Matt Fleming -Signed-off-by: Peter Jones -[ardb: refactor for clarity with no functional changes, avoid PAGE_SHIFT] -Signed-off-by: Ard Biesheuvel ---- - arch/x86/platform/efi/efi.c | 70 +++++++++++++++++++++++++++++++++++++++++++++ - include/linux/efi.h | 1 + - 2 files changed, 71 insertions(+) - -diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c -index bf99aa7..0a1550b 100644 ---- a/arch/x86/platform/efi/efi.c -+++ b/arch/x86/platform/efi/efi.c -@@ -210,6 +210,74 @@ int __init efi_memblock_x86_reserve_range(void) - return 0; - } - -+#define OVERFLOW_ADDR_SHIFT (64 - EFI_PAGE_SHIFT) -+#define OVERFLOW_ADDR_MASK (U64_MAX << OVERFLOW_ADDR_SHIFT) -+#define U64_HIGH_BIT (~(U64_MAX >> 1)) -+ -+static bool __init efi_memmap_entry_valid(const efi_memory_desc_t *md, int i) -+{ -+ static __initdata bool once = true; -+ u64 end = (md->num_pages << EFI_PAGE_SHIFT) + md->phys_addr - 1; -+ u64 end_hi = 0; -+ char buf[64]; -+ -+ if (md->num_pages == 0) { -+ end = 0; -+ } else if (md->num_pages > EFI_PAGES_MAX || -+ EFI_PAGES_MAX - md->num_pages < -+ (md->phys_addr >> EFI_PAGE_SHIFT)) { -+ end_hi = (md->num_pages & OVERFLOW_ADDR_MASK) -+ >> OVERFLOW_ADDR_SHIFT; -+ -+ if ((md->phys_addr & U64_HIGH_BIT) && !(end & U64_HIGH_BIT)) -+ end_hi += 1; -+ } else { -+ return true; -+ } -+ -+ if (once) { -+ pr_warn(FW_BUG "Invalid EFI memory map entries:\n"); -+ once = false; -+ } -+ -+ if (end_hi) { -+ pr_warn("mem%02u: %s range=[0x%016llx-0x%llx%016llx] (invalid)\n", -+ i, efi_md_typeattr_format(buf, sizeof(buf), md), -+ md->phys_addr, end_hi, end); -+ } else { -+ pr_warn("mem%02u: %s range=[0x%016llx-0x%016llx] (invalid)\n", -+ i, efi_md_typeattr_format(buf, sizeof(buf), md), -+ md->phys_addr, end); -+ } -+ return false; -+} -+ -+static void __init efi_clean_memmap(void) -+{ -+ efi_memory_desc_t *out = efi.memmap.map; -+ const efi_memory_desc_t *in = out; -+ const efi_memory_desc_t *end = efi.memmap.map_end; -+ int i, n_removal; -+ -+ for (i = n_removal = 0; in < end; i++) { -+ if (efi_memmap_entry_valid(in, i)) { -+ if (out != in) -+ memcpy(out, in, efi.memmap.desc_size); -+ out = (void *)out + efi.memmap.desc_size; -+ } else { -+ n_removal++; -+ } -+ in = (void *)in + efi.memmap.desc_size; -+ } -+ -+ if (n_removal > 0) { -+ u64 size = efi.memmap.nr_map - n_removal; -+ -+ pr_warn("Removing %d invalid memory map entries.\n", n_removal); -+ efi_memmap_install(efi.memmap.phys_map, size); -+ } -+} -+ - void __init efi_print_memmap(void) - { - efi_memory_desc_t *md; -@@ -472,6 +540,8 @@ void __init efi_init(void) - } - } - -+ efi_clean_memmap(); -+ - if (efi_enabled(EFI_DBG)) - efi_print_memmap(); - } -diff --git a/include/linux/efi.h b/include/linux/efi.h -index 4c1b3ea..712a3aa 100644 ---- a/include/linux/efi.h -+++ b/include/linux/efi.h -@@ -103,6 +103,7 @@ typedef struct { - - #define EFI_PAGE_SHIFT 12 - #define EFI_PAGE_SIZE (1UL << EFI_PAGE_SHIFT) -+#define EFI_PAGES_MAX (U64_MAX >> EFI_PAGE_SHIFT) - - typedef struct { - u32 type; --- -2.9.3 - diff --git a/efi-lockdown.patch b/efi-lockdown.patch index b848ee1a6..6bbc24fa1 100644 --- a/efi-lockdown.patch +++ b/efi-lockdown.patch @@ -1073,8 +1073,8 @@ index 5bb1985..6441d21 100644 return -EFAULT; @@ -515,6 +518,9 @@ static ssize_t write_kmem(struct file *file, const char __user *buf, - if (!pfn_valid(PFN_DOWN(p))) - return -EIO; + char *kbuf; /* k-addr because vwrite() takes vmlist_lock rwlock */ + int err = 0; + if (kernel_is_locked_down()) + return -EPERM; diff --git a/gitrev b/gitrev index 96275f9c1..0424437dd 100644 --- a/gitrev +++ b/gitrev @@ -1 +1 @@ -557ed56cc75e0a33c15ba438734a280bac23bd32 +49def1853334396f948dcb4cedb9347abb318df5 diff --git a/kernel.spec b/kernel.spec index 81d0dc2c7..55f7e5145 100644 --- a/kernel.spec +++ b/kernel.spec @@ -42,7 +42,7 @@ Summary: The Linux kernel # For non-released -rc kernels, this will be appended after the rcX and # gitX tags, so a 3 here would become part of release "0.rcX.gitX.3" # -%global baserelease 2 +%global baserelease 1 %global fedora_build %{baserelease} # base_sublevel is the kernel version we're starting with and patching @@ -67,9 +67,9 @@ Summary: The Linux kernel # The next upstream release sublevel (base_sublevel+1) %define upstream_sublevel %(echo $((%{base_sublevel} + 1))) # The rc snapshot level -%global rcrev 3 +%global rcrev 4 # The git snapshot level -%define gitrev 4 +%define gitrev 0 # Set rpm version accordingly %define rpmversion 4.%{upstream_sublevel}.0 %endif @@ -579,9 +579,6 @@ Patch665: netfilter-x_tables-deal-with-bogus-nextoffset-values.patch #ongoing complaint, full discussion delayed until ksummit/plumbers Patch849: 0001-iio-Use-event-header-from-kernel-tree.patch -# Work around thinkpad firmware memory layout issues and efi_mem_reserve() -Patch850: 0001-efi-prune-invalid-memory-map-entries.patch - # Fix build issue with armada_trace Patch851: Armada-trace-build-fix.patch @@ -2155,8 +2152,9 @@ fi # # %changelog -* Mon Jan 16 2017 Justin M. Forbes - 4.10.0-0.rc3.git4.2 +* Mon Jan 16 2017 Justin M. Forbes - 4.10.0-0.rc4.git0.1 - Disable debugging options. +- Linux v4.10-rc4 * Mon Jan 16 2017 Peter Robinson - Minor ARM updates diff --git a/sources b/sources index 44dd26e7d..d4973a26b 100644 --- a/sources +++ b/sources @@ -1,4 +1,3 @@ SHA512 (linux-4.9.tar.xz) = bf67ff812cc3cb7e5059e82cc5db0d9a7c5637f7ed9a42e4730c715bf7047c81ed3a571225f92a33ef0b6d65f35595bc32d773356646df2627da55e9bc7f1f1a SHA512 (perf-man-4.9.tar.gz) = d23bb3da1eadd6623fddbf4696948de7675f3dcf57c711a7427dd7ae111394f58d8f42752938bbea7cd219f1e7f6f116fc67a1c74f769711063940a065f37b99 -SHA512 (patch-4.10-rc3.xz) = 3573b198b6ee488d6c573dd09c534548a08bcf8a017a94f74d127a58a018c9e97056006fccd555aa49513cc3f98ad5c1cb6545a7e261d3ccaea21456b53f2dd5 -SHA512 (patch-4.10-rc3-git4.xz) = bad15249a0e5675fdfa5d628ac4c556e1e4b58c89239a9ae0357277b34738185e2176b5a0510a4e4eff417b2bf9d03f31f98711440961768e275bad04d638f93 +SHA512 (patch-4.10-rc4.xz) = 89d903d52ff907f3911ac09214d1299c310fd67b7ff36170c6233e6348049fb0f669ba245a8ca310f52c91eb523aa5f91a9b52f4c67ca932b951fe2c60f25ae5