Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
mozilla-nss.5768
nss-session_ticket_no_wrapping_key.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File nss-session_ticket_no_wrapping_key.patch of Package mozilla-nss.5768
# HG changeset patch # Parent e0e8dcd852999989cb4e57d0fb8c1da256723074 bmo#1320695 - Using SessionTicket extension along with any ECDHE-ECDSA ciphersuite renders selfserv unusable When session ticket is used and wrapping key pair (for caching generated keys at server side) is not available, disable caching instead of returning an error. Also related to CVE-2016-9574 / bsc#1015499 diff --git a/lib/ssl/ssl3exthandle.c b/lib/ssl/ssl3exthandle.c --- a/lib/ssl/ssl3exthandle.c +++ b/lib/ssl/ssl3exthandle.c @@ -94,31 +94,32 @@ ssl3_SessionTicketShutdown(void *appData static PRStatus ssl3_GenerateSessionTicketKeys(void *data) { SECStatus rv; sslSocket *ss = (sslSocket *)data; sslServerCertType certType = { ssl_auth_rsa_decrypt, NULL }; const sslServerCert *sc; - SECKEYPrivateKey *svrPrivKey; - SECKEYPublicKey *svrPubKey; + SECKEYPrivateKey *svrPrivKey = NULL; + SECKEYPublicKey *svrPubKey = NULL; sc = ssl_FindServerCert(ss, &certType); if (!sc || !sc->serverKeyPair) { SSL_DBG(("%d: SSL[%d]: No ssl_auth_rsa_decrypt cert and key pair", SSL_GETPID(), ss->fd)); - goto loser; - } - svrPrivKey = sc->serverKeyPair->privKey; - svrPubKey = sc->serverKeyPair->pubKey; - if (svrPrivKey == NULL || svrPubKey == NULL) { - SSL_DBG(("%d: SSL[%d]: Pub or priv key(s) is NULL.", - SSL_GETPID(), ss->fd)); - goto loser; + } else { + svrPrivKey = sc->serverKeyPair->privKey; + svrPubKey = sc->serverKeyPair->pubKey; + if (svrPrivKey == NULL || svrPubKey == NULL) { + SSL_DBG(("%d: SSL[%d]: Pub or priv key(s) is NULL.", + SSL_GETPID(), ss->fd)); + svrPrivKey = NULL; + svrPubKey = NULL; + } } /* Get a copy of the session keys from shared memory. */ PORT_Memcpy(key_name, SESS_TICKET_KEY_NAME_PREFIX, sizeof(SESS_TICKET_KEY_NAME_PREFIX)); if (!ssl_GetSessionTicketKeys(svrPrivKey, svrPubKey, ss->pkcs11PinArg, &key_name[SESS_TICKET_KEY_NAME_PREFIX_LEN], &session_ticket_enc_key, &session_ticket_mac_key)) diff --git a/lib/ssl/sslsnce.c b/lib/ssl/sslsnce.c --- a/lib/ssl/sslsnce.c +++ b/lib/ssl/sslsnce.c @@ -1826,19 +1826,21 @@ ssl_GetSessionTicketKeys(SECKEYPrivateKe unsigned char *keyName, PK11SymKey **aesKey, PK11SymKey **macKey) { PRUint32 now = 0; PRBool rv = PR_FALSE; PRBool keysGenerated = PR_FALSE; cacheDesc *cache = &globalCache; - if (!cache->cacheMem) { - /* cache is uninitialized. Generate keys and return them - * without caching. */ + if (!cache->cacheMem || !svrPrivKey || !svrPubKey) { + /* Generated keys cannot be cached, because: + * - the cache is not initialized, or + * - key pairs to wrap them are not available + * Generate keys and return them without caching. */ return GenerateTicketKeys(pwArg, keyName, aesKey, macKey); } now = LockSidCacheLock(cache->keyCacheLock, now); if (!now) return rv; if (!*(cache->ticketKeysValid)) {
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor