All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] ARM64: Kernel managed pages are only flushed
@ 2014-03-05 11:25 Bharat Bhushan
  2014-03-05 16:12 ` Will Deacon
  0 siblings, 1 reply; 6+ messages in thread
From: Bharat Bhushan @ 2014-03-05 11:25 UTC (permalink / raw)
  To: linux-arm-kernel

Kernel can only access pages which maps to managed memory.
So flush only valid kernel pages.

I observed kernel crash direct assigning a device using VFIO
and found that it was caused because of accessing invalid page

Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
---
v1->v2
 Getting pfn usin pte_pfn() in pfn_valid.

 arch/arm64/mm/flush.c |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/arch/arm64/mm/flush.c b/arch/arm64/mm/flush.c
index e4193e3..319826a 100644
--- a/arch/arm64/mm/flush.c
+++ b/arch/arm64/mm/flush.c
@@ -72,7 +72,18 @@ void copy_to_user_page(struct vm_area_struct *vma, struct page *page,
 
 void __sync_icache_dcache(pte_t pte, unsigned long addr)
 {
-	struct page *page = pte_page(pte);
+	struct page *page;
+
+#ifdef CONFIG_HAVE_ARCH_PFN_VALID
+	/*
+	 * We can only access pages that the kernel maps
+	 * as memory. Bail out for unmapped ones.
+	 */
+	if (!pfn_valid(pte_pfn(pte)))
+		return;
+
+#endif
+	page = pte_page(pte);
 
 	/* no flushing needed for anonymous pages */
 	if (!page_mapping(page))
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2014-03-06 16:18 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-05 11:25 [PATCH v2] ARM64: Kernel managed pages are only flushed Bharat Bhushan
2014-03-05 16:12 ` Will Deacon
2014-03-05 16:27   ` Bharat.Bhushan at freescale.com
2014-03-05 20:03     ` Laura Abbott
2014-03-06  3:38       ` Bharat.Bhushan at freescale.com
2014-03-06 16:18       ` Will Deacon

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.