components/openssl/openssl-1.0.1/patches/29_fork_safe.patch
author Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
Fri, 07 Mar 2014 17:02:45 -0800
changeset 1752 84e093c079e2
child 4002 95b8f35fcdd5
permissions -rw-r--r--
PSARC/2014/077 OpenSSL Thread and Fork Safety 17822462 svc:/network/sendmail-client:default (sendmail SMTP client queue runner) core 18071490 OpenSSL: Update the package file with new TPNO number for OpenSSL 1.0.1f
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
84e093c079e2 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
84e093c079e2 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.
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
     6
#
84e093c079e2 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
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	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
     9
@@ -116,6 +116,7 @@
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    10
 
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    11
 #include "cryptlib.h"
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    12
 #include <openssl/safestack.h>
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    13
+#include <pthread.h>
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    14
 
84e093c079e2 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)
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    16
 static double SSLeay_MSVC5_hack=0.0; /* and for VC1.5 */
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    17
@@ -181,6 +182,7 @@
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    18
    numbers.  */
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    19
 static STACK_OF(CRYPTO_dynlock) *dyn_locks=NULL;
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    20
 
84e093c079e2 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;
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    22
 
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    23
 static void (MS_FAR *locking_callback)(int mode,int type,
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    24
 	const char *file,int line)=0;
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    25
@@ -406,6 +409,79 @@
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    26
 	return(add_lock_callback);
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    27
 	}
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    28
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    29
+/*
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    30
+ * 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
    31
+ * using when CRYPTO_lock() is called.
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    32
+ */ 
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    33
+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
    34
+    int line)
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    35
+	{
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    36
+	if (mode & CRYPTO_LOCK)
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    37
+		{
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    38
+		pthread_mutex_lock(&solaris_openssl_locks[type]);
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    39
+		}
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    40
+	else
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    41
+		{
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    42
+		pthread_mutex_unlock(&solaris_openssl_locks[type]);
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    43
+		}
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    44
+	}
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    45
+
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    46
+
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    47
+/*
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    48
+ * 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
    49
+ * 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
    50
+ */
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    51
+static void solaris_fork_child(void)
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    52
+	{
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    53
+		/*
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    54
+		 * clear locking_callback to indicate that locks should
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    55
+		 * be reinitialized.
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    56
+		 */
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    57
+		locking_callback = NULL;
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    58
+		solaris_locking_setup();
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    59
+	}
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    60
+
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    61
+/*
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    62
+ * 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
    63
+ * sets the locking callback.
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    64
+ */
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    65
+void solaris_locking_setup()
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
+	int i;
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    68
+	int num_locks;
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    69
+
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    70
+	/* locking callback is already setup. Nothing to do */
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    71
+	if (locking_callback != NULL)
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    72
+		{
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    73
+		return;
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    74
+		}
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    75
+
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    76
+	/*
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    77
+	 * Set atfork handler so that child can setup its own mutexes and
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    78
+	 * locking callbacks when it is forked
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    79
+	 */
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    80
+	(void) pthread_atfork(NULL, NULL, solaris_fork_child);
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    81
+
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    82
+	/* allocate locks needed by OpenSSL  */
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    83
+	num_locks = CRYPTO_num_locks();
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    84
+	solaris_openssl_locks =
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    85
+	    OPENSSL_malloc(sizeof (pthread_mutex_t) * num_locks);
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    86
+	if (solaris_openssl_locks == NULL)
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    87
+		{
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    88
+		fprintf(stderr,
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    89
+			"solaris_locking_setup: memory allocation failure.\n");
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    90
+		abort();
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    91
+		}
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    92
+
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    93
+	/* initialize openssl mutexes */
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    94
+	for (i = 0; i < num_locks; i++)
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    95
+		{
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    96
+		pthread_mutex_init(&solaris_openssl_locks[i], NULL);
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    97
+		}
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    98
+	locking_callback = solaris_locking_callback;
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    99
+
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   100
+	}
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   101
+
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   102
 void CRYPTO_set_locking_callback(void (*func)(int mode,int type,
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   103
 					      const char *file,int line))
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   104
 	{
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   105
@@ -413,7 +478,11 @@
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   106
 	 * are started.
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   107
 	 */
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   108
 	OPENSSL_init();
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   109
-	locking_callback=func;
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   110
+
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   111
+	/*
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   112
+	 * we now setup our own locking callback and mutexes, and disallow
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   113
+	 * setting of another locking callback.
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   114
+	 */
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   115
 	}
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   116
 
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   117
 void CRYPTO_set_add_lock_callback(int (*func)(int *num,int mount,int type,
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   118
--- 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
   119
+++ 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
   120
@@ -104,6 +104,8 @@
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   121
 void *OPENSSL_stderr(void);
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   122
 extern int OPENSSL_NONPIC_relocated;
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   123
 
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   124
+void solaris_locking_setup();
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
 #ifdef  __cplusplus
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   127
 }
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   128
 #endif
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   129
--- 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
   130
+++ openssl-1.0.1f/crypto/sparccpuid.S	Thu Feb  6 16:04:14 2014
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   131
@@ -398,5 +398,7 @@
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   132
 .size	OPENSSL_cleanse,.-OPENSSL_cleanse
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   133
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   134
 .section	".init",#alloc,#execinstr
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   135
+	call	solaris_locking_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   136
+	nop
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   137
 	call	OPENSSL_cpuid_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   138
 	nop
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   139
--- 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
   140
+++ 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
   141
@@ -20,7 +20,10 @@
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   142
 print<<___;
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   143
 .extern		OPENSSL_cpuid_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   144
 .hidden		OPENSSL_cpuid_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   145
+.extern		solaris_locking_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   146
+.hidden		solaris_locking_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   147
 .section	.init
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   148
+	call	solaris_locking_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   149
 	call	OPENSSL_cpuid_setup
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   150
 
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   151
 .hidden	OPENSSL_ia32cap_P
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   152
--- 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
   153
+++ openssl-1.0.1f/crypto/x86cpuid.pl	Wed Feb 12 13:38:31 2014
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   154
@@ -353,6 +353,7 @@
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   155
 	&ret	();
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   156
 &function_end_B("OPENSSL_ia32_rdrand");
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   157
 
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   158
+&initseg("solaris_locking_setup");
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   159
 &initseg("OPENSSL_cpuid_setup");
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   160
 
84e093c079e2 PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   161
 &asm_finish();