diff -burN android-openssl.orig/crypto/conf/conf_api.c android-openssl-lhash/crypto/conf/conf_api.c
--- android-openssl.orig/crypto/conf/conf_api.c	2013-02-11 10:26:04.000000000 -0500
+++ android-openssl-lhash/crypto/conf/conf_api.c	2013-11-05 14:16:49.500027656 -0500
@@ -225,9 +225,6 @@
 	{
 	if (conf == NULL || conf->data == NULL) return;
 
-	lh_CONF_VALUE_down_load(conf->data)=0; /* evil thing to make
-				  * sure the 'OPENSSL_free()' works as
-				  * expected */
 	lh_CONF_VALUE_doall_arg(conf->data,
 				LHASH_DOALL_ARG_FN(value_free_hash),
 				LHASH_OF(CONF_VALUE), conf->data);
diff -burN android-openssl.orig/crypto/lhash/lhash.c android-openssl-lhash/crypto/lhash/lhash.c
--- android-openssl.orig/crypto/lhash/lhash.c	2013-02-11 10:26:04.000000000 -0500
+++ android-openssl-lhash/crypto/lhash/lhash.c	2013-11-05 14:16:49.500027656 -0500
@@ -94,6 +94,7 @@
  *
  * 1.0 eay - First version
  */
+#include <limits.h>
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -107,6 +108,113 @@
 #define UP_LOAD		(2*LH_LOAD_MULT) /* load times 256  (default 2) */
 #define DOWN_LOAD	(LH_LOAD_MULT)   /* load times 256  (default 1) */
 
+/* Maximum number of nodes to guarantee the load computations don't overflow */
+#define MAX_LOAD_ITEMS   (UINT_MAX / LH_LOAD_MULT)
+
+/* The field 'iteration_state' is used to hold data to ensure that a hash
+ * table is not resized during an 'insert' or 'delete' operation performed
+ * within a lh_doall/lh_doall_arg call.
+ *
+ * Conceptually, this records two things:
+ *
+ *   - A 'depth' count, which is incremented at the start of lh_doall*,
+ *     and decremented just before it returns.
+ *
+ *   - A 'mutated' boolean flag, which is set in lh_insert() or lh_delete()
+ *     when the operation is performed with a non-0 depth.
+ *
+ * The following are helper macros to handle this state in a more explicit
+ * way.
+ */
+
+/* Reset the iteration state to its defaults. */
+#define LH_ITERATION_RESET(lh) do { \
+	(lh)->iteration_state = 0; \
+	} while (0)
+
+/* Returns 1 if the hash table is currently being iterated on, 0 otherwise. */
+#define LH_ITERATION_IS_ACTIVE(lh)  ((lh)->iteration_state >= 2)
+
+/* Increment iteration depth. This should always be followed by a paired call
+ * to LH_ITERATION_DECREMENT_DEPTH(). */
+#define LH_ITERATION_INCREMENT_DEPTH(lh) do { \
+	(lh)->iteration_state += 2; \
+	} while (0)
+
+/* Decrement iteration depth. This should always be called after a paired call
+ * to LH_ITERATION_INCREMENT_DEPTH(). */
+#define LH_ITERATION_DECREMENT_DEPTH(lh) do { \
+	(lh)->iteration_state -= 2; \
+	} while (0)
+
+/* Return 1 if the iteration 'mutated' flag is set, 0 otherwise. */
+#define LH_ITERATION_IS_MUTATED(lh) (((lh)->iteration_state & 1) != 0)
+
+/* Set the iteration 'mutated' flag to 1. LH_ITERATION_RESET() to reset it. */
+#define LH_ITERATION_SET_MUTATED(lh) do { \
+	(lh)->iteration_state |= 1; \
+	} while (0)
+
+/* This macro returns 1 if the hash table should be expanded due to its current
+ * load, or 0 otherwise. The exact comparison to be performed is expressed by
+ * the mathematical expression (where '//' denotes division over real numbers):
+ *
+ *      (num_items // num_nodes) >= (up_load // LOAD_MULT)    or
+ *      (num_items * LOAD_MULT // num_nodes) >= up_load.
+ *
+ * Given that the C language operator '/' implements integer division, i.e:
+ *     a // b == (a / b) + epsilon  (with 0 <= epsilon < 1, for positive a & b)
+ *
+ * This can be rewritten as:
+ *     (num_items * LOAD_MULT / num_nodes) + epsilon >= up_load
+ *     (num_items * LOAD_MULT / num_nodes) - up_load >= - epsilon
+ *
+ * Let's call 'A' the left-hand side of the equation above, it is an integer
+ * and:
+ *     - If A >= 0, the expression is true for any value of epsilon.
+ *     - If A <= -1, the expression is also true for any value of epsilon.
+ *
+ * In other words, this is equivalent to 'A >= 0', or:
+ *     (num_items * LOAD_MULT / num_nodes) >= up_load
+ */
+#define LH_SHOULD_EXPAND(lh) \
+	((lh)->num_items < MAX_LOAD_ITEMS && \
+	 (((lh)->num_items*LH_LOAD_MULT/(lh)->num_nodes) >= (lh)->up_load))
+
+/* This macro returns 1 if the hash table should be contracted due to its
+ * current load, or 0 otherwise. Abbreviated computations are:
+ *
+ *    (num_items // num_nodes) <= (down_load // LOAD_MULT)
+ *    (num_items * LOAD_MULT // num_nodes) <= down_load
+ *    (num_items * LOAD_MULT / num_nodes) + epsilon <= down_load
+ *    (num_items * LOAD_MULT / num_nodes) - down_load <= -epsilon
+ *
+ * Let's call 'B' the left-hand side of the equation above:
+ *    - If B <= -1, the expression is true for any value of epsilon.
+ *    - If B >= 1, the expression is false for any value of epsilon.
+ *    - If B == 0, the expression is true for 'epsilon == 0', and false
+ *      otherwise, which is problematic.
+ *
+ * To work around this problem, while keeping the code simple, just change
+ * the initial expression to use a strict inequality, i.e.:
+ *
+ *    (num_items // num_nodes) < (down_load // LOAD_MULT)
+ *
+ * Which leads to:
+ *    (num_items * LOAD_MULT / num_nodes) - down_load < -epsilon
+ *
+ * Then:
+ *    - If 'B <= -1', the expression is true for any value of epsilon.
+ *    - If 'B' >= 0, the expression is false for any value of epsilon,
+ *
+ * In other words, this is equivalent to 'B < 0', or:
+ *     (num_items * LOAD_MULT / num_nodes) < down_load
+ */
+#define LH_SHOULD_CONTRACT(lh) \
+	(((lh)->num_nodes > MIN_NODES) && \
+	 ((lh)->num_items < MAX_LOAD_ITEMS && \
+	 ((lh)->num_items*LH_LOAD_MULT/(lh)->num_nodes) < (lh)->down_load))
+
 static void expand(_LHASH *lh);
 static void contract(_LHASH *lh);
 static LHASH_NODE **getrn(_LHASH *lh, const void *data, unsigned long *rhash);
