summaryrefslogtreecommitdiffstats
path: root/ssl/record/ssl3_buffer.c
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2017-12-04 14:28:35 +0000
committerMatt Caswell <matt@openssl.org>2017-12-08 16:42:01 +0000
commit196f2cbb789333ee1ac1a1ec0de654c8bef4eb59 (patch)
tree82701613ed580091a250057f7b76678ee11a5bc6 /ssl/record/ssl3_buffer.c
parenta0fda2cf2dac8bc0d309261b3aaf4027a188b08c (diff)
Update ssl3_get_record() to use SSLfatal()
Reviewed-by: Rich Salz <rsalz@openssl.org> (Merged from https://github.com/openssl/openssl/pull/4841)
Diffstat (limited to 'ssl/record/ssl3_buffer.c')
-rw-r--r--ssl/record/ssl3_buffer.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/ssl/record/ssl3_buffer.c b/ssl/record/ssl3_buffer.c
index 6d3a23273b..53bd4cb190 100644
--- a/ssl/record/ssl3_buffer.c
+++ b/ssl/record/ssl3_buffer.c
@@ -60,18 +60,22 @@ int ssl3_setup_read_buffer(SSL *s)
#endif
if (b->default_len > len)
len = b->default_len;
- if ((p = OPENSSL_malloc(len)) == NULL)
- goto err;
+ if ((p = OPENSSL_malloc(len)) == NULL) {
+ /*
+ * We've got a malloc failure, and we're still initialising buffers.
+ * We assume we're so doomed that we won't even be able to send an
+ * alert.
+ */
+ SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_SETUP_READ_BUFFER,
+ ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
b->buf = p;
b->len = len;
}
RECORD_LAYER_set_packet(&s->rlayer, &(b->buf[0]));
return 1;
-
- err:
- SSLerr(SSL_F_SSL3_SETUP_READ_BUFFER, ERR_R_MALLOC_FAILURE);
- return 0;
}
int ssl3_setup_write_buffer(SSL *s, size_t numwpipes, size_t len)
@@ -116,7 +120,12 @@ int ssl3_setup_write_buffer(SSL *s, size_t numwpipes, size_t len)
p = OPENSSL_malloc(len);
if (p == NULL) {
s->rlayer.numwpipes = currpipe;
- SSLfatal(s, SSL_AD_INTERNAL_ERROR,
+ /*
+ * We've got a malloc failure, and we're still initialising
+ * buffers. We assume we're so doomed that we won't even be able
+ * to send an alert.
+ */
+ SSLfatal(s, SSL_AD_NO_ALERT,
SSL_F_SSL3_SETUP_WRITE_BUFFER, ERR_R_MALLOC_FAILURE);
return 0;
}
@@ -131,8 +140,10 @@ int ssl3_setup_write_buffer(SSL *s, size_t numwpipes, size_t len)
int ssl3_setup_buffers(SSL *s)
{
- if (!ssl3_setup_read_buffer(s))
+ if (!ssl3_setup_read_buffer(s)) {
+ /* SSLfatal() already called */
return 0;
+ }
if (!ssl3_setup_write_buffer(s, 1, 0)) {
/* SSLfatal() already called */
return 0;