From 0fbeac6011731d16069aed80fe6602992282cfe6 Mon Sep 17 00:00:00 2001 From: James Mintram Date: Thu, 14 Oct 2021 22:53:48 +0100 Subject: [PATCH] Kernel: Split SmapDisabler so header is platform independent A new header file has been created in the Arch/ folder while the implementation has been moved into a CPP living in the X86 folder. --- Kernel/Arch/SmapDisabler.h | 22 ++++++++++++++++++++ Kernel/Arch/aarch64/SmapDisabler.cpp | 20 ++++++++++++++++++ Kernel/Arch/x86/SmapDisabler.cpp | 25 ++++++++++++++++++++++ Kernel/Arch/x86/SmapDisabler.h | 31 ---------------------------- Kernel/CMakeLists.txt | 3 ++- Kernel/KSyms.cpp | 2 +- Kernel/Memory/AnonymousVMObject.cpp | 2 +- Kernel/PerformanceEventBuffer.cpp | 2 +- Kernel/StdLib.cpp | 2 +- Kernel/Syscalls/mmap.cpp | 2 +- Kernel/Syscalls/sigaction.cpp | 2 +- Kernel/Thread.cpp | 2 +- 12 files changed, 76 insertions(+), 39 deletions(-) create mode 100644 Kernel/Arch/SmapDisabler.h create mode 100644 Kernel/Arch/aarch64/SmapDisabler.cpp create mode 100644 Kernel/Arch/x86/SmapDisabler.cpp delete mode 100644 Kernel/Arch/x86/SmapDisabler.h 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