From: Greg Kroah-Hartman Date: Mon, 14 Nov 2022 09:24:46 +0000 (+0100) Subject: 5.15-stable patches X-Git-Tag: v5.10.155~46 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bc738d2c7373189d3757640aabc81394c6e3fdff;p=thirdparty%2Fkernel%2Fstable-queue.git 5.15-stable patches added patches: arm64-efi-fix-handling-of-misaligned-runtime-regions-and-drop-warning.patch mips-jump_label-fix-compat-branch-range-check.patch --- diff --git a/queue-5.15/arm64-efi-fix-handling-of-misaligned-runtime-regions-and-drop-warning.patch b/queue-5.15/arm64-efi-fix-handling-of-misaligned-runtime-regions-and-drop-warning.patch new file mode 100644 index 00000000000..b1fc1068846 --- /dev/null +++ b/queue-5.15/arm64-efi-fix-handling-of-misaligned-runtime-regions-and-drop-warning.patch @@ -0,0 +1,117 @@ +From 9b9eaee9828fe98b030cf43ac50065a54a2f5d52 Mon Sep 17 00:00:00 2001 +From: Ard Biesheuvel +Date: Sun, 6 Nov 2022 15:53:54 +0100 +Subject: arm64: efi: Fix handling of misaligned runtime regions and drop warning + +From: Ard Biesheuvel + +commit 9b9eaee9828fe98b030cf43ac50065a54a2f5d52 upstream. + +Currently, when mapping the EFI runtime regions in the EFI page tables, +we complain about misaligned regions in a rather noisy way, using +WARN(). + +Not only does this produce a lot of irrelevant clutter in the log, it is +factually incorrect, as misaligned runtime regions are actually allowed +by the EFI spec as long as they don't require conflicting memory types +within the same 64k page. + +So let's drop the warning, and tweak the code so that we +- take both the start and end of the region into account when checking + for misalignment +- only revert to RWX mappings for non-code regions if misaligned code + regions are also known to exist. + +Cc: +Acked-by: Linus Torvalds +Signed-off-by: Ard Biesheuvel +Signed-off-by: Greg Kroah-Hartman +--- + arch/arm64/kernel/efi.c | 52 +++++++++++++++++++++++++++++++----------------- + 1 file changed, 34 insertions(+), 18 deletions(-) + +--- a/arch/arm64/kernel/efi.c ++++ b/arch/arm64/kernel/efi.c +@@ -12,6 +12,14 @@ + + #include + ++static bool region_is_misaligned(const efi_memory_desc_t *md) ++{ ++ if (PAGE_SIZE == EFI_PAGE_SIZE) ++ return false; ++ return !PAGE_ALIGNED(md->phys_addr) || ++ !PAGE_ALIGNED(md->num_pages << EFI_PAGE_SHIFT); ++} ++ + /* + * Only regions of type EFI_RUNTIME_SERVICES_CODE need to be + * executable, everything else can be mapped with the XN bits +@@ -25,14 +33,22 @@ static __init pteval_t create_mapping_pr + if (type == EFI_MEMORY_MAPPED_IO) + return PROT_DEVICE_nGnRE; + +- if (WARN_ONCE(!PAGE_ALIGNED(md->phys_addr), +- "UEFI Runtime regions are not aligned to 64 KB -- buggy firmware?")) ++ if (region_is_misaligned(md)) { ++ static bool __initdata code_is_misaligned; ++ + /* +- * If the region is not aligned to the page size of the OS, we +- * can not use strict permissions, since that would also affect +- * the mapping attributes of the adjacent regions. ++ * Regions that are not aligned to the OS page size cannot be ++ * mapped with strict permissions, as those might interfere ++ * with the permissions that are needed by the adjacent ++ * region's mapping. However, if we haven't encountered any ++ * misaligned runtime code regions so far, we can safely use ++ * non-executable permissions for non-code regions. + */ +- return pgprot_val(PAGE_KERNEL_EXEC); ++ code_is_misaligned |= (type == EFI_RUNTIME_SERVICES_CODE); ++ ++ return code_is_misaligned ? pgprot_val(PAGE_KERNEL_EXEC) ++ : pgprot_val(PAGE_KERNEL); ++ } + + /* R-- */ + if ((attr & (EFI_MEMORY_XP | EFI_MEMORY_RO)) == +@@ -63,19 +79,16 @@ int __init efi_create_mapping(struct mm_ + bool page_mappings_only = (md->type == EFI_RUNTIME_SERVICES_CODE || + md->type == EFI_RUNTIME_SERVICES_DATA); + +- if (!PAGE_ALIGNED(md->phys_addr) || +- !PAGE_ALIGNED(md->num_pages << EFI_PAGE_SHIFT)) { +- /* +- * If the end address of this region is not aligned to page +- * size, the mapping is rounded up, and may end up sharing a +- * page frame with the next UEFI memory region. If we create +- * a block entry now, we may need to split it again when mapping +- * the next region, and support for that is going to be removed +- * from the MMU routines. So avoid block mappings altogether in +- * that case. +- */ ++ /* ++ * If this region is not aligned to the page size used by the OS, the ++ * mapping will be rounded outwards, and may end up sharing a page ++ * frame with an adjacent runtime memory region. Given that the page ++ * table descriptor covering the shared page will be rewritten when the ++ * adjacent region gets mapped, we must avoid block mappings here so we ++ * don't have to worry about splitting them when that happens. ++ */ ++ if (region_is_misaligned(md)) + page_mappings_only = true; +- } + + create_pgd_mapping(mm, md->phys_addr, md->virt_addr, + md->num_pages << EFI_PAGE_SHIFT, +@@ -102,6 +115,9 @@ int __init efi_set_mapping_permissions(s + BUG_ON(md->type != EFI_RUNTIME_SERVICES_CODE && + md->type != EFI_RUNTIME_SERVICES_DATA); + ++ if (region_is_misaligned(md)) ++ return 0; ++ + /* + * Calling apply_to_page_range() is only safe on regions that are + * guaranteed to be mapped down to pages. Since we are only called diff --git a/queue-5.15/mips-jump_label-fix-compat-branch-range-check.patch b/queue-5.15/mips-jump_label-fix-compat-branch-range-check.patch new file mode 100644 index 00000000000..e38bb8a81b5 --- /dev/null +++ b/queue-5.15/mips-jump_label-fix-compat-branch-range-check.patch @@ -0,0 +1,36 @@ +From 64ac0befe75bdfaffc396c2b4a0ed5ae6920eeee Mon Sep 17 00:00:00 2001 +From: Jiaxun Yang +Date: Thu, 3 Nov 2022 15:10:53 +0000 +Subject: MIPS: jump_label: Fix compat branch range check +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Jiaxun Yang + +commit 64ac0befe75bdfaffc396c2b4a0ed5ae6920eeee upstream. + +Cast upper bound of branch range to long to do signed compare, +avoid negative offset trigger this warning. + +Fixes: 9b6584e35f40 ("MIPS: jump_label: Use compact branches for >= r6") +Signed-off-by: Jiaxun Yang +Cc: stable@vger.kernel.org +Reviewed-by: Philippe Mathieu-Daudé +Signed-off-by: Thomas Bogendoerfer +Signed-off-by: Greg Kroah-Hartman +--- + arch/mips/kernel/jump_label.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/mips/kernel/jump_label.c ++++ b/arch/mips/kernel/jump_label.c +@@ -56,7 +56,7 @@ void arch_jump_label_transform(struct ju + * The branch offset must fit in the instruction's 26 + * bit field. + */ +- WARN_ON((offset >= BIT(25)) || ++ WARN_ON((offset >= (long)BIT(25)) || + (offset < -(long)BIT(25))); + + insn.j_format.opcode = bc6_op; diff --git a/queue-5.15/series b/queue-5.15/series index 26a15465950..1a721ed5edb 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -79,3 +79,5 @@ net-macvlan-fix-memory-leaks-of-macvlan_common_newli.patch riscv-process-fix-kernel-info-leakage.patch riscv-vdso-fix-build-with-llvm.patch riscv-fix-reserved-memory-setup.patch +arm64-efi-fix-handling-of-misaligned-runtime-regions-and-drop-warning.patch +mips-jump_label-fix-compat-branch-range-check.patch