author | Misaki Miyashita <Misaki.Miyashita@Oracle.COM> |
Thu, 08 Sep 2016 08:47:55 -0700 | |
changeset 6860 | fbbec9b86c26 |
parent 6619 | 57ad7bed64ee |
permissions | -rw-r--r-- |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
1 |
# |
84e093c079e2
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. |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
3 |
# PSARC/2014/077 |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
4 |
# PSARC/2015/043 |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
5 |
# This change was implemented in-house. The issue was brought up to |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
6 |
# the upstream engineers, but there was no commitment. |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
7 |
# |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
8 |
--- a/crypto/cryptlib.c 2016-05-03 06:44:42.000000000 -0700 |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
9 |
+++ b/crypto/cryptlib.c 2016-09-02 08:47:23.640202700 -0700 |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
10 |
@@ -116,6 +116,7 @@ |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
11 |
|
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
12 |
#include "cryptlib.h" |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
13 |
#include <openssl/safestack.h> |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
14 |
+#include <pthread.h> |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
15 |
|
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
16 |
#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16) |
4002
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
17 |
static double SSLeay_MSVC5_hack = 0.0; /* and for VC1.5 */ |
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
18 |
@@ -184,6 +185,8 @@ |
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
19 |
*/ |
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
20 |
static STACK_OF(CRYPTO_dynlock) *dyn_locks = NULL; |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
21 |
|
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
22 |
+static pthread_mutex_t *solaris_openssl_locks; |
4002
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
23 |
+ |
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
24 |
static void (MS_FAR *locking_callback) (int mode, int type, |
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
25 |
const char *file, int line) = 0; |
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
26 |
static int (MS_FAR *add_lock_callback) (int *pointer, int amount, |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
27 |
@@ -373,7 +376,10 @@ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
28 |
void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*func) |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
29 |
(const char *file, int line)) |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
30 |
{ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
31 |
- dynlock_create_callback = func; |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
32 |
+ /* |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
33 |
+ * we now setup our own dynamic locking callback, and disallow |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
34 |
+ * setting of another locking callback. |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
35 |
+ */ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
36 |
} |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
37 |
|
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
38 |
void CRYPTO_set_dynlock_lock_callback(void (*func) (int mode, |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
39 |
@@ -382,7 +388,10 @@ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
40 |
const char *file, |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
41 |
int line)) |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
42 |
{ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
43 |
- dynlock_lock_callback = func; |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
44 |
+ /* |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
45 |
+ * we now setup our own dynamic locking callback, and disallow |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
46 |
+ * setting of another locking callback. |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
47 |
+ */ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
48 |
} |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
49 |
|
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
50 |
void CRYPTO_set_dynlock_destroy_callback(void (*func) |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
51 |
@@ -389,7 +398,10 @@ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
52 |
(struct CRYPTO_dynlock_value *l, |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
53 |
const char *file, int line)) |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
54 |
{ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
55 |
- dynlock_destroy_callback = func; |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
56 |
+ /* |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
57 |
+ * we now setup our own dynamic locking callback, and disallow |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
58 |
+ * setting of another locking callback. |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
59 |
+ */ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
60 |
} |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
61 |
|
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
62 |
void (*CRYPTO_get_locking_callback(void)) (int mode, int type, |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
63 |
@@ -402,6 +414,127 @@ |
4002
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
64 |
return (add_lock_callback); |
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
65 |
} |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
66 |
|
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
67 |
+/* |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
68 |
+ * This is the locking callback function which all applications will be |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
69 |
+ * using when CRYPTO_lock() is called. |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
70 |
+ */ |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
71 |
+static void solaris_locking_callback(int mode, int type, const char *file, |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
72 |
+ int line) |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
73 |
+{ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
74 |
+ if (mode & CRYPTO_LOCK) { |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
75 |
+ (void) pthread_mutex_lock(&solaris_openssl_locks[type]); |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
76 |
+ } else { |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
77 |
+ (void) pthread_mutex_unlock(&solaris_openssl_locks[type]); |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
78 |
+ } |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
79 |
+} |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
80 |
+ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
81 |
+/* |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
82 |
+ * Implement Solaris's own dynamic locking routines. |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
83 |
+ */ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
84 |
+static struct CRYPTO_dynlock_value * |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
85 |
+solaris_dynlock_create(const char *file, int line) |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
86 |
+{ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
87 |
+ int ret; |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
88 |
+ pthread_mutex_t *dynlock; |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
89 |
+ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
90 |
+ dynlock = OPENSSL_malloc(sizeof(pthread_mutex_t)); |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
91 |
+ if (dynlock == NULL) { |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
92 |
+ return (NULL); |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
93 |
+ } |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
94 |
+ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
95 |
+ ret = pthread_mutex_init(dynlock, NULL); |
6619
57ad7bed64ee
24377801 solaris_dynlock_create() should check for a ret val of 0 from pthread_mutex_init
akshat.harit@oracle.com <akshat.harit@oracle.com>
parents:
4822
diff
changeset
|
96 |
+ OPENSSL_assert(ret == 0); |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
97 |
+ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
98 |
+ return ((struct CRYPTO_dynlock_value *)dynlock); |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
99 |
+} |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
100 |
+ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
101 |
+static void |
4425
114f035efde7
21197645 typo in 029-fork_safe.patch causes some compilation warnings
Ivo Raisr <ivo.raisr@oracle.com>
parents:
4370
diff
changeset
|
102 |
+solaris_dynlock_lock(int mode, struct CRYPTO_dynlock_value *dynlock, |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
103 |
+ const char *file, int line) |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
104 |
+{ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
105 |
+ int ret; |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
106 |
+ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
107 |
+ if (mode & CRYPTO_LOCK) { |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
108 |
+ ret = pthread_mutex_lock((pthread_mutex_t *)dynlock); |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
109 |
+ } else { |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
110 |
+ ret = pthread_mutex_unlock((pthread_mutex_t *)dynlock); |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
111 |
+ } |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
112 |
+ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
113 |
+ OPENSSL_assert(ret == 0); |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
114 |
+} |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
115 |
+ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
116 |
+static void |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
117 |
+solaris_dynlock_destroy(struct CRYPTO_dynlock_value *dynlock, |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
118 |
+ const char *file, int line) |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
119 |
+{ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
120 |
+ int ret; |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
121 |
+ ret = pthread_mutex_destroy((pthread_mutex_t *)dynlock); |
6619
57ad7bed64ee
24377801 solaris_dynlock_create() should check for a ret val of 0 from pthread_mutex_init
akshat.harit@oracle.com <akshat.harit@oracle.com>
parents:
4822
diff
changeset
|
122 |
+ OPENSSL_assert(ret == 0); |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
123 |
+} |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
124 |
+ |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
125 |
+ |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
126 |
+static void solaris_fork_prep(void) |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
127 |
+{ |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
128 |
+ int i; |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
129 |
+ |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
130 |
+ for (i = 0; i < CRYPTO_NUM_LOCKS; i++) { |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
131 |
+ (void) pthread_mutex_lock(&solaris_openssl_locks[i]); |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
132 |
+ } |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
133 |
+} |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
134 |
+ |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
135 |
+static void solaris_fork_post(void) |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
136 |
+{ |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
137 |
+ int i; |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
138 |
+ |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
139 |
+ for (i = CRYPTO_NUM_LOCKS - 1; i >= 0; i--) { |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
140 |
+ (void) pthread_mutex_unlock(&solaris_openssl_locks[i]); |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
141 |
+ } |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
142 |
+ |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
143 |
+ OPENSSL_assert(dynlock_create_callback == solaris_dynlock_create); |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
144 |
+ OPENSSL_assert(dynlock_lock_callback == solaris_dynlock_lock); |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
145 |
+ OPENSSL_assert(dynlock_destroy_callback == solaris_dynlock_destroy); |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
146 |
+ OPENSSL_assert(locking_callback == solaris_locking_callback); |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
147 |
+} |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
148 |
+ |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
149 |
+/* |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
150 |
+ * This is called by the _init() function to setup locks used by OpenSSL |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
151 |
+ * and locking callback functions. |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
152 |
+ */ |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
153 |
+void |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
154 |
+solaris_locking_setup() |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
155 |
+{ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
156 |
+ int i; |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
157 |
+ |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
158 |
+ /* setup the dynlock callback if not already */ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
159 |
+ if (dynlock_create_callback == NULL) { |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
160 |
+ dynlock_create_callback = solaris_dynlock_create; |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
161 |
+ } |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
162 |
+ if (dynlock_lock_callback == NULL) { |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
163 |
+ dynlock_lock_callback = solaris_dynlock_lock; |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
164 |
+ } |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
165 |
+ if (dynlock_destroy_callback == NULL) { |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
166 |
+ dynlock_destroy_callback = solaris_dynlock_destroy; |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
167 |
+ } |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
168 |
+ if (locking_callback == NULL) { |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
169 |
+ locking_callback = solaris_locking_callback; |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
170 |
+ } |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
171 |
+ |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
172 |
+ /* allocate and initialize locks needed by OpenSSL */ |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
173 |
+ solaris_openssl_locks = |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
174 |
+ OPENSSL_malloc(sizeof (pthread_mutex_t) * CRYPTO_NUM_LOCKS); |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
175 |
+ if (solaris_openssl_locks == NULL) { |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
176 |
+ fprintf(stderr, |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
177 |
+ "solaris_locking_setup: memory allocation failure.\n"); |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
178 |
+ abort(); |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
179 |
+ } |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
180 |
+ for (i = 0; i < CRYPTO_NUM_LOCKS; i++) { |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
181 |
+ (void) pthread_mutex_init(&solaris_openssl_locks[i], NULL); |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
182 |
+ } |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
183 |
+ |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
184 |
+ (void) pthread_atfork(solaris_fork_prep, solaris_fork_post, solaris_fork_post); |
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
185 |
+} |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
186 |
+ |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
187 |
+ |
4002
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
188 |
void CRYPTO_set_locking_callback(void (*func) (int mode, int type, |
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
189 |
const char *file, int line)) |
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
190 |
{ |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
191 |
@@ -410,7 +541,11 @@ |
4002
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
192 |
* started. |
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
193 |
*/ |
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
194 |
OPENSSL_init(); |
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
195 |
- locking_callback = func; |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
196 |
+ |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
197 |
+ /* |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
198 |
+ * we now setup our own locking callback and mutexes, and disallow |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
199 |
+ * setting of another locking callback. |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
200 |
+ */ |
4002
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
201 |
} |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
202 |
|
4002
95b8f35fcdd5
20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
1752
diff
changeset
|
203 |
void CRYPTO_set_add_lock_callback(int (*func) (int *num, int mount, int type, |
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
204 |
@@ -471,9 +606,10 @@ |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
205 |
|
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
206 |
int CRYPTO_THREADID_set_callback(void (*func) (CRYPTO_THREADID *)) |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
207 |
{ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
208 |
- if (threadid_callback) |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
209 |
- return 0; |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
210 |
- threadid_callback = func; |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
211 |
+ /* |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
212 |
+ * Use the backup method (the address of 'errno') to identify the |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
213 |
+ * thread and disallow setting the threadid callback. |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
214 |
+ */ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
215 |
return 1; |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
216 |
} |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
217 |
|
6860
fbbec9b86c26
20358335 memory leak in libcrypto
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
6619
diff
changeset
|
218 |
@@ -529,7 +665,10 @@ |
4366
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
219 |
|
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
220 |
void CRYPTO_set_id_callback(unsigned long (*func) (void)) |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
221 |
{ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
222 |
- id_callback = func; |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
223 |
+ /* |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
224 |
+ * Use the backup method to identify the thread/process. |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
225 |
+ * Setting the id callback is disallowed. |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
226 |
+ */ |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
227 |
} |
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
228 |
|
8e8f535e48a5
PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4002
diff
changeset
|
229 |
unsigned long CRYPTO_thread_id(void) |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
230 |
--- openssl-1.0.1f/crypto/cryptlib.h.~1~ Fri Feb 7 10:41:42 2014 |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
231 |
+++ openssl-1.0.1f/crypto/cryptlib.h Thu Feb 6 16:04:16 2014 |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
232 |
@@ -104,6 +104,8 @@ |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
233 |
void *OPENSSL_stderr(void); |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
234 |
extern int OPENSSL_NONPIC_relocated; |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
235 |
|
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
236 |
+void solaris_locking_setup(); |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
237 |
+ |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
238 |
#ifdef __cplusplus |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
239 |
} |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
240 |
#endif |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
241 |
--- openssl-1.0.1f/crypto/sparccpuid.S.~1~ Fri Feb 7 10:41:37 2014 |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
242 |
+++ openssl-1.0.1f/crypto/sparccpuid.S Thu Feb 6 16:04:14 2014 |
4822
1fb8a14c6702
PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4425
diff
changeset
|
243 |
@@ -525,5 +525,7 @@ |
1fb8a14c6702
PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4425
diff
changeset
|
244 |
.size _sparcv9_vis1_instrument_bus2,.-_sparcv9_vis1_instrument_bus2 |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
245 |
|
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
246 |
.section ".init",#alloc,#execinstr |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
247 |
+ call solaris_locking_setup |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
248 |
+ nop |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
249 |
call OPENSSL_cpuid_setup |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
250 |
nop |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
251 |
--- openssl-1.0.1f/crypto/x86_64cpuid.pl.~1~ Wed Feb 12 13:20:09 2014 |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
252 |
+++ openssl-1.0.1f/crypto/x86_64cpuid.pl Wed Feb 12 13:21:20 2014 |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
253 |
@@ -20,7 +20,10 @@ |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
254 |
print<<___; |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
255 |
.extern OPENSSL_cpuid_setup |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
256 |
.hidden OPENSSL_cpuid_setup |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
257 |
+.extern solaris_locking_setup |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
258 |
+.hidden solaris_locking_setup |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
259 |
.section .init |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
260 |
+ call solaris_locking_setup |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
261 |
call OPENSSL_cpuid_setup |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
262 |
|
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
263 |
.hidden OPENSSL_ia32cap_P |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
264 |
--- openssl-1.0.1f/crypto/x86cpuid.pl.~1~ Wed Feb 12 13:38:03 2014 |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
265 |
+++ openssl-1.0.1f/crypto/x86cpuid.pl Wed Feb 12 13:38:31 2014 |
4822
1fb8a14c6702
PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4425
diff
changeset
|
266 |
@@ -379,8 +379,10 @@ |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
267 |
&ret (); |
4822
1fb8a14c6702
PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4425
diff
changeset
|
268 |
&function_end_B("OPENSSL_ia32_rdseed"); |
1752
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
269 |
|
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
270 |
+&initseg("solaris_locking_setup"); |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
271 |
&initseg("OPENSSL_cpuid_setup"); |
84e093c079e2
PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff
changeset
|
272 |
|
4822
1fb8a14c6702
PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4425
diff
changeset
|
273 |
+&hidden("solaris_locking_setup"); |
1fb8a14c6702
PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4425
diff
changeset
|
274 |
&hidden("OPENSSL_cpuid_setup"); |
1fb8a14c6702
PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4425
diff
changeset
|
275 |
&hidden("OPENSSL_ia32cap_P"); |
1fb8a14c6702
PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
4425
diff
changeset
|
276 |