This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.10-333-g6dfeb52


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  6dfeb5245bca9f2ef94815ed9a7b979a9e0be744 (commit)
      from  3d60eb17340768688bd287580c32365c1e925487 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=6dfeb5245bca9f2ef94815ed9a7b979a9e0be744

commit 6dfeb5245bca9f2ef94815ed9a7b979a9e0be744
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Tue Sep 8 16:00:25 2009 -0700

    Fix __longjmp_chk on s390/s390x.
    
    s390/s390x hasn't been updated to handle alternate stacks properly.

diff --git a/ChangeLog b/ChangeLog
index d6cd79d..1ae8348 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2009-09-08  Jakub Jelinek  <jakub@redhat.com>
+
+	* sysdeps/s390/s390-32/____longjmp_chk.c: Removed.
+	* sysdeps/s390/s390-64/____longjmp_chk.c: Removed.
+	* sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c: New file.
+	* sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c: New file.
+
 2009-09-07  Ulrich Drepper  <drepper@redhat.com>
 
 	* locale/programs/ld-collate.c (struct locale_collate_t): Add
diff --git a/sysdeps/s390/s390-32/____longjmp_chk.c b/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c
similarity index 73%
rename from sysdeps/s390/s390-32/____longjmp_chk.c
rename to sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c
index c5eb721..b28e587 100644
--- a/sysdeps/s390/s390-32/____longjmp_chk.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/____longjmp_chk.c
@@ -24,6 +24,9 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
+#include <stdint.h>
+#include <signal.h>
+#include <sys/syscall.h>
 
 #define __longjmp ____longjmp_chk
 
@@ -35,7 +38,18 @@
       __asm ("lr %0, %%r15" : "=r" (cur_sp));				\
       new_sp ^= guard;							\
       if (new_sp < cur_sp)						\
-	__fortify_fail ("longjmp causes uninitialized stack frame");	\
+	{								\
+	  stack_t oss;							\
+	  INTERNAL_SYSCALL_DECL (err);					\
+	  int res = INTERNAL_SYSCALL (sigaltstack, err, 2, NULL, &oss);	\
+	  if (!INTERNAL_SYSCALL_ERROR_P (res, err))			\
+	    {								\
+	      if ((oss.ss_flags & SS_ONSTACK) == 0			\
+		  || ((uintptr_t) (oss.ss_sp + oss.ss_size) - new_sp	\
+		      >= oss.ss_size))					\
+		__fortify_fail ("longjmp causes uninitialized stack frame");\
+	    }								\
+	}								\
     } while (0)
 
 #include "__longjmp.c"
diff --git a/sysdeps/s390/s390-64/____longjmp_chk.c b/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c
similarity index 73%
rename from sysdeps/s390/s390-64/____longjmp_chk.c
rename to sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c
index 241822c..dcf58fb 100644
--- a/sysdeps/s390/s390-64/____longjmp_chk.c
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/____longjmp_chk.c
@@ -24,6 +24,9 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
+#include <stdint.h>
+#include <signal.h>
+#include <sys/syscall.h>
 
 #define __longjmp ____longjmp_chk
 
@@ -35,7 +38,18 @@
       __asm ("lgr %0, %%r15" : "=r" (cur_sp));				\
       new_sp ^= guard;							\
       if (new_sp < cur_sp)						\
-	__fortify_fail ("longjmp causes uninitialized stack frame");	\
+	{								\
+	  stack_t oss;							\
+	  INTERNAL_SYSCALL_DECL (err);					\
+	  int res = INTERNAL_SYSCALL (sigaltstack, err, 2, NULL, &oss);	\
+	  if (!INTERNAL_SYSCALL_ERROR_P (res, err))			\
+	    {								\
+	      if ((oss.ss_flags & SS_ONSTACK) == 0			\
+		  || ((uintptr_t) (oss.ss_sp + oss.ss_size) - new_sp	\
+		      >= oss.ss_size))					\
+		__fortify_fail ("longjmp causes uninitialized stack frame");\
+	    }								\
+	}								\
     } while (0)
 
 #include "__longjmp.c"

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |    7 +++++++
 .../sysv/linux}/s390/s390-32/____longjmp_chk.c     |   16 +++++++++++++++-
 .../sysv/linux}/s390/s390-64/____longjmp_chk.c     |   16 +++++++++++++++-
 3 files changed, 37 insertions(+), 2 deletions(-)
 rename sysdeps/{ => unix/sysv/linux}/s390/s390-32/____longjmp_chk.c (73%)
 rename sysdeps/{ => unix/sysv/linux}/s390/s390-64/____longjmp_chk.c (73%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]