summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormiod <>2014-05-26 17:06:21 +0000
committermiod <>2014-05-26 17:06:21 +0000
commit25b28f1dc31dbf2e8b7d6584cb209dca4fb4896a (patch)
tree905d7a824b69366bc00870b29f40d00a24e02ee7 /src
parent1d684f2ee67a4c3ad413e8d27aa63da4baa5862f (diff)
downloadopenbsd-25b28f1dc31dbf2e8b7d6584cb209dca4fb4896a.tar.gz
openbsd-25b28f1dc31dbf2e8b7d6584cb209dca4fb4896a.tar.bz2
openbsd-25b28f1dc31dbf2e8b7d6584cb209dca4fb4896a.zip
Make sure all error paths in dtls1_buffer_record() invoke SSLErr by
factoring error handling. ok jsing@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libssl/d1_pkt.c32
-rw-r--r--src/lib/libssl/src/ssl/d1_pkt.c32
2 files changed, 24 insertions, 40 deletions
diff --git a/src/lib/libssl/d1_pkt.c b/src/lib/libssl/d1_pkt.c
index 0273db236c..4e306829bc 100644
--- a/src/lib/libssl/d1_pkt.c
+++ b/src/lib/libssl/d1_pkt.c
@@ -224,15 +224,8 @@ dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority)
224 224
225 rdata = malloc(sizeof(DTLS1_RECORD_DATA)); 225 rdata = malloc(sizeof(DTLS1_RECORD_DATA));
226 item = pitem_new(priority, rdata); 226 item = pitem_new(priority, rdata);
227 if (rdata == NULL || item == NULL) { 227 if (rdata == NULL || item == NULL)
228 if (rdata != NULL) 228 goto err;
229 free(rdata);
230 if (item != NULL)
231 pitem_free(item);
232
233 SSLerr(SSL_F_DTLS1_BUFFER_RECORD, ERR_R_INTERNAL_ERROR);
234 return (0);
235 }
236 229
237 rdata->packet = s->packet; 230 rdata->packet = s->packet;
238 rdata->packet_length = s->packet_length; 231 rdata->packet_length = s->packet_length;
@@ -254,21 +247,20 @@ dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority)
254 memset(&(s->s3->rbuf), 0, sizeof(SSL3_BUFFER)); 247 memset(&(s->s3->rbuf), 0, sizeof(SSL3_BUFFER));
255 memset(&(s->s3->rrec), 0, sizeof(SSL3_RECORD)); 248 memset(&(s->s3->rrec), 0, sizeof(SSL3_RECORD));
256 249
257 if (!ssl3_setup_buffers(s)) { 250 if (!ssl3_setup_buffers(s))
258 SSLerr(SSL_F_DTLS1_BUFFER_RECORD, ERR_R_INTERNAL_ERROR); 251 goto err;
259 free(rdata);
260 pitem_free(item);
261 return (0);
262 }
263 252
264 /* insert should not fail, since duplicates are dropped */ 253 /* insert should not fail, since duplicates are dropped */
265 if (pqueue_insert(queue->q, item) == NULL) { 254 if (pqueue_insert(queue->q, item) == NULL)
266 free(rdata); 255 goto err;
267 pitem_free(item);
268 return (0);
269 }
270 256
271 return (1); 257 return (1);
258
259err:
260 SSLerr(SSL_F_DTLS1_BUFFER_RECORD, ERR_R_INTERNAL_ERROR);
261 free(rdata);
262 pitem_free(item);
263 return (0);
272} 264}
273 265
274 266
diff --git a/src/lib/libssl/src/ssl/d1_pkt.c b/src/lib/libssl/src/ssl/d1_pkt.c
index 0273db236c..4e306829bc 100644
--- a/src/lib/libssl/src/ssl/d1_pkt.c
+++ b/src/lib/libssl/src/ssl/d1_pkt.c
@@ -224,15 +224,8 @@ dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority)
224 224
225 rdata = malloc(sizeof(DTLS1_RECORD_DATA)); 225 rdata = malloc(sizeof(DTLS1_RECORD_DATA));
226 item = pitem_new(priority, rdata); 226 item = pitem_new(priority, rdata);
227 if (rdata == NULL || item == NULL) { 227 if (rdata == NULL || item == NULL)
228 if (rdata != NULL) 228 goto err;
229 free(rdata);
230 if (item != NULL)
231 pitem_free(item);
232
233 SSLerr(SSL_F_DTLS1_BUFFER_RECORD, ERR_R_INTERNAL_ERROR);
234 return (0);
235 }
236 229
237 rdata->packet = s->packet; 230 rdata->packet = s->packet;
238 rdata->packet_length = s->packet_length; 231 rdata->packet_length = s->packet_length;
@@ -254,21 +247,20 @@ dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority)
254 memset(&(s->s3->rbuf), 0, sizeof(SSL3_BUFFER)); 247 memset(&(s->s3->rbuf), 0, sizeof(SSL3_BUFFER));
255 memset(&(s->s3->rrec), 0, sizeof(SSL3_RECORD)); 248 memset(&(s->s3->rrec), 0, sizeof(SSL3_RECORD));
256 249
257 if (!ssl3_setup_buffers(s)) { 250 if (!ssl3_setup_buffers(s))
258 SSLerr(SSL_F_DTLS1_BUFFER_RECORD, ERR_R_INTERNAL_ERROR); 251 goto err;
259 free(rdata);
260 pitem_free(item);
261 return (0);
262 }
263 252
264 /* insert should not fail, since duplicates are dropped */ 253 /* insert should not fail, since duplicates are dropped */
265 if (pqueue_insert(queue->q, item) == NULL) { 254 if (pqueue_insert(queue->q, item) == NULL)
266 free(rdata); 255 goto err;
267 pitem_free(item);
268 return (0);
269 }
270 256
271 return (1); 257 return (1);
258
259err:
260 SSLerr(SSL_F_DTLS1_BUFFER_RECORD, ERR_R_INTERNAL_ERROR);
261 free(rdata);
262 pitem_free(item);
263 return (0);
272} 264}
273 265
274 266