* large_memory_physical_page_ops_init(): Don't assign the return value before
it is fully initialized. * arch_vm_translation_map_is_kernel_page_accessible(): Check whether sPhysicalPageMapper has already been initialized. If a panic() during or before the initialization of the physical page mapper occurred, we no longer access a partially initialized object or a NULL pointer. This should fix the triple fault part of #1925. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35644 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
dcd2d7c4a7
commit
4891bed4d2
@ -1446,7 +1446,7 @@ arch_vm_translation_map_is_kernel_page_accessible(addr_t virtualAddress,
|
||||
|
||||
if (physicalPageDirectory == (addr_t)sKernelPhysicalPageDirectory) {
|
||||
pageDirectoryEntry = sKernelVirtualPageDirectory[index];
|
||||
} else {
|
||||
} else if (sPhysicalPageMapper != NULL) {
|
||||
// map the original page directory and get the entry
|
||||
void* handle;
|
||||
addr_t virtualPageDirectory;
|
||||
@ -1459,13 +1459,15 @@ arch_vm_translation_map_is_kernel_page_accessible(addr_t virtualAddress,
|
||||
handle);
|
||||
} else
|
||||
pageDirectoryEntry = 0;
|
||||
}
|
||||
} else
|
||||
pageDirectoryEntry = 0;
|
||||
|
||||
// map the page table and get the entry
|
||||
page_table_entry pageTableEntry;
|
||||
index = VADDR_TO_PTENT(virtualAddress);
|
||||
|
||||
if ((pageDirectoryEntry & X86_PDE_PRESENT) != 0) {
|
||||
if ((pageDirectoryEntry & X86_PDE_PRESENT) != 0
|
||||
&& sPhysicalPageMapper != NULL) {
|
||||
void* handle;
|
||||
addr_t virtualPageTable;
|
||||
status_t error = sPhysicalPageMapper->GetPageDebug(
|
||||
|
@ -918,8 +918,9 @@ large_memory_physical_page_ops_init(kernel_args* args,
|
||||
X86PhysicalPageMapper*& _pageMapper,
|
||||
TranslationMapPhysicalPageMapper*& _kernelPageMapper)
|
||||
{
|
||||
_pageMapper = new(&sPhysicalPageMapper) LargeMemoryPhysicalPageMapper;
|
||||
new(&sPhysicalPageMapper) LargeMemoryPhysicalPageMapper;
|
||||
sPhysicalPageMapper.Init(args, _kernelPageMapper);
|
||||
|
||||
_pageMapper = &sPhysicalPageMapper;
|
||||
return B_OK;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user