[Haiku-commits] r33031 - haiku/trunk/src/system/kernel/vm
mmlr at mail.berlios.de
mmlr at mail.berlios.de
Thu Sep 10 03:47:23 CEST 2009
Author: mmlr
Date: 2009-09-10 03:47:22 +0200 (Thu, 10 Sep 2009)
New Revision: 33031
ViewCVS: http://svn.berlios.de/viewcvs/haiku?rev=33031&view=rev
Modified:
haiku/trunk/src/system/kernel/vm/vm.cpp
Log:
Also check for read-protection of an area. Adjusted naming from read-only to
write-protected and read-protected.
Modified: haiku/trunk/src/system/kernel/vm/vm.cpp
===================================================================
--- haiku/trunk/src/system/kernel/vm/vm.cpp 2009-09-10 01:40:46 UTC (rev 33030)
+++ haiku/trunk/src/system/kernel/vm/vm.cpp 2009-09-10 01:47:22 UTC (rev 33031)
@@ -798,7 +798,8 @@
enum {
PAGE_FAULT_ERROR_NO_AREA = 0,
PAGE_FAULT_ERROR_KERNEL_ONLY,
- PAGE_FAULT_ERROR_READ_ONLY,
+ PAGE_FAULT_ERROR_WRITE_PROTECTED,
+ PAGE_FAULT_ERROR_READ_PROTECTED,
PAGE_FAULT_ERROR_KERNEL_BAD_USER_MEMORY,
PAGE_FAULT_ERROR_NO_ADDRESS_SPACE
};
@@ -823,9 +824,13 @@
case PAGE_FAULT_ERROR_KERNEL_ONLY:
out.Print("page fault error: area: %ld, kernel only", fArea);
break;
- case PAGE_FAULT_ERROR_READ_ONLY:
- out.Print("page fault error: area: %ld, read only", fArea);
+ case PAGE_FAULT_ERROR_WRITE_PROTECTED:
+ out.Print("page fault error: area: %ld, write protected",
+ fArea);
break;
+ case PAGE_FAULT_ERROR_READ_PROTECTED:
+ out.Print("page fault error: area: %ld, read protected", fArea);
+ break;
case PAGE_FAULT_ERROR_KERNEL_BAD_USER_MEMORY:
out.Print("page fault error: kernel touching bad user memory");
break;
@@ -4919,12 +4924,20 @@
}
if (isWrite && (protection
& (B_WRITE_AREA | (isUser ? 0 : B_KERNEL_WRITE_AREA))) == 0) {
- dprintf("write access attempted on read-only area 0x%lx at %p\n",
- area->id, (void*)originalAddress);
+ dprintf("write access attempted on write-protected area 0x%lx at"
+ " %p\n", area->id, (void*)originalAddress);
TPF(PageFaultError(area->id,
- VMPageFaultTracing::PAGE_FAULT_ERROR_READ_ONLY));
+ VMPageFaultTracing::PAGE_FAULT_ERROR_WRITE_PROTECTED));
status = B_PERMISSION_DENIED;
break;
+ } else if (!isWrite && (protection
+ & (B_READ_AREA | (isUser ? 0 : B_KERNEL_READ_AREA))) == 0) {
+ dprintf("read access attempted on read-protected area 0x%lx at"
+ " %p\n", area->id, (void*)originalAddress);
+ TPF(PageFaultError(area->id,
+ VMPageFaultTracing::PAGE_FAULT_ERROR_READ_PROTECTED));
+ status = B_PERMISSION_DENIED;
+ break;
}
// We have the area, it was a valid access, so let's try to resolve the
More information about the Haiku-commits
mailing list