| /** @file | |
| This library provides stack cookie checking functions for symbols inserted by the compiler. This header | |
| is not intended to be used directly by modules, but rather defines the expected interfaces to each supported | |
| compiler, so that if the compiler interface is updated it is easier to track. | |
| Copyright (c) Microsoft Corporation. | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef STACK_CHECK_LIB_H_ | |
| #define STACK_CHECK_LIB_H_ | |
| #include <Base.h> | |
| #if defined (__GNUC__) || defined (__clang__) | |
| // The __stack_chk_guard 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. | |
| extern VOID *__stack_chk_guard; | |
| /** | |
| Called when a stack cookie check fails. The return address is the failing address. | |
| **/ | |
| VOID | |
| EFIAPI | |
| __stack_chk_fail ( | |
| VOID | |
| ); | |
| #elif defined (_MSC_VER) | |
| // The __security_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. | |
| extern VOID *__security_cookie; | |
| /** | |
| Called when a buffer check fails. This functionality is dependent on MSVC | |
| C runtime libraries and so is unsupported in UEFI. | |
| **/ | |
| VOID | |
| EFIAPI | |
| __report_rangecheckfailure ( | |
| VOID | |
| ); | |
| /** | |
| The GS handler is for checking the stack cookie during SEH or | |
| EH exceptions and is unsupported in UEFI. | |
| **/ | |
| VOID | |
| EFIAPI | |
| __GSHandlerCheck ( | |
| VOID | |
| ); | |
| /** | |
| Checks the stack cookie value against __security_cookie and calls the | |
| stack cookie failure handler if there is a mismatch. | |
| @param UINTN CheckValue The value to check against __security_cookie | |
| **/ | |
| VOID | |
| EFIAPI | |
| __security_check_cookie ( | |
| UINTN CheckValue | |
| ); | |
| #endif // Compiler type | |
| #endif // STACK_CHECK_LIB_H_ |