components/openssl/openssl-1.0.1/patches/29_fork_safe.patch
author Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
Wed, 26 Mar 2014 14:54:04 -0700
branchs11-update
changeset 3017 da8a40fb54dd
child 4006 c737cefdce54
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:
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)
da8a40fb54dd 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 */
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    17
@@ -181,6 +182,7 @@
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    18
    numbers.  */
da8a40fb54dd 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;
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;
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    22
 
da8a40fb54dd 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,
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    24
 	const char *file,int line)=0;
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    25
@@ -406,6 +409,79 @@
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    26
 	return(add_lock_callback);
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    27
 	}
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    28
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
+ * 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
    31
+ * using when CRYPTO_lock() is called.
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    32
+ */ 
da8a40fb54dd 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,
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    34
+    int line)
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    35
+	{
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    36
+	if (mode & CRYPTO_LOCK)
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    37
+		{
da8a40fb54dd 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]);
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    39
+		}
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    40
+	else
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    41
+		{
da8a40fb54dd 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]);
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    43
+		}
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
+ * 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
    49
+ * 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
    50
+ */
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    51
+static void solaris_fork_child(void)
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    52
+	{
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
+		 * 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
    55
+		 * be reinitialized.
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    56
+		 */
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    57
+		locking_callback = NULL;
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    58
+		solaris_locking_setup();
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    59
+	}
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
+ * 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
    63
+ * sets the locking callback.
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    64
+ */
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    65
+void solaris_locking_setup()
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    66
+	{
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    67
+	int i;
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    68
+	int num_locks;
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    69
+
da8a40fb54dd 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 */
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    71
+	if (locking_callback != NULL)
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    72
+		{
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    73
+		return;
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    74
+		}
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
+	 * 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
    78
+	 * locking callbacks when it is forked
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    79
+	 */
da8a40fb54dd 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);
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    81
+
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    82
+	/* allocate locks needed by OpenSSL  */
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    83
+	num_locks = CRYPTO_num_locks();
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    84
+	solaris_openssl_locks =
da8a40fb54dd 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);
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    86
+	if (solaris_openssl_locks == NULL)
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    87
+		{
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    88
+		fprintf(stderr,
da8a40fb54dd 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");
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    90
+		abort();
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    91
+		}
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
+	/* initialize openssl mutexes */
da8a40fb54dd 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++)
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    95
+		{
da8a40fb54dd 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);
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    97
+		}
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    98
+	locking_callback = solaris_locking_callback;
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
    99
+
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   100
+	}
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   101
+
da8a40fb54dd 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,
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   103
 					      const char *file,int line))
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   104
 	{
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   105
@@ -413,7 +478,11 @@
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   106
 	 * are started.
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   107
 	 */
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   108
 	OPENSSL_init();
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   109
-	locking_callback=func;
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   110
+
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
+	 * 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
   113
+	 * setting of another locking callback.
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   114
+	 */
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   115
 	}
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   116
 
da8a40fb54dd 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,
da8a40fb54dd 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
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	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
   120
@@ -104,6 +104,8 @@
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   121
 void *OPENSSL_stderr(void);
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   122
 extern int OPENSSL_NONPIC_relocated;
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   123
 
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   124
+void solaris_locking_setup();
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   125
+
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   126
 #ifdef  __cplusplus
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   127
 }
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   128
 #endif
da8a40fb54dd 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
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	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
   131
@@ -398,5 +398,7 @@
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   132
 .size	OPENSSL_cleanse,.-OPENSSL_cleanse
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   133
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   134
 .section	".init",#alloc,#execinstr
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   135
+	call	solaris_locking_setup
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   136
+	nop
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   137
 	call	OPENSSL_cpuid_setup
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   138
 	nop
da8a40fb54dd 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
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	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
   141
@@ -20,7 +20,10 @@
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   142
 print<<___;
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   143
 .extern		OPENSSL_cpuid_setup
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   144
 .hidden		OPENSSL_cpuid_setup
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   145
+.extern		solaris_locking_setup
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   146
+.hidden		solaris_locking_setup
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   147
 .section	.init
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   148
+	call	solaris_locking_setup
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   149
 	call	OPENSSL_cpuid_setup
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   150
 
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   151
 .hidden	OPENSSL_ia32cap_P
da8a40fb54dd 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
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	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
   154
@@ -353,6 +353,7 @@
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   155
 	&ret	();
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   156
 &function_end_B("OPENSSL_ia32_rdrand");
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   157
 
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   158
+&initseg("solaris_locking_setup");
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   159
 &initseg("OPENSSL_cpuid_setup");
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   160
 
da8a40fb54dd PSARC/2014/077 OpenSSL Thread and Fork Safety
Misaki Miyashita <Misaki.Miyashita@Oracle.COM>
parents:
diff changeset
   161
 &asm_finish();