summaryrefslogtreecommitdiff
path: root/patches/glibc/2.9/100-ssp-compat.patch
blob: b51bc337971ff232f970f611e9e944d38b9e6a44 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
Original patch from: gentoo/src/patchsets/glibc/2.9/0010_all_glibc-2.7-ssp-compat.patch

-= BEGIN original header =-
Add backwards compat support for gcc-3.x ssp ... older ssp versions
used __guard and __stack_smash_handler symbols while gcc-4.1 and newer
uses __stack_chk_guard and __stack_chk_fail.

-= END original header =-

diff -durN glibc-2_9.orig/Versions.def glibc-2_9/Versions.def
--- glibc-2_9.orig/Versions.def	2008-08-01 19:13:40.000000000 +0200
+++ glibc-2_9/Versions.def	2009-02-02 22:00:33.000000000 +0100
@@ -113,6 +113,9 @@
   GLIBC_2.0
   GLIBC_2.1
   GLIBC_2.3
+%ifdef ENABLE_OLD_SSP_COMPAT
+  GLIBC_2.3.2
+%endif
   GLIBC_2.4
   GLIBC_PRIVATE
 }
diff -durN glibc-2_9.orig/config.h.in glibc-2_9/config.h.in
--- glibc-2_9.orig/config.h.in	2007-03-26 22:40:08.000000000 +0200
+++ glibc-2_9/config.h.in	2009-02-02 22:00:32.000000000 +0100
@@ -42,6 +42,9 @@
    assembler instructions per line.  Default is `;'  */
 #undef ASM_LINE_SEP
 
+/* Define if we want to enable support for old ssp symbols */
+#undef	ENABLE_OLD_SSP_COMPAT
+
 /* Define if not using ELF, but `.init' and `.fini' sections are available.  */
 #undef	HAVE_INITFINI
 
diff -durN glibc-2_9.orig/configure glibc-2_9/configure
--- glibc-2_9.orig/configure	2008-11-11 10:50:11.000000000 +0100
+++ glibc-2_9/configure	2009-02-02 22:00:32.000000000 +0100
@@ -1380,6 +1380,9 @@
   --enable-kernel=VERSION compile for compatibility with kernel not older than
                           VERSION
   --enable-all-warnings   enable all useful warnings gcc can issue
+  --disable-old-ssp-compat
+                          enable support for older ssp symbols
+                          [default=no]
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -6470,6 +6473,20 @@
 echo "${ECHO_T}$libc_cv_ssp" >&6; }
 
 
+# Check whether --enable-old-ssp-compat or --disable-old-ssp-compat was given.
+if test "${enable_old_ssp_compat+set}" = set; then
+  enableval="$enable_old_ssp_compat"
+  enable_old_ssp_compat=$enableval
+else
+  enable_old_ssp_compat=no
+fi;
+if test "x$enable_old_ssp_compat" = "xyes"; then
+  cat >>confdefs.h <<\_ACEOF
+#define ENABLE_OLD_SSP_COMPAT 1
+_ACEOF
+
+fi
+
 { echo "$as_me:$LINENO: checking for -fgnu89-inline" >&5
 echo $ECHO_N "checking for -fgnu89-inline... $ECHO_C" >&6; }
 if test "${libc_cv_gnu89_inline+set}" = set; then
diff -durN glibc-2_9.orig/configure.in glibc-2_9/configure.in
--- glibc-2_9.orig/configure.in	2008-11-11 10:50:11.000000000 +0100
+++ glibc-2_9/configure.in	2009-02-02 22:00:32.000000000 +0100
@@ -1647,6 +1647,15 @@
 rm -f conftest*])
 AC_SUBST(libc_cv_ssp)
 
