X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/23e20b0053d7317ce3facd3fd38db8c73c2c380a..refs/heads/master:/sys/OpenBSD/stack_protector.c diff --git a/sys/OpenBSD/stack_protector.c b/sys/OpenBSD/stack_protector.c index 988d8ed..7ac7c7b 100644 --- a/sys/OpenBSD/stack_protector.c +++ b/sys/OpenBSD/stack_protector.c @@ -31,17 +31,20 @@ #include #include #include -#include #include #include #include +#if __has_include() #include +#else +#define CRSetCrashLogMessage(...) +#endif #include "libproc.h" #include "_simple.h" #define GUARD_MAX 8 long __stack_chk_guard[GUARD_MAX] = {0, 0, 0, 0, 0, 0, 0, 0}; -void __abort(void) __dead2; +void __abort(void) __cold __dead2; void __guard_setup(const char *apple[]) __attribute__ ((visibility ("hidden"))); void __stack_chk_fail(void); @@ -112,30 +115,18 @@ __guard_setup(const char *apple[]) ((unsigned char *)__stack_chk_guard)[3] = 255; } -#define STACKOVERFLOW "] stack overflow" +static const char *stackoverflow_msg = "stack buffer overflow"; void __stack_chk_fail() { - char n[16]; // bigger than will hold the digits in a pid_t - char *np; - int pid = getpid(); - char message[sizeof(n) + sizeof(STACKOVERFLOW)] = "["; - char prog[2*MAXCOMLEN+1] = {0}; + CRSetCrashLogMessage(stackoverflow_msg); - proc_name(pid, prog, 2*MAXCOMLEN); - prog[2*MAXCOMLEN] = 0; - np = n + sizeof(n); - *--np = 0; - while(pid > 0) { - *--np = (pid % 10) + '0'; - pid /= 10; - } - strlcat(message, np, sizeof(message)); - strlcat(message, STACKOVERFLOW, sizeof(message)); /* This may fail on a chroot jail... */ - _simple_asl_log_prog(ASL_LEVEL_CRIT, "user", message, prog); + char prog[2*MAXCOMLEN+1] = {0}; + proc_name(getpid(), prog, 2*MAXCOMLEN); + prog[2*MAXCOMLEN] = 0; + _simple_asl_log_prog(ASL_LEVEL_CRIT, "user", stackoverflow_msg, prog); - CRSetCrashLogMessage(message); __abort(); }