summaryrefslogtreecommitdiffstats
path: root/MdePkg/Library/StackCheckLib/AArch64/StackCookieInterrupt.S
diff options
context:
space:
mode:
authorTaylor Beebe <taylor.d.beebe@gmail.com>2024-08-27 14:34:35 -0700
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2024-09-13 03:58:46 +0000
commit5000568969995293b529f49ea43726e2d0a9dcab (patch)
tree846b74d6008791b58f9f7acd99d8b0cd38f407f2 /MdePkg/Library/StackCheckLib/AArch64/StackCookieInterrupt.S
parentac43bbacdef18a6fea6d978e096326ec0805885d (diff)
downloadedk2-5000568969995293b529f49ea43726e2d0a9dcab.tar.gz
edk2-5000568969995293b529f49ea43726e2d0a9dcab.tar.bz2
edk2-5000568969995293b529f49ea43726e2d0a9dcab.zip
MdePkg: Create Stack Check Lib
StackCheckLib contains the required functionality for initializing the stack cookie value, checking the value, and triggering an interrupt when a mismatch occurs. The stack cookie is a random value placed on the stack between the stack variables and the return address so that continuously writing past the stack variables will cause the stack cookie to be overwritten. Before the function returns, the stack cookie value will be checked and if there is a mismatch then StackCheckLib handles the failure. Because UEFI doesn't use the C runtime libraries provided by MSVC, the stack check code is written in assembly within this library. GCC and Clang compilers have built-in support for stack cookie checking, so this library only handles failures. Signed-off-by: Oliver Smith-Denny <osde@linux.microsoft.com>
Diffstat (limited to 'MdePkg/Library/StackCheckLib/AArch64/StackCookieInterrupt.S')
-rw-r--r--MdePkg/Library/StackCheckLib/AArch64/StackCookieInterrupt.S21
1 files changed, 21 insertions, 0 deletions
diff --git a/MdePkg/Library/StackCheckLib/AArch64/StackCookieInterrupt.S b/MdePkg/Library/StackCheckLib/AArch64/StackCookieInterrupt.S
new file mode 100644
index 0000000000..bce13643e3
--- /dev/null
+++ b/MdePkg/Library/StackCheckLib/AArch64/StackCookieInterrupt.S
@@ -0,0 +1,21 @@
+//------------------------------------------------------------------------------
+// AArch64/StackCookieInterrupt.S
+//
+// Copyright (c) Microsoft Corporation.
+// SPDX-License-Identifier: BSD-2-Clause-Patent
+//------------------------------------------------------------------------------
+
+ .text
+
+//------------------------------------------------------------------------------
+// Calls an interrupt using the vector specified by PcdStackCookieExceptionVector
+//
+// VOID
+// TriggerStackCookieInterrupt (
+// VOID
+// );
+//------------------------------------------------------------------------------
+.global ASM_PFX(TriggerStackCookieInterrupt)
+ASM_PFX(TriggerStackCookieInterrupt):
+ svc FixedPcdGet8 (PcdStackCookieExceptionVector)
+ ret