summaryrefslogtreecommitdiff
path: root/MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2024-11-30 19:36:15 +0000
committerWarner Losh <imp@FreeBSD.org>2024-11-30 19:38:23 +0000
commit5d8674f2bdd536124b1dd026dfa729a1376b3cac (patch)
treeade665e8d0ce42d3068d4b00dae9171f47f3cd06 /MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c
parent4a14dfcc1110b35118d5be8054fecf59ffb83032 (diff)
Diffstat (limited to 'MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c')
-rw-r--r--MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c b/MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c
new file mode 100644
index 000000000000..996d1e6d732f
--- /dev/null
+++ b/MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c
@@ -0,0 +1,38 @@
+/** @file
+ Provides the required functionality for handling stack
+ cookie check failures in GCC.
+
+ Copyright (c) Microsoft Corporation.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+
+#include <Library/DebugLib.h>
+#include <Library/BaseLib.h>
+#include <Library/StackCheckFailureHookLib.h>
+
+/**
+ Triggers an interrupt using the vector specified by PcdStackCookieExceptionVector
+**/
+VOID
+TriggerStackCookieInterrupt (
+ VOID
+ );
+
+VOID *__stack_chk_guard = (VOID *)(UINTN)STACK_COOKIE_VALUE;
+
+/**
+ This function gets called when a gcc/clang generated stack cookie fails. This implementation calls into a platform
+ failure hook lib and then triggers the stack cookie interrupt.
+
+**/
+VOID
+__stack_chk_fail (
+ VOID
+ )
+{
+ DEBUG ((DEBUG_ERROR, "Stack cookie check failed at address 0x%llx!\n", RETURN_ADDRESS (0)));
+ StackCheckFailureHook (RETURN_ADDRESS (0));
+ TriggerStackCookieInterrupt ();
+}