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