diff options
| author | Warner Losh <imp@FreeBSD.org> | 2024-11-30 19:36:15 +0000 |
|---|---|---|
| committer | Warner Losh <imp@FreeBSD.org> | 2024-11-30 19:38:23 +0000 |
| commit | 5d8674f2bdd536124b1dd026dfa729a1376b3cac (patch) | |
| tree | ade665e8d0ce42d3068d4b00dae9171f47f3cd06 /MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c | |
| parent | 4a14dfcc1110b35118d5be8054fecf59ffb83032 (diff) | |
Diffstat (limited to 'MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c')
| -rw-r--r-- | MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c | 38 |
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 (); +} |
