From 0d2d41dcdac5a269c2f473d238fcc93c5026f242 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Mon, 29 Dec 2025 14:52:04 +0100 Subject: [PATCH] Introduce page fault handling infrastructure --- xtoskrnl/CMakeLists.txt | 1 + xtoskrnl/includes/mm.hh | 1 + xtoskrnl/includes/mm/pfault.hh | 25 +++++++++++++++++++++++ xtoskrnl/mm/amd64/pfault.cc | 26 ++++++++++++++++++++++++ xtoskrnl/mm/i686/pfault.cc | 36 ++++++++++++++++++++++++++++++++++ 5 files changed, 89 insertions(+) create mode 100644 xtoskrnl/includes/mm/pfault.hh create mode 100644 xtoskrnl/mm/amd64/pfault.cc create mode 100644 xtoskrnl/mm/i686/pfault.cc diff --git a/xtoskrnl/CMakeLists.txt b/xtoskrnl/CMakeLists.txt index e879b97..bd31b8e 100644 --- a/xtoskrnl/CMakeLists.txt +++ b/xtoskrnl/CMakeLists.txt @@ -54,6 +54,7 @@ list(APPEND XTOSKRNL_SOURCE ${XTOSKRNL_SOURCE_DIR}/mm/${ARCH}/mmgr.cc ${XTOSKRNL_SOURCE_DIR}/mm/${ARCH}/pagemap.cc ${XTOSKRNL_SOURCE_DIR}/mm/${ARCH}/paging.cc + ${XTOSKRNL_SOURCE_DIR}/mm/${ARCH}/pfault.cc ${XTOSKRNL_SOURCE_DIR}/mm/${ARCH}/pfn.cc ${XTOSKRNL_SOURCE_DIR}/mm/${ARCH}/pte.cc ${XTOSKRNL_SOURCE_DIR}/mm/colors.cc diff --git a/xtoskrnl/includes/mm.hh b/xtoskrnl/includes/mm.hh index b34863d..5c2e568 100644 --- a/xtoskrnl/includes/mm.hh +++ b/xtoskrnl/includes/mm.hh @@ -19,6 +19,7 @@ #include #include #include +#include #include #endif /* __XTOSKRNL_MM_HH */ diff --git a/xtoskrnl/includes/mm/pfault.hh b/xtoskrnl/includes/mm/pfault.hh new file mode 100644 index 0000000..30e2e49 --- /dev/null +++ b/xtoskrnl/includes/mm/pfault.hh @@ -0,0 +1,25 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/includes/mm/pfault.hh + * DESCRIPTION: Page fault support + * DEVELOPERS: Aiken Harris + */ + +#ifndef __XTOSKRNL_MM_PFAULT_HH +#define __XTOSKRNL_MM_PFAULT_HH + +#include + + +/* Memory Manager */ +namespace MM +{ + class PageFault + { + public: + STATIC XTFASTCALL XTSTATUS CheckPdeForPagedPool(IN PVOID VirtualAddress); + }; +} + +#endif /* __XTOSKRNL_MM_PFAULT_HH */ diff --git a/xtoskrnl/mm/amd64/pfault.cc b/xtoskrnl/mm/amd64/pfault.cc new file mode 100644 index 0000000..a3d5b9d --- /dev/null +++ b/xtoskrnl/mm/amd64/pfault.cc @@ -0,0 +1,26 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/mm/amd64/pfault.cc + * DESCRIPTION: Page fault support for AMD64 architecture + * DEVELOPERS: Aiken Harris + */ + +#include + + +/** + * Evaluates the PDE for for paged pool and per-session mappings. + * + * @param VirtualAddress + * Specifies the virtual address to verify. + * + * @return This routine returns ACCESS_VIOLATION regardless PML4 or PML5 is used. + */ +XTFASTCALL +XTSTATUS +MM::PageFault::CheckPdeForPagedPool(IN PVOID VirtualAddress) +{ + /* Return access violation */ + return STATUS_ACCESS_VIOLATION; +} diff --git a/xtoskrnl/mm/i686/pfault.cc b/xtoskrnl/mm/i686/pfault.cc new file mode 100644 index 0000000..3b6a8e6 --- /dev/null +++ b/xtoskrnl/mm/i686/pfault.cc @@ -0,0 +1,36 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/mm/i686/pfault.cc + * DESCRIPTION: Page fault support for i686 architecture + * DEVELOPERS: Aiken Harris + */ + +#include + + +/** + * Evaluates the PDE for for paged pool and per-session mappings. + * + * @param VirtualAddress + * Specifies the virtual address to verify. + * + * @return This routine returns ACCESS_VIOLATION on PML3 or status code on PML2. + */ +XTFASTCALL +XTSTATUS +MM::PageFault::CheckPdeForPagedPool(IN PVOID VirtualAddress) +{ + /* Check if XPA is enabled */ + if(MM::Paging::GetXpaStatus()) + { + /* Access violation for PML3 */ + return STATUS_ACCESS_VIOLATION; + } + + /* Unimplemented path for PML2 */ + UNIMPLEMENTED; + + /* Temporarily, just return access violation */ + return STATUS_ACCESS_VIOLATION; +}