diff options
author | "Steven J. Hill" <sjhill@realitydiluted.com> | 2006-01-14 19:22:44 +0000 |
---|---|---|
committer | "Steven J. Hill" <sjhill@realitydiluted.com> | 2006-01-14 19:22:44 +0000 |
commit | 9138bf01b3b21ce23cfdf15fce3f30bb9a1fbc61 (patch) | |
tree | fb0ac2208e1a080dfae3f2ca5f1f90f568bf4165 /libc/sysdeps/linux/common/ssp.c | |
parent | 6e3c1938ff129fb5385a963ec600111aa6228bdc (diff) | |
download | uClibc-alpine-9138bf01b3b21ce23cfdf15fce3f30bb9a1fbc61.tar.bz2 uClibc-alpine-9138bf01b3b21ce23cfdf15fce3f30bb9a1fbc61.tar.xz |
Merge from trunk.
Diffstat (limited to 'libc/sysdeps/linux/common/ssp.c')
-rw-r--r-- | libc/sysdeps/linux/common/ssp.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/libc/sysdeps/linux/common/ssp.c b/libc/sysdeps/linux/common/ssp.c index 05e53c29d..9efcd1a89 100644 --- a/libc/sysdeps/linux/common/ssp.c +++ b/libc/sysdeps/linux/common/ssp.c @@ -39,7 +39,7 @@ #include <signal.h> #include <sys/syslog.h> -static __always_inline void block_signals(void) +static void block_signals(void) { struct sigaction sa; sigset_t mask; @@ -57,7 +57,7 @@ static __always_inline void block_signals(void) sigaction(SSP_SIGTYPE, &sa, NULL); } -static __always_inline void ssp_write(int fd, const char *msg1, const char *msg2, const char *msg3) +static void ssp_write(int fd, const char *msg1, const char *msg2, const char *msg3) { __write(fd, msg1, __strlen(msg1)); __write(fd, msg2, __strlen(msg2)); @@ -68,52 +68,50 @@ static __always_inline void ssp_write(int fd, const char *msg1, const char *msg2 closelog(); } -static __always_inline attribute_noreturn void terminate(void) +static attribute_noreturn void terminate(void) { (void) kill(__getpid(), SSP_SIGTYPE); - _exit(127); + _exit_internal(127); } void attribute_noreturn __stack_smash_handler(char func[], int damaged __attribute__ ((unused))); void attribute_noreturn __stack_smash_handler(char func[], int damaged) { - extern char *__progname; static const char message[] = ": stack smashing attack in function "; block_signals(); - ssp_write(STDERR_FILENO, __progname, message, func); + ssp_write(STDERR_FILENO, __uclibc_progname, message, func); /* The loop is added only to keep gcc happy. */ while(1) terminate(); } -void attribute_noreturn __stack_chk_fail(void) +void attribute_noreturn attribute_hidden __stack_chk_fail_internal(void) { - extern char *__progname; static const char msg1[] = "stack smashing detected: "; static const char msg3[] = " terminated"; block_signals(); - ssp_write(STDERR_FILENO, msg1, __progname, msg3); + ssp_write(STDERR_FILENO, msg1, __uclibc_progname, msg3); /* The loop is added only to keep gcc happy. */ while(1) terminate(); } +strong_alias(__stack_chk_fail_internal,__stack_chk_fail) #if 0 void attribute_noreturn __chk_fail(void) { - extern char *__progname; static const char msg1[] = "buffer overflow detected: "; static const char msg3[] = " terminated"; block_signals(); - ssp_write(STDERR_FILENO, msg1, __progname, msg3); + ssp_write(STDERR_FILENO, msg1, __uclibc_progname, msg3); /* The loop is added only to keep gcc happy. */ while(1) |