From 4ce0a650d1931ad6f7f5f46c7e73a883821fd2b0 Mon Sep 17 00:00:00 2001 From: Andrew Strelsky Date: Wed, 29 Sep 2021 07:54:59 -0400 Subject: prevent access violation from iob in Memory::IsValidVirtualAddress --- src/core/memory.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 51c4dea26..88d6ec908 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -587,7 +587,11 @@ void Memory::UnmapRegion(Common::PageTable& page_table, VAddr base, u64 size) { bool Memory::IsValidVirtualAddress(const VAddr vaddr) const { const Kernel::KProcess& process = *system.CurrentProcess(); const auto& page_table = process.PageTable().PageTableImpl(); - const auto [pointer, type] = page_table.pointers[vaddr >> PAGE_BITS].PointerType(); + const size_t page = vaddr >> PAGE_BITS; + if (page >= page_table.pointers.size()) { + return false; + } + const auto [pointer, type] = page_table.pointers[page].PointerType(); return pointer != nullptr || type == Common::PageType::RasterizerCachedMemory; } -- cgit v1.2.3