Explorar o código

memory: Return false for large VAddr in IsValidVirtualAddress

Rozlette %!s(int64=8) %!d(string=hai) anos
pai
achega
de7aa3106a
Modificáronse 1 ficheiros con 3 adicións e 0 borrados
  1. 3 0
      src/core/memory.cpp

+ 3 - 0
src/core/memory.cpp

@@ -219,6 +219,9 @@ void Write(const VAddr vaddr, const T data) {
 bool IsValidVirtualAddress(const Kernel::Process& process, const VAddr vaddr) {
 bool IsValidVirtualAddress(const Kernel::Process& process, const VAddr vaddr) {
     auto& page_table = process.vm_manager.page_table;
     auto& page_table = process.vm_manager.page_table;
 
 
+    if ((vaddr >> PAGE_BITS) >= PAGE_TABLE_NUM_ENTRIES)
+        return false;
+
     const u8* page_pointer = page_table.pointers[vaddr >> PAGE_BITS];
     const u8* page_pointer = page_table.pointers[vaddr >> PAGE_BITS];
     if (page_pointer)
     if (page_pointer)
         return true;
         return true;