diff --git a/Kernel/Arch/SmapDisabler.h b/Kernel/Arch/SmapDisabler.h new file mode 100644 index 0000000000..319f24b7f8 --- /dev/null +++ b/Kernel/Arch/SmapDisabler.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2018-2021, Andreas Kling + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace Kernel { + +class SmapDisabler { +public: + SmapDisabler(); + ~SmapDisabler(); + +private: + const FlatPtr m_flags; +}; + +} diff --git a/Kernel/Arch/aarch64/SmapDisabler.cpp b/Kernel/Arch/aarch64/SmapDisabler.cpp new file mode 100644 index 0000000000..80c8e93503 --- /dev/null +++ b/Kernel/Arch/aarch64/SmapDisabler.cpp @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2018-2021, Andreas Kling + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +namespace Kernel { + +SmapDisabler::SmapDisabler() + : m_flags(0) +{ +} + +SmapDisabler::~SmapDisabler() +{ +} + +} diff --git a/Kernel/Arch/x86/SmapDisabler.cpp b/Kernel/Arch/x86/SmapDisabler.cpp new file mode 100644 index 0000000000..1adf3154ed --- /dev/null +++ b/Kernel/Arch/x86/SmapDisabler.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2018-2021, Andreas Kling + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +#include + +namespace Kernel { + +SmapDisabler::SmapDisabler() + : m_flags(cpu_flags()) +{ + stac(); +} + +SmapDisabler::~SmapDisabler() +{ + if (!(m_flags & 0x40000)) + clac(); +} + +} diff --git a/Kernel/Arch/x86/SmapDisabler.h b/Kernel/Arch/x86/SmapDisabler.h deleted file mode 100644 index 8dcbac6475..0000000000 --- a/Kernel/Arch/x86/SmapDisabler.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2018-2021, Andreas Kling - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include - -namespace Kernel { - -class SmapDisabler { -public: - ALWAYS_INLINE SmapDisabler() - : m_flags(cpu_flags()) - { - stac(); - } - - ALWAYS_INLINE ~SmapDisabler() - { - if (!(m_flags & 0x40000)) - clac(); - } - -private: - const FlatPtr m_flags; -}; - -} diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index fc31dffc6b..26f16c433a 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -20,7 +20,6 @@ set(KERNEL_HEAP_SOURCES set(KERNEL_SOURCES AddressSanitizer.cpp - Arch/x86/SmapDisabler.h Bus/PCI/Access.cpp Bus/PCI/API.cpp Bus/PCI/Device.cpp @@ -291,6 +290,7 @@ if ("${SERENITY_ARCH}" STREQUAL "i686" OR "${SERENITY_ARCH}" STREQUAL "x86_64") set(KERNEL_SOURCES ${KERNEL_SOURCES} Arch/x86/ScopedCritical.cpp + Arch/x86/SmapDisabler.cpp ) set(KERNEL_SOURCES @@ -369,6 +369,7 @@ else() ${AK_SOURCES} Arch/aarch64/dummy.cpp + Arch/aarch64/SmapDisabler.cpp Arch/aarch64/ScopedCritical.cpp UBSanitizer.cpp diff --git a/Kernel/KSyms.cpp b/Kernel/KSyms.cpp index cbd098071d..d199e78b03 100644 --- a/Kernel/KSyms.cpp +++ b/Kernel/KSyms.cpp @@ -5,7 +5,7 @@ */ #include -#include +#include #include #include #include diff --git a/Kernel/Memory/AnonymousVMObject.cpp b/Kernel/Memory/AnonymousVMObject.cpp index 1857daeb04..582f3192ee 100644 --- a/Kernel/Memory/AnonymousVMObject.cpp +++ b/Kernel/Memory/AnonymousVMObject.cpp @@ -4,7 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include +#include #include #include #include diff --git a/Kernel/PerformanceEventBuffer.cpp b/Kernel/PerformanceEventBuffer.cpp index 89c6fd34b7..576a27b809 100644 --- a/Kernel/PerformanceEventBuffer.cpp +++ b/Kernel/PerformanceEventBuffer.cpp @@ -7,8 +7,8 @@ #include #include #include +#include #include -#include #include #include #include diff --git a/Kernel/StdLib.cpp b/Kernel/StdLib.cpp index edfe4bfc5a..aebd148070 100644 --- a/Kernel/StdLib.cpp +++ b/Kernel/StdLib.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Kernel/Syscalls/mmap.cpp b/Kernel/Syscalls/mmap.cpp index f1699cc2b2..5d6b757699 100644 --- a/Kernel/Syscalls/mmap.cpp +++ b/Kernel/Syscalls/mmap.cpp @@ -5,8 +5,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include -#include #include #include #include diff --git a/Kernel/Syscalls/sigaction.cpp b/Kernel/Syscalls/sigaction.cpp index 8c0537b592..4a7fe5dbf4 100644 --- a/Kernel/Syscalls/sigaction.cpp +++ b/Kernel/Syscalls/sigaction.cpp @@ -4,8 +4,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include -#include #include namespace Kernel { diff --git a/Kernel/Thread.cpp b/Kernel/Thread.cpp index 0a4adbe1b0..059914338a 100644 --- a/Kernel/Thread.cpp +++ b/Kernel/Thread.cpp @@ -8,8 +8,8 @@ #include #include #include +#include #include -#include #include #include #include