+AC_ARG_ENABLE([old-ssp-compat],
+	      AC_HELP_STRING([--enable-old-ssp-compat],
+	                     [enable support for older ssp symbols @<:@default=no@:>@]),
+	      [enable_old_ssp_compat=$enableval],
+	      [enable_old_ssp_compat=no])
+if test "x$enable_old_ssp_compat" = "xyes"; then
+  AC_DEFINE(ENABLE_OLD_SSP_COMPAT)
+fi
+
 AC_CACHE_CHECK(for -fgnu89-inline, libc_cv_gnu89_inline, [dnl
 cat > conftest.c <<EOF
 int foo;
diff -durN glibc-2_9.orig/csu/Versions glibc-2_9/csu/Versions
--- glibc-2_9.orig/csu/Versions	2006-10-28 01:11:41.000000000 +0200
+++ glibc-2_9/csu/Versions	2009-02-02 22:00:32.000000000 +0100
@@ -17,6 +17,12 @@
     # New special glibc functions.
     gnu_get_libc_release; gnu_get_libc_version;
   }
+  GLIBC_2.3.2 {
+%ifdef ENABLE_OLD_SSP_COMPAT
+    # global objects and functions for the old propolice patch in gcc
+    __guard;
+%endif
+  }
   GLIBC_PRIVATE {
 %if HAVE___THREAD
     # This version is for the TLS symbol, GLIBC_2.0 is the old object symbol.
diff -durN glibc-2_9.orig/csu/libc-start.c glibc-2_9/csu/libc-start.c
--- glibc-2_9.orig/csu/libc-start.c	2007-08-21 00:27:50.000000000 +0200
+++ glibc-2_9/csu/libc-start.c	2009-02-02 22:00:32.000000000 +0100
@@ -37,6 +37,9 @@
 uintptr_t __stack_chk_guard attribute_relro;
 # endif
 #endif
+#ifdef ENABLE_OLD_SSP_COMPAT
+uintptr_t __guard attribute_relro;
+#endif
 
 #ifdef HAVE_PTR_NTHREADS
 /* We need atomic operations.  */
@@ -141,6 +144,9 @@
 
   /* Set up the stack checker's canary.  */
   uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
+#ifdef ENABLE_OLD_SSP_COMPAT
+  __guard = stack_chk_guard;
+#endif
 # ifdef THREAD_SET_STACK_GUARD
   THREAD_SET_STACK_GUARD (stack_chk_guard);
 # else
diff -durN glibc-2_9.orig/debug/Versions glibc-2_9/debug/Versions
--- glibc-2_9.orig/debug/Versions	2008-03-05 07:53:41.000000000 +0100
+++ glibc-2_9/debug/Versions	2009-02-02 22:00:32.000000000 +0100
@@ -10,6 +10,12 @@
     # These are to support some gcc features.
     __cyg_profile_func_enter; __cyg_profile_func_exit;
   }
+%ifdef ENABLE_OLD_SSP_COMPAT
+  GLIBC_2.3.2 {
+    # backwards ssp compat support; alias to __stack_chk_fail
+    __stack_smash_handler;
+  }
+%endif
   GLIBC_2.3.4 {
     __chk_fail;
     __memcpy_chk; __memmove_chk; __mempcpy_chk; __memset_chk; __stpcpy_chk;
diff -durN glibc-2_9.orig/debug/stack_chk_fail.c glibc-2_9/debug/stack_chk_fail.c
--- glibc-2_9.orig/debug/stack_chk_fail.c	2007-05-25 01:47:08.000000000 +0200
+++ glibc-2_9/debug/stack_chk_fail.c	2009-02-02 22:00:32.000000000 +0100
@@ -28,3 +28,7 @@
 {
   __fortify_fail ("stack smashing detected");
 }
+
+#ifdef ENABLE_OLD_SSP_COMPAT
+strong_alias (__stack_chk_fail, __stack_smash_handler)
+#endif
diff -durN glibc-2_9.orig/elf/Versions glibc-2_9/elf/Versions
--- glibc-2_9.orig/elf/Versions	2008-03-08 06:42:26.000000000 +0100
+++ glibc-2_9/elf/Versions	2009-02-02 22:00:33.000000000 +0100
@@ -43,6 +43,12 @@
     # runtime interface to TLS
     __tls_get_addr;
   }
+%ifdef ENABLE_OLD_SSP_COMPAT
+  GLIBC_2.3.2 {
+    # backwards ssp compat support
+    __guard;
+  }
+%endif
   GLIBC_2.4 {
     # stack canary
     __stack_chk_guard;
diff -durN glibc-2_9.orig/elf/rtld.c glibc-2_9/elf/rtld.c
--- glibc-2_9.orig/elf/rtld.c	2008-08-14 19:01:56.000000000 +0200
+++ glibc-2_9/elf/rtld.c	2009-02-02 22:00:32.000000000 +0100
@@ -89,6 +89,9 @@
    in thread local area.  */
 uintptr_t __stack_chk_guard attribute_relro;
 #endif
+#ifdef ENABLE_OLD_SSP_COMPAT
+uintptr_t __guard attribute_relro;
+#endif
 
 /* Only exported for architectures that don't store the pointer guard
    value in thread local area.  */
@@ -842,6 +845,9 @@
 {
   /* Set up the stack checker's canary.  */
   uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
+#ifdef ENABLE_OLD_SSP_COMPAT
+  __guard = stack_chk_guard;
+#endif
 #ifdef THREAD_SET_STACK_GUARD
   THREAD_SET_STACK_GUARD (stack_chk_guard);
 #else