diff options
Diffstat (limited to 'debug')
-rw-r--r-- | debug/Makefile | 4 | ||||
-rw-r--r-- | debug/Versions | 2 | ||||
-rw-r--r-- | debug/stack_chk_fail.c | 33 | ||||
-rw-r--r-- | debug/stack_chk_fail_local.c | 30 |
4 files changed, 67 insertions, 2 deletions
diff --git a/debug/Makefile b/debug/Makefile index 42e64ad16f..6ec08dc94a 100644 --- a/debug/Makefile +++ b/debug/Makefile @@ -31,9 +31,9 @@ routines = backtrace backtracesyms backtracesymsfd noophooks \ printf_chk fprintf_chk vprintf_chk vfprintf_chk \ gets_chk chk_fail readonly-area fgets_chk fgets_u_chk \ read_chk pread_chk pread64_chk recv_chk recvfrom_chk \ - readlink_chk getwd_chk getcwd_chk \ + readlink_chk getwd_chk getcwd_chk stack_chk_fail \ $(static-only-routines) -static-only-routines := warning-nop +static-only-routines := warning-nop stack_chk_fail_local CFLAGS-backtrace.c = -fno-omit-frame-pointer CFLAGS-sprintf_chk.c = -D_IO_MTSAFE_IO diff --git a/debug/Versions b/debug/Versions index fd97834171..051f4df000 100644 --- a/debug/Versions +++ b/debug/Versions @@ -23,5 +23,7 @@ libc { __read_chk; __pread_chk; __pread64_chk; __readlink_chk; __getcwd_chk; __getwd_chk; __recv_chk; __recvfrom_chk; + + __stack_chk_fail; } } diff --git a/debug/stack_chk_fail.c b/debug/stack_chk_fail.c new file mode 100644 index 0000000000..298b323671 --- /dev/null +++ b/debug/stack_chk_fail.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <stdio.h> +#include <stdlib.h> + + +extern char **__libc_argv attribute_hidden; + +void +__attribute__ ((noreturn)) +__stack_chk_fail (void) +{ + /* The loop is added only to keep gcc happy. */ + while (1) + __libc_message (1, "*** stack smashing detected ***: %s terminated\n", + __libc_argv[0] ?: "<unknown>"); +} diff --git a/debug/stack_chk_fail_local.c b/debug/stack_chk_fail_local.c new file mode 100644 index 0000000000..de0de8f397 --- /dev/null +++ b/debug/stack_chk_fail_local.c @@ -0,0 +1,30 @@ +/* Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <sys/cdefs.h> + +extern void __stack_chk_fail (void) __attribute__ ((noreturn)); + +/* On some architectures, this helps needless PIC pointer setup + that would be needed just for the __stack_chk_fail call. */ + +void __attribute__ ((noreturn)) attribute_hidden +__stack_chk_fail_local (void) +{ + __stack_chk_fail (); +} |