From 1b0bfc6946b460bcebe9db19a015f2cac711f7f5 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Sun, 13 Aug 2017 21:10:44 +0200 Subject: [PATCH] __fortify_fail: Remove internal_function attribute __fortify_fail is called across DSO boundaries, so it should not use a non-standard calling convention. --- ChangeLog | 10 ++++++++++ debug/fortify_fail.c | 4 ++-- include/stdio.h | 5 ++--- sysdeps/mach/hurd/i386/____longjmp_chk.S | 2 ++ sysdeps/unix/sysv/linux/i386/____longjmp_chk.S | 2 ++ 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4b64396..3ad08f3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2017-08-13 Florian Weimer + + * debug/fortify_fail.c (__fortify_fail, __fortify_fail_abort): + Remove internal_function. + * include/stdio.h (__fortify_fail, __fortify_fail_abort): Likewise. + * sysdeps/mach/hurd/i386/____longjmp_chk.S (CALL_FAIL): Pass + message argument on the stack. + * sysdeps/unix/sysv/linux/i386/____longjmp_chk.S (CALL_FAIL): + Likeweise. + 2017-08-12 Mike FABIAN Adapt test case data to the changes in the thousands diff --git a/debug/fortify_fail.c b/debug/fortify_fail.c index a0777ae..add5625 100644 --- a/debug/fortify_fail.c +++ b/debug/fortify_fail.c @@ -23,7 +23,7 @@ extern char **__libc_argv attribute_hidden; void -__attribute__ ((noreturn)) internal_function +__attribute__ ((noreturn)) __fortify_fail_abort (_Bool need_backtrace, const char *msg) { /* The loop is added only to keep gcc happy. Don't pass down @@ -38,7 +38,7 @@ __fortify_fail_abort (_Bool need_backtrace, const char *msg) } void -__attribute__ ((noreturn)) internal_function +__attribute__ ((noreturn)) __fortify_fail (const char *msg) { __fortify_fail_abort (true, msg); diff --git a/include/stdio.h b/include/stdio.h index 215f919..509447c 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -98,10 +98,9 @@ extern void __libc_fatal (const char *__message) __attribute__ ((__noreturn__)); extern void __libc_message (enum __libc_message_action action, const char *__fnt, ...); -extern void __fortify_fail (const char *msg) - __attribute__ ((__noreturn__)) internal_function; +extern void __fortify_fail (const char *msg) __attribute__ ((__noreturn__)); extern void __fortify_fail_abort (_Bool, const char *msg) - __attribute__ ((__noreturn__)) internal_function; + __attribute__ ((__noreturn__)); libc_hidden_proto (__fortify_fail) libc_hidden_proto (__fortify_fail_abort) diff --git a/sysdeps/mach/hurd/i386/____longjmp_chk.S b/sysdeps/mach/hurd/i386/____longjmp_chk.S index ac28c94..e7c9882 100644 --- a/sysdeps/mach/hurd/i386/____longjmp_chk.S +++ b/sysdeps/mach/hurd/i386/____longjmp_chk.S @@ -36,9 +36,11 @@ longjmp_msg: cfi_register(%ebx,%ecx); \ LOAD_PIC_REG (bx); \ leal longjmp_msg@GOTOFF(%ebx), %eax; \ + movl %eax, (%esp); \ call HIDDEN_JUMPTARGET(__fortify_fail) #else # define CALL_FAIL movl $longjmp_msg, %eax; \ + movl %eax, (%esp); \ call HIDDEN_JUMPTARGET(__fortify_fail) #endif diff --git a/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S b/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S index d46ea84..2e4427a 100644 --- a/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S +++ b/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S @@ -33,9 +33,11 @@ longjmp_msg: cfi_register(%ebx,%ecx); \ LOAD_PIC_REG (bx); \ leal longjmp_msg@GOTOFF(%ebx), %eax; \ + movl %eax, (%esp); \ call HIDDEN_JUMPTARGET(__fortify_fail) #else # define CALL_FAIL movl $longjmp_msg, %eax; \ + movl %eax, (%esp); \ call HIDDEN_JUMPTARGET(__fortify_fail) #endif -- 2.7.4