Index: kernel/generic/src/mm/backend_anon.c
===================================================================
--- kernel/generic/src/mm/backend_anon.c	(revision 82b72e401e53bd1d38280c3f1cc11cc0e83fbae4)
+++ kernel/generic/src/mm/backend_anon.c	(revision 6461d28674160e6ef7c13209e81506d4efc09f9d)
@@ -79,5 +79,4 @@
 {
 	uintptr_t frame;
-	bool dirty = false;
 
 	if (!as_area_check_access(area, access))
@@ -107,5 +106,5 @@
 			for (i = 0; i < leaf->keys; i++) {
 				if (leaf->key[i] ==
-				    ALIGN_DOWN(addr, PAGE_SIZE)) {
+				    ALIGN_DOWN(addr, PAGE_SIZE) - area->base) {
 					allocate = false;
 					break;
@@ -115,5 +114,4 @@
 				frame = (uintptr_t) frame_alloc(ONE_FRAME, 0);
 				memsetb((void *) PA2KA(frame), FRAME_SIZE, 0);
-				dirty = true;
 				
 				/*
@@ -146,5 +144,4 @@
 		frame = (uintptr_t) frame_alloc(ONE_FRAME, 0);
 		memsetb((void *) PA2KA(frame), FRAME_SIZE, 0);
-		dirty = true;
 	}
 	
Index: kernel/generic/src/mm/backend_elf.c
===================================================================
--- kernel/generic/src/mm/backend_elf.c	(revision 82b72e401e53bd1d38280c3f1cc11cc0e83fbae4)
+++ kernel/generic/src/mm/backend_elf.c	(revision 6461d28674160e6ef7c13209e81506d4efc09f9d)
@@ -119,5 +119,5 @@
 
 			for (i = 0; i < leaf->keys; i++) {
-				if (leaf->key[i] == page) {
+				if (leaf->key[i] == page - area->base) {
 					found = true;
 					break;
