Index: kernel/arch/ia64/src/mm/tlb.c
===================================================================
--- kernel/arch/ia64/src/mm/tlb.c	(revision 97b8ca970e38244c08a9fa57840bd46ae9acfb8f)
+++ kernel/arch/ia64/src/mm/tlb.c	(revision 560b81c47c7bd8b84ad01838e371562b523c1123)
@@ -492,4 +492,6 @@
 	bool found = page_mapping_find(AS, va, true, &t);
 	if (found) {
+		ASSERT(t.p);
+
 		/*
 		 * The mapping was found in software page hash table.
@@ -603,4 +605,6 @@
 	bool found = page_mapping_find(as, va, true, &t);
 	if (found) {
+		ASSERT(t.p);
+
 		/*
 		 * The mapping was found in the software page hash table.
Index: kernel/arch/sparc64/src/mm/sun4u/tlb.c
===================================================================
--- kernel/arch/sparc64/src/mm/sun4u/tlb.c	(revision 97b8ca970e38244c08a9fa57840bd46ae9acfb8f)
+++ kernel/arch/sparc64/src/mm/sun4u/tlb.c	(revision 560b81c47c7bd8b84ad01838e371562b523c1123)
@@ -201,4 +201,6 @@
 	bool found = page_mapping_find(AS, istate->tpc, true, &t);
 	if (found && PTE_EXECUTABLE(&t)) {
+		ASSERT(t.p);
+
 		/*
 		 * The mapping was found in the software page hash table.
@@ -256,4 +258,6 @@
 	bool found = page_mapping_find(as, page_16k, true, &t);
 	if (found) {
+		ASSERT(t.p);
+
 		/*
 		 * The mapping was found in the software page hash table.
@@ -297,4 +301,6 @@
 	bool found = page_mapping_find(as, page_16k, true, &t);
 	if (found && PTE_WRITABLE(&t)) {
+		ASSERT(t.p);
+
 		/*
 		 * The mapping was found in the software page hash table and is
Index: kernel/arch/sparc64/src/mm/sun4v/tlb.c
===================================================================
--- kernel/arch/sparc64/src/mm/sun4v/tlb.c	(revision 97b8ca970e38244c08a9fa57840bd46ae9acfb8f)
+++ kernel/arch/sparc64/src/mm/sun4v/tlb.c	(revision 560b81c47c7bd8b84ad01838e371562b523c1123)
@@ -215,4 +215,6 @@
 	bool found = page_mapping_find(AS, va, true, &t);
 	if (found && PTE_EXECUTABLE(&t)) {
+		ASSERT(t.p);
+
 		/*
 		 * The mapping was found in the software page hash table.
@@ -263,4 +265,6 @@
 	bool found = page_mapping_find(as, va, true, &t);
 	if (found) {
+		ASSERT(t.p);
+
 		/*
 		 * The mapping was found in the software page hash table.
@@ -299,4 +303,6 @@
 	bool found = page_mapping_find(as, va, true, &t);
 	if (found && PTE_WRITABLE(&t)) {
+		ASSERT(t.p);
+
 		/*
 		 * The mapping was found in the software page hash table and is
Index: kernel/generic/src/ipc/ops/pagein.c
===================================================================
--- kernel/generic/src/ipc/ops/pagein.c	(revision 97b8ca970e38244c08a9fa57840bd46ae9acfb8f)
+++ kernel/generic/src/ipc/ops/pagein.c	(revision 560b81c47c7bd8b84ad01838e371562b523c1123)
@@ -53,5 +53,5 @@
 		bool found = page_mapping_find(AS, IPC_GET_ARG1(answer->data),
 		    false, &pte);
-		if (found) {
+		if (found & PTE_PRESENT(&pte)) {
 			frame = PTE_GET_FRAME(&pte);
 			pfn_t pfn = ADDR2PFN(frame);
Index: kernel/generic/src/mm/as.c
===================================================================
--- kernel/generic/src/mm/as.c	(revision 97b8ca970e38244c08a9fa57840bd46ae9acfb8f)
+++ kernel/generic/src/mm/as.c	(revision 560b81c47c7bd8b84ad01838e371562b523c1123)
@@ -1457,14 +1457,12 @@
 	pte_t pte;
 	bool found = page_mapping_find(AS, page, false, &pte);
-	if (found) {
-		if (PTE_PRESENT(&pte)) {
-			if (((access == PF_ACCESS_READ) && PTE_READABLE(&pte)) ||
-			    (access == PF_ACCESS_WRITE && PTE_WRITABLE(&pte)) ||
-			    (access == PF_ACCESS_EXEC && PTE_EXECUTABLE(&pte))) {
-				page_table_unlock(AS, false);
-				mutex_unlock(&area->lock);
-				mutex_unlock(&AS->lock);
-				return AS_PF_OK;
-			}
+	if (found && PTE_PRESENT(&pte)) {
+		if (((access == PF_ACCESS_READ) && PTE_READABLE(&pte)) ||
+		    (access == PF_ACCESS_WRITE && PTE_WRITABLE(&pte)) ||
+		    (access == PF_ACCESS_EXEC && PTE_EXECUTABLE(&pte))) {
+			page_table_unlock(AS, false);
+			mutex_unlock(&area->lock);
+			mutex_unlock(&AS->lock);
+			return AS_PF_OK;
 		}
 	}
Index: kernel/generic/src/mm/page.c
===================================================================
--- kernel/generic/src/mm/page.c	(revision 97b8ca970e38244c08a9fa57840bd46ae9acfb8f)
+++ kernel/generic/src/mm/page.c	(revision 560b81c47c7bd8b84ad01838e371562b523c1123)
@@ -142,5 +142,6 @@
  * @param[out] pte Structure that will receive a copy of the found PTE.
  *
- * @return True if the mapping was found, false otherwise.
+ * @return True if a valid PTE is returned, false otherwise. Note that
+ *         the PTE is not guaranteed to be present.
  */
 NO_TRACE bool page_mapping_find(as_t *as, uintptr_t page, bool nolock,
