diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index eaec04e787..5e202ef373 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -44,7 +44,6 @@ #include #include #include -#include //#define DEBUG_POLL_SELECT //#define DEBUG_IO @@ -2040,43 +2039,12 @@ pid_t Process::sys$waitpid(pid_t waitee, int* wstatus, int options) return waitee_pid; } -enum class KernelMemoryCheckResult { - NotInsideKernelMemory, - AccessGranted, - AccessDenied -}; - -static KernelMemoryCheckResult check_kernel_memory_access(VirtualAddress vaddr, bool is_write) -{ - auto& sections = multiboot_info_ptr->u.elf_sec; - - auto* kernel_program_headers = (Elf32_Phdr*)(sections.addr); - for (unsigned i = 0; i < sections.num; ++i) { - auto& segment = kernel_program_headers[i]; - if (segment.p_type != PT_LOAD || !segment.p_vaddr || !segment.p_memsz) - continue; - if (vaddr.get() < segment.p_vaddr || vaddr.get() > (segment.p_vaddr + segment.p_memsz)) - continue; - if (is_write && !(kernel_program_headers[i].p_flags & PF_W)) - return KernelMemoryCheckResult::AccessDenied; - if (!is_write && !(kernel_program_headers[i].p_flags & PF_R)) - return KernelMemoryCheckResult::AccessDenied; - return KernelMemoryCheckResult::AccessGranted; - } - return KernelMemoryCheckResult::NotInsideKernelMemory; -} - bool Process::validate_read_from_kernel(VirtualAddress vaddr, ssize_t size) const { if (vaddr.is_null()) return false; // We check extra carefully here since the first 4MB of the address space is identity-mapped. // This code allows access outside of the known used address ranges to get caught. - auto kmc_result = check_kernel_memory_access(vaddr, false); - if (kmc_result == KernelMemoryCheckResult::AccessGranted) - return true; - if (kmc_result == KernelMemoryCheckResult::AccessDenied) - return false; if (is_kmalloc_address(vaddr.as_ptr())) return true; return MM.validate_kernel_read(*this, vaddr, size); @@ -2094,11 +2062,6 @@ bool Process::validate_read(const void* address, ssize_t size) const ASSERT(size >= 0); VirtualAddress first_address((u32)address); if (is_ring0()) { - auto kmc_result = check_kernel_memory_access(first_address, false); - if (kmc_result == KernelMemoryCheckResult::AccessGranted) - return true; - if (kmc_result == KernelMemoryCheckResult::AccessDenied) - return false; if (is_kmalloc_address(address)) return true; } @@ -2114,11 +2077,6 @@ bool Process::validate_write(void* address, ssize_t size) const if (is_ring0()) { if (is_kmalloc_address(address)) return true; - auto kmc_result = check_kernel_memory_access(first_address, true); - if (kmc_result == KernelMemoryCheckResult::AccessGranted) - return true; - if (kmc_result == KernelMemoryCheckResult::AccessDenied) - return false; } if (!size) return false;