summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libssl/d1_pkt.c32
-rw-r--r--src/lib/libssl/src/ssl/d1_pkt.c32
2 files changed, 46 insertions, 18 deletions
diff --git a/src/lib/libssl/d1_pkt.c b/src/lib/libssl/d1_pkt.c
index 7bdf245e84..91e9c146ac 100644
--- a/src/lib/libssl/d1_pkt.c
+++ b/src/lib/libssl/d1_pkt.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: d1_pkt.c,v 1.38 2014/12/14 15:30:50 jsing Exp $ */ 1/* $OpenBSD: d1_pkt.c,v 1.39 2015/01/21 00:15:50 doug Exp $ */
2/* 2/*
3 * DTLS implementation written by Nagendra Modadugu 3 * DTLS implementation written by Nagendra Modadugu
4 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. 4 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
@@ -222,7 +222,7 @@ dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority)
222 rdata = malloc(sizeof(DTLS1_RECORD_DATA)); 222 rdata = malloc(sizeof(DTLS1_RECORD_DATA));
223 item = pitem_new(priority, rdata); 223 item = pitem_new(priority, rdata);
224 if (rdata == NULL || item == NULL) 224 if (rdata == NULL || item == NULL)
225 goto err; 225 goto init_err;
226 226
227 rdata->packet = s->packet; 227 rdata->packet = s->packet;
228 rdata->packet_length = s->packet_length; 228 rdata->packet_length = s->packet_length;
@@ -254,10 +254,13 @@ dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority)
254 return (1); 254 return (1);
255 255
256err: 256err:
257 free(rdata->rbuf.buf);
258
259init_err:
257 SSLerr(SSL_F_DTLS1_BUFFER_RECORD, ERR_R_INTERNAL_ERROR); 260 SSLerr(SSL_F_DTLS1_BUFFER_RECORD, ERR_R_INTERNAL_ERROR);
258 free(rdata); 261 free(rdata);
259 pitem_free(item); 262 pitem_free(item);
260 return (0); 263 return (-1);
261} 264}
262 265
263 266
@@ -308,8 +311,9 @@ dtls1_process_buffered_records(SSL *s)
308 dtls1_get_unprocessed_record(s); 311 dtls1_get_unprocessed_record(s);
309 if (! dtls1_process_record(s)) 312 if (! dtls1_process_record(s))
310 return (0); 313 return (0);
311 dtls1_buffer_record(s, &(s->d1->processed_rcds), 314 if (dtls1_buffer_record(s, &(s->d1->processed_rcds),
312 s->s3->rrec.seq_num); 315 s->s3->rrec.seq_num) < 0)
316 return (-1);
313 } 317 }
314 } 318 }
315 319
@@ -446,7 +450,6 @@ dtls1_process_record(SSL *s)
446 450
447 /* we have pulled in a full packet so zero things */ 451 /* we have pulled in a full packet so zero things */
448 s->packet_length = 0; 452 s->packet_length = 0;
449 dtls1_record_bitmap_update(s, &(s->d1->bitmap));/* Mark receipt of record. */
450 return (1); 453 return (1);
451 454
452f_err: 455f_err:
@@ -480,7 +483,8 @@ dtls1_get_record(SSL *s)
480 483
481 /* The epoch may have changed. If so, process all the 484 /* The epoch may have changed. If so, process all the
482 * pending records. This is a non-blocking operation. */ 485 * pending records. This is a non-blocking operation. */
483 dtls1_process_buffered_records(s); 486 if (dtls1_process_buffered_records(s) < 0)
487 return (-1);
484 488
485 /* if we're renegotiating, then there may be buffered records */ 489 /* if we're renegotiating, then there may be buffered records */
486 if (dtls1_get_processed_record(s)) 490 if (dtls1_get_processed_record(s))
@@ -611,7 +615,11 @@ again:
611 */ 615 */
612 if (is_next_epoch) { 616 if (is_next_epoch) {
613 if ((SSL_in_init(s) || s->in_handshake) && !s->d1->listen) { 617 if ((SSL_in_init(s) || s->in_handshake) && !s->d1->listen) {
614 dtls1_buffer_record(s, &(s->d1->unprocessed_rcds), rr->seq_num); 618 if (dtls1_buffer_record(s, &(s->d1->unprocessed_rcds),
619 rr->seq_num) < 0)
620 return (-1);
621 /* Mark receipt of record. */
622 dtls1_record_bitmap_update(s, bitmap);
615 } 623 }
616 rr->length = 0; 624 rr->length = 0;
617 s->packet_length = 0; 625 s->packet_length = 0;
@@ -625,6 +633,8 @@ again:
625 goto again; 633 goto again;
626 /* get another record */ 634 /* get another record */
627 } 635 }
636 /* Mark receipt of record. */
637 dtls1_record_bitmap_update(s, bitmap);
628 638
629 return (1); 639 return (1);
630 640
@@ -769,7 +779,11 @@ start:
769 * buffer the application data for later processing rather 779 * buffer the application data for later processing rather
770 * than dropping the connection. 780 * than dropping the connection.
771 */ 781 */
772 dtls1_buffer_record(s, &(s->d1->buffered_app_data), rr->seq_num); 782 if (dtls1_buffer_record(s, &(s->d1->buffered_app_data),
783 rr->seq_num) < 0) {
784 SSLerr(SSL_F_DTLS1_READ_BYTES, ERR_R_INTERNAL_ERROR);
785 return (-1);
786 }
773 rr->length = 0; 787 rr->length = 0;
774 goto start; 788 goto start;
775 } 789 }
diff --git a/src/lib/libssl/src/ssl/d1_pkt.c b/src/lib/libssl/src/ssl/d1_pkt.c
index 7bdf245e84..91e9c146ac 100644
--- a/src/lib/libssl/src/ssl/d1_pkt.c
+++ b/src/lib/libssl/src/ssl/d1_pkt.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: d1_pkt.c,v 1.38 2014/12/14 15:30:50 jsing Exp $ */ 1/* $OpenBSD: d1_pkt.c,v 1.39 2015/01/21 00:15:50 doug Exp $ */
2/* 2/*
3 * DTLS implementation written by Nagendra Modadugu 3 * DTLS implementation written by Nagendra Modadugu
4 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. 4 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
@@ -222,7 +222,7 @@ dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority)
222 rdata = malloc(sizeof(DTLS1_RECORD_DATA)); 222 rdata = malloc(sizeof(DTLS1_RECORD_DATA));
223 item = pitem_new(priority, rdata); 223 item = pitem_new(priority, rdata);
224 if (rdata == NULL || item == NULL) 224 if (rdata == NULL || item == NULL)
225 goto err; 225 goto init_err;
226 226
227 rdata->packet = s->packet; 227 rdata->packet = s->packet;
228 rdata->packet_length = s->packet_length; 228 rdata->packet_length = s->packet_length;
@@ -254,10 +254,13 @@ dtls1_buffer_record(SSL *s, record_pqueue *queue, unsigned char *priority)
254 return (1); 254 return (1);
255 255
256err: 256err:
257 free(rdata->rbuf.buf);
258
259init_err:
257 SSLerr(SSL_F_DTLS1_BUFFER_RECORD, ERR_R_INTERNAL_ERROR); 260 SSLerr(SSL_F_DTLS1_BUFFER_RECORD, ERR_R_INTERNAL_ERROR);
258 free(rdata); 261 free(rdata);
259 pitem_free(item); 262 pitem_free(item);
260 return (0); 263 return (-1);
261} 264}
262 265
263 266
@@ -308,8 +311,9 @@ dtls1_process_buffered_records(SSL *s)
308 dtls1_get_unprocessed_record(s); 311 dtls1_get_unprocessed_record(s);
309 if (! dtls1_process_record(s)) 312 if (! dtls1_process_record(s))
310 return (0); 313 return (0);
311 dtls1_buffer_record(s, &(s->d1->processed_rcds), 314 if (dtls1_buffer_record(s, &(s->d1->processed_rcds),
312 s->s3->rrec.seq_num); 315 s->s3->rrec.seq_num) < 0)
316 return (-1);
313 } 317 }
314 } 318 }
315 319
@@ -446,7 +450,6 @@ dtls1_process_record(SSL *s)
446 450
447 /* we have pulled in a full packet so zero things */ 451 /* we have pulled in a full packet so zero things */
448 s->packet_length = 0; 452 s->packet_length = 0;
449 dtls1_record_bitmap_update(s, &(s->d1->bitmap));/* Mark receipt of record. */
450 return (1); 453 return (1);
451 454
452f_err: 455f_err:
@@ -480,7 +483,8 @@ dtls1_get_record(SSL *s)
480 483
481 /* The epoch may have changed. If so, process all the 484 /* The epoch may have changed. If so, process all the
482 * pending records. This is a non-blocking operation. */ 485 * pending records. This is a non-blocking operation. */
483 dtls1_process_buffered_records(s); 486 if (dtls1_process_buffered_records(s) < 0)
487 return (-1);
484 488
485 /* if we're renegotiating, then there may be buffered records */ 489 /* if we're renegotiating, then there may be buffered records */
486 if (dtls1_get_processed_record(s)) 490 if (dtls1_get_processed_record(s))
@@ -611,7 +615,11 @@ again:
611 */ 615 */
612 if (is_next_epoch) { 616 if (is_next_epoch) {
613 if ((SSL_in_init(s) || s->in_handshake) && !s->d1->listen) { 617 if ((SSL_in_init(s) || s->in_handshake) && !s->d1->listen) {
614 dtls1_buffer_record(s, &(s->d1->unprocessed_rcds), rr->seq_num); 618 if (dtls1_buffer_record(s, &(s->d1->unprocessed_rcds),
619 rr->seq_num) < 0)
620 return (-1);
621 /* Mark receipt of record. */
622 dtls1_record_bitmap_update(s, bitmap);
615 } 623 }
616 rr->length = 0; 624 rr->length = 0;
617 s->packet_length = 0; 625 s->packet_length = 0;
@@ -625,6 +633,8 @@ again:
625 goto again; 633 goto again;
626 /* get another record */ 634 /* get another record */
627 } 635 }
636 /* Mark receipt of record. */
637 dtls1_record_bitmap_update(s, bitmap);
628 638
629 return (1); 639 return (1);
630 640
@@ -769,7 +779,11 @@ start:
769 * buffer the application data for later processing rather 779 * buffer the application data for later processing rather
770 * than dropping the connection. 780 * than dropping the connection.
771 */ 781 */
772 dtls1_buffer_record(s, &(s->d1->buffered_app_data), rr->seq_num); 782 if (dtls1_buffer_record(s, &(s->d1->buffered_app_data),
783 rr->seq_num) < 0) {
784 SSLerr(SSL_F_DTLS1_READ_BYTES, ERR_R_INTERNAL_ERROR);
785 return (-1);
786 }
773 rr->length = 0; 787 rr->length = 0;
774 goto start; 788 goto start;
775 } 789 }