]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 29 May 2016 21:42:40 +0000 (14:42 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 29 May 2016 21:42:40 +0000 (14:42 -0700)
added patches:
arm-arm64-kvm-enforce-break-before-make-on-stage-2-page-tables.patch

queue-3.14/arm-arm64-kvm-enforce-break-before-make-on-stage-2-page-tables.patch [new file with mode: 0644]
queue-3.14/series
queue-4.4/series
queue-4.5/series
queue-4.6/series [new file with mode: 0644]

diff --git a/queue-3.14/arm-arm64-kvm-enforce-break-before-make-on-stage-2-page-tables.patch b/queue-3.14/arm-arm64-kvm-enforce-break-before-make-on-stage-2-page-tables.patch
new file mode 100644 (file)
index 0000000..a32cb81
--- /dev/null
@@ -0,0 +1,63 @@
+From d4b9e0790aa764c0b01e18d4e8d33e93ba36d51f Mon Sep 17 00:00:00 2001
+From: Marc Zyngier <marc.zyngier@arm.com>
+Date: Thu, 28 Apr 2016 16:16:31 +0100
+Subject: arm/arm64: KVM: Enforce Break-Before-Make on Stage-2 page tables
+
+From: Marc Zyngier <marc.zyngier@arm.com>
+
+commit d4b9e0790aa764c0b01e18d4e8d33e93ba36d51f upstream.
+
+The ARM architecture mandates that when changing a page table entry
+from a valid entry to another valid entry, an invalid entry is first
+written, TLB invalidated, and only then the new entry being written.
+
+The current code doesn't respect this, directly writing the new
+entry and only then invalidating TLBs. Let's fix it up.
+
+Reported-by: Christoffer Dall <christoffer.dall@linaro.org>
+Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
+Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/kvm/mmu.c |   17 +++++++++++------
+ 1 file changed, 11 insertions(+), 6 deletions(-)
+
+--- a/arch/arm/kvm/mmu.c
++++ b/arch/arm/kvm/mmu.c
+@@ -682,11 +682,14 @@ static int stage2_set_pmd_huge(struct kv
+       VM_BUG_ON(pmd_present(*pmd) && pmd_pfn(*pmd) != pmd_pfn(*new_pmd));
+       old_pmd = *pmd;
+-      kvm_set_pmd(pmd, *new_pmd);
+-      if (pmd_present(old_pmd))
++      if (pmd_present(old_pmd)) {
++              pmd_clear(pmd);
+               kvm_tlb_flush_vmid_ipa(kvm, addr);
+-      else
++      } else {
+               get_page(virt_to_page(pmd));
++      }
++
++      kvm_set_pmd(pmd, *new_pmd);
+       return 0;
+ }
+@@ -723,12 +726,14 @@ static int stage2_set_pte(struct kvm *kv
+       /* Create 2nd stage page table mapping - Level 3 */
+       old_pte = *pte;
+-      kvm_set_pte(pte, *new_pte);
+-      if (pte_present(old_pte))
++      if (pte_present(old_pte)) {
++              kvm_set_pte(pte, __pte(0));
+               kvm_tlb_flush_vmid_ipa(kvm, addr);
+-      else
++      } else {
+               get_page(virt_to_page(pte));
++      }
++      kvm_set_pte(pte, *new_pte);
+       return 0;
+ }
index 19ebce931467e36db3b4eb2dfffaee8e64316b85..9ed5a051f3fdb728371107dc4d92b292349f5231 100644 (file)
@@ -1 +1,2 @@
 btrfs-don-t-use-src-fd-for-printk.patch
+arm-arm64-kvm-enforce-break-before-make-on-stage-2-page-tables.patch
index 7cbc19d4c15ccb5b3eede44a9e23722de0fd3a4c..3dc9c542cde35c4abc9051a9f2d25ba20ff677d8 100644 (file)
@@ -2,3 +2,11 @@ btrfs-don-t-use-src-fd-for-printk.patch
 perf-x86-intel-pt-generate-pmi-in-the-stop-region-as-well.patch
 perf-core-fix-perf_event_open-vs.-execve-race.patch
 perf-test-fix-build-of-bpf-and-llvm-on-older-glibc-libraries.patch
+ext4-iterate-over-buffer-heads-correctly-in-move_extent_per_page.patch
+arm64-fix-typo-in-the-pmdp_huge_get_and_clear-definition.patch
+arm64-ensure-pmd_present-returns-false-after-pmd_mknotpresent.patch
+arm64-implement-ptep_set_access_flags-for-hardware-af-dbm.patch
+arm64-implement-pmdp_set_access_flags-for-hardware-af-dbm.patch
+arm64-cpuinfo-missing-null-terminator-in-compat_hwcap_str.patch
+arm-arm64-kvm-enforce-break-before-make-on-stage-2-page-tables.patch
+kvm-arm64-fix-ec-field-in-inject_abt64.patch
index 2583666e830f0d00c6a6b434b0bb97c1addbcc45..c867fa6bd84bf3e53d2f5da566774ade52a6214f 100644 (file)
@@ -1,2 +1,9 @@
 perf-x86-intel-pt-generate-pmi-in-the-stop-region-as-well.patch
 perf-core-fix-perf_event_open-vs.-execve-race.patch
+arm64-fix-typo-in-the-pmdp_huge_get_and_clear-definition.patch
+arm64-ensure-pmd_present-returns-false-after-pmd_mknotpresent.patch
+arm64-implement-ptep_set_access_flags-for-hardware-af-dbm.patch
+arm64-implement-pmdp_set_access_flags-for-hardware-af-dbm.patch
+arm64-cpuinfo-missing-null-terminator-in-compat_hwcap_str.patch
+arm-arm64-kvm-enforce-break-before-make-on-stage-2-page-tables.patch
+kvm-arm64-fix-ec-field-in-inject_abt64.patch
diff --git a/queue-4.6/series b/queue-4.6/series
new file mode 100644 (file)
index 0000000..c27f622
--- /dev/null
@@ -0,0 +1,7 @@
+arm64-fix-typo-in-the-pmdp_huge_get_and_clear-definition.patch
+arm64-ensure-pmd_present-returns-false-after-pmd_mknotpresent.patch
+arm64-implement-ptep_set_access_flags-for-hardware-af-dbm.patch
+arm64-implement-pmdp_set_access_flags-for-hardware-af-dbm.patch
+arm64-cpuinfo-missing-null-terminator-in-compat_hwcap_str.patch
+arm-arm64-kvm-enforce-break-before-make-on-stage-2-page-tables.patch
+kvm-arm64-fix-ec-field-in-inject_abt64.patch