Also check for read-protection of an area. Adjusted naming from read-only to
write-protected and read-protected. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33031 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
0f4242de40
commit
3794518c2d
@ -798,7 +798,8 @@ private:
|
|||||||
enum {
|
enum {
|
||||||
PAGE_FAULT_ERROR_NO_AREA = 0,
|
PAGE_FAULT_ERROR_NO_AREA = 0,
|
||||||
PAGE_FAULT_ERROR_KERNEL_ONLY,
|
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_KERNEL_BAD_USER_MEMORY,
|
||||||
PAGE_FAULT_ERROR_NO_ADDRESS_SPACE
|
PAGE_FAULT_ERROR_NO_ADDRESS_SPACE
|
||||||
};
|
};
|
||||||
@ -823,8 +824,12 @@ public:
|
|||||||
case PAGE_FAULT_ERROR_KERNEL_ONLY:
|
case PAGE_FAULT_ERROR_KERNEL_ONLY:
|
||||||
out.Print("page fault error: area: %ld, kernel only", fArea);
|
out.Print("page fault error: area: %ld, kernel only", fArea);
|
||||||
break;
|
break;
|
||||||
case PAGE_FAULT_ERROR_READ_ONLY:
|
case PAGE_FAULT_ERROR_WRITE_PROTECTED:
|
||||||
out.Print("page fault error: area: %ld, read only", fArea);
|
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;
|
break;
|
||||||
case PAGE_FAULT_ERROR_KERNEL_BAD_USER_MEMORY:
|
case PAGE_FAULT_ERROR_KERNEL_BAD_USER_MEMORY:
|
||||||
out.Print("page fault error: kernel touching bad user memory");
|
out.Print("page fault error: kernel touching bad user memory");
|
||||||
@ -4919,10 +4924,18 @@ vm_soft_fault(vm_address_space* addressSpace, addr_t originalAddress,
|
|||||||
}
|
}
|
||||||
if (isWrite && (protection
|
if (isWrite && (protection
|
||||||
& (B_WRITE_AREA | (isUser ? 0 : B_KERNEL_WRITE_AREA))) == 0) {
|
& (B_WRITE_AREA | (isUser ? 0 : B_KERNEL_WRITE_AREA))) == 0) {
|
||||||
dprintf("write access attempted on read-only area 0x%lx at %p\n",
|
dprintf("write access attempted on write-protected area 0x%lx at"
|
||||||
area->id, (void*)originalAddress);
|
" %p\n", area->id, (void*)originalAddress);
|
||||||
TPF(PageFaultError(area->id,
|
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;
|
status = B_PERMISSION_DENIED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user