@@ -147,6 +255,7 @@
 	ret->num_hash_comps=0;
 
 	ret->error=0;
+	LH_ITERATION_RESET(ret);
 	return(ret);
 err1:
 	OPENSSL_free(ret);
@@ -183,7 +292,10 @@
 	void *ret;
 
 	lh->error=0;
-	if (lh->up_load <= (lh->num_items*LH_LOAD_MULT/lh->num_nodes))
+	/* Do not expand the array if the table is being iterated on. */
+	if (LH_ITERATION_IS_ACTIVE(lh))
+		LH_ITERATION_SET_MUTATED(lh);
+	else if (LH_SHOULD_EXPAND(lh))
 		expand(lh);
 
 	rn=getrn(lh,data,&hash);
@@ -238,8 +350,10 @@
 		}
 
 	lh->num_items--;
-	if ((lh->num_nodes > MIN_NODES) &&
-		(lh->down_load >= (lh->num_items*LH_LOAD_MULT/lh->num_nodes)))
+	/* Do not contract the array if the table is being iterated on. */
+	if (LH_ITERATION_IS_ACTIVE(lh))
+		LH_ITERATION_SET_MUTATED(lh);
+	else if (LH_SHOULD_CONTRACT(lh))
 		contract(lh);
 
 	return(ret);
