1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 05:38:11 +00:00

Build + LibC: Enable -fstack-protector-strong in user space

Modify the user mode runtime to insert stack canaries to find stack corruptions.

The `-fstack-protector-strong` variant was chosen because it catches more
issues than vanilla `-fstack-protector`, but doesn't have substantial
performance impact like `-fstack-protector-all`.

Details:

    -fstack-protector enables stack protection for vulnerable functions that contain:

    * A character array larger than 8 bytes.
    * An 8-bit integer array larger than 8 bytes.
    * A call to alloca() with either a variable size or a constant size bigger than 8 bytes.

    -fstack-protector-strong enables stack protection for vulnerable functions that contain:

    * An array of any size and type.
    * A call to alloca().
    * A local variable that has its address taken.

Example of it catching corrupting in the `stack-smash` test:
```
courage ~ $ ./user/Tests/LibC/stack-smash
[+] Starting the stack smash ...
Error: Stack protector failure, stack smashing detected!
Shell: Job 1 (/usr/Tests/LibC/stack-smash) Aborted
```
This commit is contained in:
Brian Gianforcaro 2021-01-01 15:27:42 -08:00 committed by Andreas Kling
parent bf3772362a
commit 06da50afc7
7 changed files with 124 additions and 13 deletions

View file

@ -24,7 +24,6 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <AK/Types.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
@ -87,11 +86,4 @@ void __cxa_finalize(void* dso_handle)
ASSERT_NOT_REACHED();
}
extern u32 __stack_chk_guard;
u32 __stack_chk_guard = (u32)0xc6c7c8c9;
[[noreturn]] void __stack_chk_fail()
{
ASSERT_NOT_REACHED();
}
} // extern "C"