summaryrefslogtreecommitdiff
path: root/security
diff options
context:
space:
mode:
authoralexei.volkov.bugs%sun.com <devnull@localhost>2011-03-24 16:30:57 +0000
committeralexei.volkov.bugs%sun.com <devnull@localhost>2011-03-24 16:30:57 +0000
commitb3b283215d0e06e7e94d47674d9977c376ac65d9 (patch)
treec15b4632c6dde1f3426b451a4dd9d0bdad5e7815 /security
parent4ef1c80bc2cdc4d3ff292798f78fabc441930592 (diff)
downloadnss-hg-b3b283215d0e06e7e94d47674d9977c376ac65d9.tar.gz
Possible minor memory leak in SNI code. r=alexei, bob. Patch is provided by Meena Vyas.
Diffstat (limited to 'security')
-rw-r--r--security/nss/lib/ssl/ssl3ext.c11
-rw-r--r--security/nss/lib/ssl/sslnonce.c3
2 files changed, 10 insertions, 4 deletions
diff --git a/security/nss/lib/ssl/ssl3ext.c b/security/nss/lib/ssl/ssl3ext.c
index a0be8db9f..02ebc49f5 100644
--- a/security/nss/lib/ssl/ssl3ext.c
+++ b/security/nss/lib/ssl/ssl3ext.c
@@ -1266,14 +1266,17 @@ no_ticket:
SSL_GETPID(), ss->fd));
ssl3stats = SSL_GetStatistics();
SSL_AtomicIncrementLong(& ssl3stats->hch_sid_ticket_parse_failures );
- if (sid) {
- ssl_FreeSID(sid);
- sid = NULL;
- }
}
rv = SECSuccess;
loser:
+ /* ss->sec.ci.sid == sid if it did NOT come here via goto statement
+ * in that case do not free sid
+ */
+ if (sid && (ss->sec.ci.sid != sid)) {
+ ssl_FreeSID(sid);
+ sid = NULL;
+ }
if (decrypted_state != NULL) {
SECITEM_FreeItem(decrypted_state, PR_TRUE);
decrypted_state = NULL;
diff --git a/security/nss/lib/ssl/sslnonce.c b/security/nss/lib/ssl/sslnonce.c
index 8c097f8d4..6a8fc4757 100644
--- a/security/nss/lib/ssl/sslnonce.c
+++ b/security/nss/lib/ssl/sslnonce.c
@@ -222,6 +222,9 @@ ssl_DestroySID(sslSessionID *sid)
if (sid->u.ssl3.sessionTicket.ticket.data) {
SECITEM_FreeItem(&sid->u.ssl3.sessionTicket.ticket, PR_FALSE);
}
+ if (sid->u.ssl3.srvName.data) {
+ SECITEM_FreeItem(&sid->u.ssl3.srvName, PR_FALSE);
+ }
PORT_ZFree(sid, sizeof(sslSessionID));
}