@@ -276,6 +390,7 @@
 	if (lh == NULL)
 		return;
 
+	LH_ITERATION_INCREMENT_DEPTH(lh);
 	/* reverse the order so we search from 'top to bottom'
 	 * We were having memory leaks otherwise */
 	for (i=lh->num_nodes-1; i>=0; i--)
@@ -283,10 +398,7 @@
 		a=lh->b[i];
 		while (a != NULL)
 			{
-			/* 28/05/91 - eay - n added so items can be deleted
-			 * via lh_doall */
-			/* 22/05/08 - ben - eh? since a is not passed,
-			 * this should not be needed */
+			/* note that 'a' can be deleted by the callback */
 			n=a->next;
 			if(use_arg)
 				func_arg(a->data,arg);
@@ -295,6 +407,19 @@
 			a=n;
 			}
 		}
+
+	LH_ITERATION_DECREMENT_DEPTH(lh);
+	if (!LH_ITERATION_IS_ACTIVE(lh) && LH_ITERATION_IS_MUTATED(lh))
+		{
+		LH_ITERATION_RESET(lh);
+		/* Resize the buckets array if necessary. Each expand() or
+		 * contract() call will double/halve the size of the array,
+		 * respectively, so call them in a loop. */
+		while (LH_SHOULD_EXPAND(lh))
+			expand(lh);
+		while (LH_SHOULD_CONTRACT(lh))
+			contract(lh);
+		}
 	}
 
 void lh_doall(_LHASH *lh, LHASH_DOALL_FN_TYPE func)
diff -burN android-openssl.orig/crypto/lhash/lhash.h android-openssl-lhash/crypto/lhash/lhash.h
--- android-openssl.orig/crypto/lhash/lhash.h	2013-02-11 10:26:04.000000000 -0500
+++ android-openssl-lhash/crypto/lhash/lhash.h	2013-11-05 14:16:49.500027656 -0500
@@ -163,6 +163,7 @@
 	unsigned long num_hash_comps;
 
 	int error;
+	int iteration_state;
 	} _LHASH;	/* Do not use _LHASH directly, use LHASH_OF
 			 * and friends */
 
diff -burN android-openssl.orig/crypto/objects/o_names.c android-openssl-lhash/crypto/objects/o_names.c
--- android-openssl.orig/crypto/objects/o_names.c	2013-02-11 10:26:04.000000000 -0500
+++ android-openssl-lhash/crypto/objects/o_names.c	2013-11-05 14:16:49.500027656 -0500
@@ -350,13 +350,9 @@
 
 void OBJ_NAME_cleanup(int type)
 	{
-	unsigned long down_load;
-
 	if (names_lh == NULL) return;
 
 	free_type=type;
-	down_load=lh_OBJ_NAME_down_load(names_lh);
-	lh_OBJ_NAME_down_load(names_lh)=0;
 
 	lh_OBJ_NAME_doall(names_lh,LHASH_DOALL_FN(names_lh_free));
 	if (type < 0)
@@ -366,7 +362,5 @@
 		names_lh=NULL;
 		name_funcs_stack = NULL;
 		}
-	else
-		lh_OBJ_NAME_down_load(names_lh)=down_load;
 	}
 
diff -burN android-openssl.orig/crypto/objects/obj_dat.c android-openssl-lhash/crypto/objects/obj_dat.c
--- android-openssl.orig/crypto/objects/obj_dat.c	2013-02-11 10:26:04.000000000 -0500
+++ android-openssl-lhash/crypto/objects/obj_dat.c	2013-11-05 14:16:49.500027656 -0500
@@ -227,7 +227,6 @@
 		return ;
 		}
 	if (added == NULL) return;
-	lh_ADDED_OBJ_down_load(added) = 0;
 	lh_ADDED_OBJ_doall(added,LHASH_DOALL_FN(cleanup1)); /* zero counters */
 	lh_ADDED_OBJ_doall(added,LHASH_DOALL_FN(cleanup2)); /* set counters */
 	lh_ADDED_OBJ_doall(added,LHASH_DOALL_FN(cleanup3)); /* free objects */
diff -burN android-openssl.orig/include/openssl/lhash.h android-openssl-lhash/include/openssl/lhash.h
--- android-openssl.orig/include/openssl/lhash.h	2013-11-05 14:11:20.903223251 -0500
+++ android-openssl-lhash/include/openssl/lhash.h	2013-11-05 14:16:49.500027656 -0500
@@ -163,6 +163,7 @@
 	unsigned long num_hash_comps;
 
 	int error;
+	int iteration_state;
 	} _LHASH;	/* Do not use _LHASH directly, use LHASH_OF
 			 * and friends */
 
diff -burN android-openssl.orig/include/openssl/ssl.h android-openssl-lhash/include/openssl/ssl.h
--- android-openssl.orig/include/openssl/ssl.h	2013-11-05 14:11:21.013222124 -0500
+++ android-openssl-lhash/include/openssl/ssl.h	2013-11-05 14:16:49.500027656 -0500
@@ -1681,10 +1681,10 @@
 	SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh)
 
 /* SSL_enable_tls_channel_id either configures a TLS server to accept TLS client
- * IDs from clients, or configure a client to send TLS client IDs to server.
+ * IDs from clients, or configures a client to send TLS client IDs to server.
  * Returns 1 on success. */
-#define SSL_enable_tls_channel_id(s) \
-	SSL_ctrl(s,SSL_CTRL_CHANNEL_ID,0,NULL)
+#define SSL_enable_tls_channel_id(ssl) \
+	SSL_ctrl(ssl,SSL_CTRL_CHANNEL_ID,0,NULL)
 /* SSL_set1_tls_channel_id configures a TLS client to send a TLS Channel ID to
  * compatible servers. private_key must be a P-256 EVP_PKEY*. Returns 1 on
  * success. */
diff -burN android-openssl.orig/ssl/ssl.h android-openssl-lhash/ssl/ssl.h
--- android-openssl.orig/ssl/ssl.h	2013-11-05 14:11:18.363249269 -0500
+++ android-openssl-lhash/ssl/ssl.h	2013-11-05 14:16:49.510027563 -0500
@@ -1681,10 +1681,10 @@
 	SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh)
 
 /* SSL_enable_tls_channel_id either configures a TLS server to accept TLS client
- * IDs from clients, or configure a client to send TLS client IDs to server.
+ * IDs from clients, or configures a client to send TLS client IDs to server.
  * Returns 1 on success. */
-#define SSL_enable_tls_channel_id(s) \
-	SSL_ctrl(s,SSL_CTRL_CHANNEL_ID,0,NULL)
+#define SSL_enable_tls_channel_id(ssl) \
+	SSL_ctrl(ssl,SSL_CTRL_CHANNEL_ID,0,NULL)
 /* SSL_set1_tls_channel_id configures a TLS client to send a TLS Channel ID to
  * compatible servers. private_key must be a P-256 EVP_PKEY*. Returns 1 on
  * success. */
diff -burN android-openssl.orig/ssl/ssl_sess.c android-openssl-lhash/ssl/ssl_sess.c
--- android-openssl.orig/ssl/ssl_sess.c	2013-11-05 14:11:18.363249269 -0500
+++ android-openssl-lhash/ssl/ssl_sess.c	2013-11-05 14:16:49.510027563 -0500
@@ -999,11 +999,8 @@
 	if (tp.cache == NULL) return;
 	tp.time=t;
 	CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);
-	i=CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load;
-	CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load=0;
 	lh_SSL_SESSION_doall_arg(tp.cache, LHASH_DOALL_ARG_FN(timeout),
 				 TIMEOUT_PARAM, &tp);
-	CHECKED_LHASH_OF(SSL_SESSION, tp.cache)->down_load=i;
 	CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX);
 	}
 
