Home | History | Annotate | Download | only in patches
      1 diff -pu a/nss/lib/ssl/sslinfo.c b/nss/lib/ssl/sslinfo.c
      2 --- a/nss/lib/ssl/sslinfo.c	2014-01-17 17:49:26.072517368 -0800
      3 +++ b/nss/lib/ssl/sslinfo.c	2014-01-17 18:00:29.773545219 -0800
      4 @@ -350,8 +350,13 @@ SSL_ExportKeyingMaterial(PRFileDesc *fd,
      5  	return SECFailure;
      6      }
      7  
      8 +    ssl_GetRecvBufLock(ss);
      9 +    ssl_GetSSL3HandshakeLock(ss);
     10 +
     11      if (ss->version < SSL_LIBRARY_VERSION_3_1_TLS) {
     12  	PORT_SetError(SSL_ERROR_FEATURE_NOT_SUPPORTED_FOR_VERSION);
     13 +	ssl_ReleaseSSL3HandshakeLock(ss);
     14 +	ssl_ReleaseRecvBufLock(ss);
     15  	return SECFailure;
     16      }
     17  
     18 @@ -362,13 +367,17 @@ SSL_ExportKeyingMaterial(PRFileDesc *fd,
     19      }
     20      val = PORT_Alloc(valLen);
     21      if (!val) {
     22 +	ssl_ReleaseSSL3HandshakeLock(ss);
     23 +	ssl_ReleaseRecvBufLock(ss);
     24  	return SECFailure;
     25      }
     26      i = 0;
     27 +
     28      PORT_Memcpy(val + i, &ss->ssl3.hs.client_random.rand, SSL3_RANDOM_LENGTH);
     29      i += SSL3_RANDOM_LENGTH;
     30      PORT_Memcpy(val + i, &ss->ssl3.hs.server_random.rand, SSL3_RANDOM_LENGTH);
     31      i += SSL3_RANDOM_LENGTH;
     32 +
     33      if (hasContext) {
     34  	val[i++] = contextLen >> 8;
     35  	val[i++] = contextLen;
     36 @@ -389,6 +398,8 @@ SSL_ExportKeyingMaterial(PRFileDesc *fd,
     37  					 valLen, out, outLen);
     38      }
     39      ssl_ReleaseSpecReadLock(ss);
     40 +    ssl_ReleaseSSL3HandshakeLock(ss);
     41 +    ssl_ReleaseRecvBufLock(ss);
     42  
     43      PORT_ZFree(val, valLen);
     44      return rv;
     45