Skip to content

Commit 34e3edb

Browse files
snhensonmattcaswell
authored andcommitted
Fix for CVE-2015-0291
If a client renegotiates using an invalid signature algorithms extension it will crash a server with a NULL pointer dereference. Thanks to David Ramos of Stanford University for reporting this bug. CVE-2015-0291 Reviewed-by: Tim Hudson <tjh@openssl.org>
1 parent 09f0692 commit 34e3edb

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

ssl/t1_lib.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2693,6 +2693,7 @@ int tls1_set_server_sigalgs(SSL *s)
26932693
if (s->cert->shared_sigalgs) {
26942694
OPENSSL_free(s->cert->shared_sigalgs);
26952695
s->cert->shared_sigalgs = NULL;
2696+
s->cert->shared_sigalgslen = 0;
26962697
}
26972698
/* Clear certificate digests and validity flags */
26982699
for (i = 0; i < SSL_PKEY_NUM; i++) {
@@ -3396,6 +3397,7 @@ static int tls1_set_shared_sigalgs(SSL *s)
33963397
if (c->shared_sigalgs) {
33973398
OPENSSL_free(c->shared_sigalgs);
33983399
c->shared_sigalgs = NULL;
3400+
c->shared_sigalgslen = 0;
33993401
}
34003402
/* If client use client signature algorithms if not NULL */
34013403
if (!s->server && c->client_sigalgs && !is_suiteb) {
@@ -3418,12 +3420,14 @@ static int tls1_set_shared_sigalgs(SSL *s)
34183420
preflen = c->peer_sigalgslen;
34193421
}
34203422
nmatch = tls12_shared_sigalgs(s, NULL, pref, preflen, allow, allowlen);
3421-
if (!nmatch)
3422-
return 1;
3423-
salgs = OPENSSL_malloc(nmatch * sizeof(TLS_SIGALGS));
3424-
if (!salgs)
3425-
return 0;
3426-
nmatch = tls12_shared_sigalgs(s, salgs, pref, preflen, allow, allowlen);
3423+
if (nmatch) {
3424+
salgs = OPENSSL_malloc(nmatch * sizeof(TLS_SIGALGS));
3425+
if (!salgs)
3426+
return 0;
3427+
nmatch = tls12_shared_sigalgs(s, salgs, pref, preflen, allow, allowlen);
3428+
} else {
3429+
salgs = NULL;
3430+
}
34273431
c->shared_sigalgs = salgs;
34283432
c->shared_sigalgslen = nmatch;
34293433
return 1;

0 commit comments

Comments
 (0)