Include support for an add_lock callback to tiny FIPS locking API.
diff --git a/crypto/lock.c b/crypto/lock.c
index bbce52a..6f6681d 100644
--- a/crypto/lock.c
+++ b/crypto/lock.c
@@ -384,7 +384,7 @@
 	struct CRYPTO_dynlock_value *l, const char *file, int line))
 	{
 #ifdef OPENSSL_FIPS
-	FIPS_set_locking_callback(CRYPTO_lock);
+	FIPS_set_locking_callbacks(CRYPTO_lock, CRYPTO_add_lock);
 #endif
 	dynlock_lock_callback=func;
 	}
@@ -412,7 +412,7 @@
 					      const char *file,int line))
 	{
 #ifdef OPENSSL_FIPS
-	FIPS_set_locking_callback(CRYPTO_lock);
+	FIPS_set_locking_callbacks(CRYPTO_lock, CRYPTO_add_lock);
 #endif
 	locking_callback=func;
 	}
diff --git a/fips/fips.h b/fips/fips.h
index facdbc7..97fab1d 100644
--- a/fips/fips.h
+++ b/fips/fips.h
@@ -109,14 +109,17 @@
 void fips_set_selftest_fail(void);
 int fips_check_rsa(struct rsa_st *rsa);
 
-void FIPS_set_locking_callback(void (*func)(int mode, int type,
-				const char *file,int line));
+void FIPS_set_locking_callbacks(void (*func)(int mode, int type,
+				const char *file,int line),
+				int (*add_cb)(int *pointer, int amount,
+					int type, const char *file, int line));
 
 /* Where necessary redirect standard OpenSSL APIs to FIPS versions */
 
 #if defined(OPENSSL_FIPSCANISTER) && defined(OPENSSL_FIPSAPI)
 
 #define CRYPTO_lock FIPS_lock
+#define CRYPTO_add_lock FIPS_add_lock
 #define CRYPTO_malloc FIPS_malloc
 #define CRYPTO_free FIPS_free
 
diff --git a/fips/utl/fips_lck.c b/fips/utl/fips_lck.c
index 32a4443..7cb10bc 100644
--- a/fips/utl/fips_lck.c
+++ b/fips/utl/fips_lck.c
@@ -59,6 +59,8 @@
 /* FIPS locking callbacks */
 
 static void (*fips_lck_cb)(int mode, int type,const char *file,int line) = 0;
+static int (*fips_add_cb)(int *pointer, int amount, int type, const char *file,
+	     int line);
 
 void FIPS_lock(int mode, int type,const char *file,int line)
 	{
@@ -66,8 +68,20 @@
 		fips_lck_cb(mode, type, file, line);
 	}
 
-void FIPS_set_locking_callback (void (*func)(int mode, int type,
-				const char *file,int line))
+void FIPS_set_locking_callbacks(void (*func)(int mode, int type,
+				const char *file,int line),
+				int (*add_cb)(int *pointer, int amount,
+					int type, const char *file, int line))
 	{
 	fips_lck_cb = func;
+	fips_add_cb = add_cb;
+	}
+
+int FIPS_add_lock(int *pointer, int amount, int type, const char *file,
+	     int line)
+	{
+	if (fips_add_cb)
+		return fips_add_cb(pointer, amount, type, file, line);
+	*pointer += amount;
+	return *pointer;
 	}
diff --git a/util/libeay.num b/util/libeay.num
index 1aa599f..531b50f 100755
--- a/util/libeay.num
+++ b/util/libeay.num
@@ -4251,7 +4251,7 @@
 EC_GFp_nistp224_method                  4622	EXIST:!WIN32:FUNCTION:EC
 FIPS_rsa_verify_ctx                     4623	EXIST:OPENSSL_FIPS:FUNCTION:RSA
 FIPS_selftest                           4624	EXIST:OPENSSL_FIPS:FUNCTION:
-FIPS_set_locking_callback               4625	EXIST:OPENSSL_FIPS:FUNCTION:
+FIPS_set_locking_callbacks              4625	EXIST:OPENSSL_FIPS:FUNCTION:
 fips_set_selftest_fail                  4626	EXIST:OPENSSL_FIPS:FUNCTION:
 fips_check_rsa                          4627	EXIST:OPENSSL_FIPS:FUNCTION:
 FIPS_check_incore_fingerprint           4628	EXIST:OPENSSL_FIPS:FUNCTION: