author | Ron Jordan <ron.jordan@oracle.com> |
Tue, 24 Mar 2015 20:05:38 -0700 | |
branch | s11u2-sru8-backport |
changeset 4020 | 8e3f49e23eaa |
parent 3017 | da8a40fb54dd |
child 4366 | 8e8f535e48a5 |
child 4461 | 68eb2fdf9b3a |
permissions | -rw-r--r-- |
3017
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1 |
# |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
2 |
# This file adds the code to setup internal mutexes and callback function. |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
3 |
# PSARC/2014/077 |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
4 |
# This change was implemented in-house. The issue was brought up to |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
5 |
# the upstream engineers, but there was no commitment. |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
6 |
# |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
7 |
--- openssl-1.0.1f/crypto/cryptlib.c.~1~ Fri Feb 7 10:41:36 2014 |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
8 |
+++ openssl-1.0.1f/crypto/cryptlib.c Thu Feb 6 16:03:58 2014 |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
9 |
@@ -116,6 +116,7 @@ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
10 |
|
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
11 |
#include "cryptlib.h" |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
12 |
#include <openssl/safestack.h> |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
13 |
+#include <pthread.h> |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
14 |
|
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
15 |
#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16) |
4020
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
16 |
static double SSLeay_MSVC5_hack = 0.0; /* and for VC1.5 */ |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
17 |
@@ -184,6 +185,8 @@ |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
18 |
*/ |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
19 |
static STACK_OF(CRYPTO_dynlock) *dyn_locks = NULL; |
3017
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
20 |
|
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
21 |
+static pthread_mutex_t *solaris_openssl_locks; |
4020
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
22 |
+ |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
23 |
static void (MS_FAR *locking_callback) (int mode, int type, |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
24 |
const char *file, int line) = 0; |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
25 |
static int (MS_FAR *add_lock_callback) (int *pointer, int amount, |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
26 |
@@ -402,6 +405,79 @@ |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
27 |
return (add_lock_callback); |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
28 |
} |
3017
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
29 |
|
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
30 |
+/* |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
31 |
+ * This is the locking callback function which all applications will be |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
32 |
+ * using when CRYPTO_lock() is called. |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
33 |
+ */ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
34 |
+static void solaris_locking_callback(int mode, int type, const char *file, |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
35 |
+ int line) |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
36 |
+ { |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
37 |
+ if (mode & CRYPTO_LOCK) |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
38 |
+ { |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
39 |
+ pthread_mutex_lock(&solaris_openssl_locks[type]); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
40 |
+ } |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
41 |
+ else |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
42 |
+ { |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
43 |
+ pthread_mutex_unlock(&solaris_openssl_locks[type]); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
44 |
+ } |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
45 |
+ } |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
46 |
+ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
47 |
+ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
48 |
+/* |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
49 |
+ * This function is called when a child process is forked to setup its own |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
50 |
+ * global locking callback function ptr and mutexes. |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
51 |
+ */ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
52 |
+static void solaris_fork_child(void) |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
53 |
+ { |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
54 |
+ /* |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
55 |
+ * clear locking_callback to indicate that locks should |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
56 |
+ * be reinitialized. |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
57 |
+ */ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
58 |
+ locking_callback = NULL; |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
59 |
+ solaris_locking_setup(); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
60 |
+ } |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
61 |
+ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
62 |
+/* |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
63 |
+ * This function allocates and initializes the global mutex array, and |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
64 |
+ * sets the locking callback. |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
65 |
+ */ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
66 |
+void solaris_locking_setup() |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
67 |
+ { |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
68 |
+ int i; |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
69 |
+ int num_locks; |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
70 |
+ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
71 |
+ /* locking callback is already setup. Nothing to do */ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
72 |
+ if (locking_callback != NULL) |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
73 |
+ { |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
74 |
+ return; |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
75 |
+ } |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
76 |
+ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
77 |
+ /* |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
78 |
+ * Set atfork handler so that child can setup its own mutexes and |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
79 |
+ * locking callbacks when it is forked |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
80 |
+ */ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
81 |
+ (void) pthread_atfork(NULL, NULL, solaris_fork_child); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
82 |
+ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
83 |
+ /* allocate locks needed by OpenSSL */ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
84 |
+ num_locks = CRYPTO_num_locks(); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
85 |
+ solaris_openssl_locks = |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
86 |
+ OPENSSL_malloc(sizeof (pthread_mutex_t) * num_locks); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
87 |
+ if (solaris_openssl_locks == NULL) |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
88 |
+ { |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
89 |
+ fprintf(stderr, |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
90 |
+ "solaris_locking_setup: memory allocation failure.\n"); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
91 |
+ abort(); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
92 |
+ } |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
93 |
+ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
94 |
+ /* initialize openssl mutexes */ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
95 |
+ for (i = 0; i < num_locks; i++) |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
96 |
+ { |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
97 |
+ pthread_mutex_init(&solaris_openssl_locks[i], NULL); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
98 |
+ } |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
99 |
+ locking_callback = solaris_locking_callback; |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
100 |
+ |
4020
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
101 |
+} |
3017
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
102 |
+ |
4020
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
103 |
void CRYPTO_set_locking_callback(void (*func) (int mode, int type, |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
104 |
const char *file, int line)) |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
105 |
{ |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
106 |
@@ -410,7 +486,11 @@ |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
107 |
* started. |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
108 |
*/ |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
109 |
OPENSSL_init(); |
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
110 |
- locking_callback = func; |
3017
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
111 |
+ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
112 |
+ /* |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
113 |
+ * we now setup our own locking callback and mutexes, and disallow |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
114 |
+ * setting of another locking callback. |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
115 |
+ */ |
4020
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
116 |
} |
3017
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
117 |
|
4020
8e3f49e23eaa
20735615 Upgrade OpenSSL version to 1.0.1m
Ron Jordan <ron.jordan@oracle.com>
parents:
3017
diff
changeset
|
118 |
void CRYPTO_set_add_lock_callback(int (*func) (int *num, int mount, int type, |
3017
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
119 |
--- openssl-1.0.1f/crypto/cryptlib.h.~1~ Fri Feb 7 10:41:42 2014 |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
120 |
+++ openssl-1.0.1f/crypto/cryptlib.h Thu Feb 6 16:04:16 2014 |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
121 |
@@ -104,6 +104,8 @@ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
122 |
void *OPENSSL_stderr(void); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
123 |
extern int OPENSSL_NONPIC_relocated; |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
124 |
|
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
125 |
+void solaris_locking_setup(); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
126 |
+ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
127 |
#ifdef __cplusplus |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
128 |
} |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
129 |
#endif |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
130 |
--- openssl-1.0.1f/crypto/sparccpuid.S.~1~ Fri Feb 7 10:41:37 2014 |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
131 |
+++ openssl-1.0.1f/crypto/sparccpuid.S Thu Feb 6 16:04:14 2014 |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
132 |
@@ -398,5 +398,7 @@ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
133 |
.size OPENSSL_cleanse,.-OPENSSL_cleanse |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
134 |
|
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
135 |
.section ".init",#alloc,#execinstr |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
136 |
+ call solaris_locking_setup |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
137 |
+ nop |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
138 |
call OPENSSL_cpuid_setup |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
139 |
nop |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
140 |
--- openssl-1.0.1f/crypto/x86_64cpuid.pl.~1~ Wed Feb 12 13:20:09 2014 |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
141 |
+++ openssl-1.0.1f/crypto/x86_64cpuid.pl Wed Feb 12 13:21:20 2014 |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
142 |
@@ -20,7 +20,10 @@ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
143 |
print<<___; |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
144 |
.extern OPENSSL_cpuid_setup |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
145 |
.hidden OPENSSL_cpuid_setup |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
146 |
+.extern solaris_locking_setup |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
147 |
+.hidden solaris_locking_setup |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
148 |
.section .init |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
149 |
+ call solaris_locking_setup |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
150 |
call OPENSSL_cpuid_setup |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
151 |
|
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
152 |
.hidden OPENSSL_ia32cap_P |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
153 |
--- openssl-1.0.1f/crypto/x86cpuid.pl.~1~ Wed Feb 12 13:38:03 2014 |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
154 |
+++ openssl-1.0.1f/crypto/x86cpuid.pl Wed Feb 12 13:38:31 2014 |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
155 |
@@ -353,6 +353,7 @@ |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
156 |
&ret (); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
157 |
&function_end_B("OPENSSL_ia32_rdrand"); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
158 |
|
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
159 |
+&initseg("solaris_locking_setup"); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
160 |
&initseg("OPENSSL_cpuid_setup"); |
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
161 |
|
da8a40fb54dd
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
162 |
&asm_finish(); |