components/openssl/common/patches/029-fork_safe.patch
author Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
Fri, 28 Aug 2015 11:04:52 -0700
changeset 4822 1fb8a14c6702
parent 4425 114f035efde7
child 6619 57ad7bed64ee
permissions -rw-r--r--
PSARC/2015/353 OpenSSL 1.0.2 20829622 Upgrade to OpenSSL 1.0.2d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
#
84e093c079e2 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.~1~	Fri Feb  7 10:41:36 2014
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
     9
+++ openssl-1.0.1f/crypto/cryptlib.c	Thu Feb  6 16:03:58 2014
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
 }
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
    37
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
 }
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
    49
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
 }
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
    61
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,
4822
1fb8a14c6702 PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4425
diff changeset
    63
@@ -402,6 +414,128@@
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
 }
1752
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    66
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) {
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
    75
+        pthread_mutex_lock(&solaris_openssl_locks[type]);
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
    76
+    } else {
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
    77
+        pthread_mutex_unlock(&solaris_openssl_locks[type]);
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);
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
    96
+    OPENSSL_assert(ret);
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);
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   122
+    OPENSSL_assert(ret);
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
+
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   126
+/*
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   127
+ * This function is called when a child process is forked to setup its own
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   128
+ * global locking callback function ptr and mutexes.
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   129
+ */
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   130
+static void solaris_fork_child(void)
4366
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   131
+{
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   132
+    /*
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   133
+     * clear locking_callback to indicate that locks should
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   134
+     * be reinitialized.
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   135
+     */
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   136
+    locking_callback = NULL;
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   137
+    solaris_locking_setup();
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   138
+}
1752
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   139
+
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   140
+/*
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   141
+ * This function allocates and initializes the global mutex array, and
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   142
+ * sets the locking callback.
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   143
+ */
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   144
+void solaris_locking_setup()
4366
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   145
+{
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   146
+    int i;
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   147
+    int num_locks;
1752
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   148
+
4366
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   149
+    /* 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
   150
+    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
   151
+        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
   152
+    }
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   153
+    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
   154
+        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
   155
+    }
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   156
+    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
   157
+        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
   158
+    }
1752
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   159
+
4366
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   160
+    /* locking callback is already setup. Nothing to do */
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   161
+    if (locking_callback != NULL) {
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   162
+        return;
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   163
+    }
1752
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   164
+
4366
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   165
+    /*
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   166
+     * Set atfork handler so that child can setup its own mutexes and
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   167
+     * locking callbacks when it is forked
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   168
+     */
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   169
+    (void) pthread_atfork(NULL, NULL, solaris_fork_child);
1752
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   170
+
4366
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   171
+    /* allocate locks needed by OpenSSL  */
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   172
+    num_locks = CRYPTO_num_locks();
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   173
+    solaris_openssl_locks =
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   174
+        OPENSSL_malloc(sizeof (pthread_mutex_t) * num_locks);
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
+    }
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   180
+
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   181
+    /* initialize openssl mutexes */
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   182
+    for (i = 0; i < num_locks; i++) {
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   183
+        pthread_mutex_init(&solaris_openssl_locks[i], NULL);
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   184
+    }
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   185
+    locking_callback = solaris_locking_callback;
1752
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   186
+
4002
95b8f35fcdd5 20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1752
diff changeset
   187
+}
1752
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   188
+
4002
95b8f35fcdd5 20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1752
diff changeset
   189
 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
   190
                                                const char *file, int line))
95b8f35fcdd5 20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1752
diff changeset
   191
 {
95b8f35fcdd5 20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1752
diff changeset
   192
@@ -410,7 +486,11 @@
95b8f35fcdd5 20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1752
diff changeset
   193
      * started.
95b8f35fcdd5 20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1752
diff changeset
   194
      */
95b8f35fcdd5 20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1752
diff changeset
   195
     OPENSSL_init();
95b8f35fcdd5 20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1752
diff changeset
   196
-    locking_callback = func;
1752
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   197
+
4366
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   198
+    /*
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   199
+     * 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
   200
+     * 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
   201
+     */
4002
95b8f35fcdd5 20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1752
diff changeset
   202
 }
1752
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   203
 
4002
95b8f35fcdd5 20735615 Upgrade OpenSSL version to 1.0.1m
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 1752
diff changeset
   204
 void CRYPTO_set_add_lock_callback(int (*func) (int *num, int mount, int type,
4366
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   205
@@ -471,9 +551,10 @@
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   206
 
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   207
 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
   208
 {
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   209
-    if (threadid_callback)
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   210
-        return 0;
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   211
-    threadid_callback = func;
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   212
+    /*
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   213
+     * 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
   214
+     * 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
   215
+     */
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   216
     return 1;
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   217
 }
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   218
 
4822
1fb8a14c6702 PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4425
diff changeset
   219
@@ -529,7 +669,10 @@
4366
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   220
 
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   221
 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
   222
 {
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   223
-    id_callback = func;
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   224
+    /*
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   225
+     * 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
   226
+     * 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
   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
 
8e8f535e48a5 PSARC/2015/043 Further OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4002
diff changeset
   230
 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
   231
--- 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
   232
+++ 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
   233
@@ -104,6 +104,8 @@
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   234
 void *OPENSSL_stderr(void);
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   235
 extern int OPENSSL_NONPIC_relocated;
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   236
 
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   237
+void solaris_locking_setup();
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   238
+
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   239
 #ifdef  __cplusplus
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   240
 }
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   241
 #endif
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.~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
   243
+++ 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
   244
@@ -525,5 +525,7 @@
1fb8a14c6702 PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4425
diff changeset
   245
 .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
   246
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   247
 .section	".init",#alloc,#execinstr
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   248
+	call	solaris_locking_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   249
+	nop
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   250
 	call	OPENSSL_cpuid_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   251
 	nop
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.~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
   253
+++ 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
   254
@@ -20,7 +20,10 @@
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   255
 print<<___;
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   256
 .extern		OPENSSL_cpuid_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   257
 .hidden		OPENSSL_cpuid_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   258
+.extern		solaris_locking_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   259
+.hidden		solaris_locking_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   260
 .section	.init
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   261
+	call	solaris_locking_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   262
 	call	OPENSSL_cpuid_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   263
 
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   264
 .hidden	OPENSSL_ia32cap_P
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.~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
   266
+++ 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
   267
@@ -379,8 +379,10 @@
1752
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   268
 	&ret	();
4822
1fb8a14c6702 PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4425
diff changeset
   269
 &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
   270
 
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   271
+&initseg("solaris_locking_setup");
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   272
 &initseg("OPENSSL_cpuid_setup");
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   273
 
4822
1fb8a14c6702 PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4425
diff changeset
   274
+&hidden("solaris_locking_setup");
1fb8a14c6702 PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4425
diff changeset
   275
 &hidden("OPENSSL_cpuid_setup");
1fb8a14c6702 PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4425
diff changeset
   276
 &hidden("OPENSSL_ia32cap_P");
1fb8a14c6702 PSARC/2015/353 OpenSSL 1.0.2
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents: 4425
diff changeset
   277