summaryrefslogtreecommitdiff
path: root/src/lib/libssl/d1_both.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/d1_both.c')
-rw-r--r--src/lib/libssl/d1_both.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/src/lib/libssl/d1_both.c b/src/lib/libssl/d1_both.c
index 4c014be6a9..7365968db6 100644
--- a/src/lib/libssl/d1_both.c
+++ b/src/lib/libssl/d1_both.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: d1_both.c,v 1.78 2021/09/04 14:24:28 jsing Exp $ */ 1/* $OpenBSD: d1_both.c,v 1.79 2021/10/23 08:34:36 jsing 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.
@@ -368,13 +368,13 @@ dtls1_do_write(SSL *s, int type)
368 * Read an entire handshake message. Handshake messages arrive in 368 * Read an entire handshake message. Handshake messages arrive in
369 * fragments. 369 * fragments.
370 */ 370 */
371long 371int
372dtls1_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) 372dtls1_get_message(SSL *s, int st1, int stn, int mt, long max)
373{ 373{
374 int i, al;
375 struct hm_header_st *msg_hdr; 374 struct hm_header_st *msg_hdr;
376 unsigned char *p; 375 unsigned char *p;
377 unsigned long msg_len; 376 unsigned long msg_len;
377 int i, al, ok;
378 378
379 /* 379 /*
380 * s3->internal->tmp is used to store messages that are unexpected, caused 380 * s3->internal->tmp is used to store messages that are unexpected, caused
@@ -387,21 +387,20 @@ dtls1_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
387 SSLerror(s, SSL_R_UNEXPECTED_MESSAGE); 387 SSLerror(s, SSL_R_UNEXPECTED_MESSAGE);
388 goto fatal_err; 388 goto fatal_err;
389 } 389 }
390 *ok = 1;
391 s->internal->init_msg = s->internal->init_buf->data + DTLS1_HM_HEADER_LENGTH; 390 s->internal->init_msg = s->internal->init_buf->data + DTLS1_HM_HEADER_LENGTH;
392 s->internal->init_num = (int)S3I(s)->hs.tls12.message_size; 391 s->internal->init_num = (int)S3I(s)->hs.tls12.message_size;
393 return s->internal->init_num; 392 return 1;
394 } 393 }
395 394
396 msg_hdr = &D1I(s)->r_msg_hdr; 395 msg_hdr = &D1I(s)->r_msg_hdr;
397 memset(msg_hdr, 0, sizeof(struct hm_header_st)); 396 memset(msg_hdr, 0, sizeof(struct hm_header_st));
398 397
399 again: 398 again:
400 i = dtls1_get_message_fragment(s, st1, stn, max, ok); 399 i = dtls1_get_message_fragment(s, st1, stn, max, &ok);
401 if (i == DTLS1_HM_BAD_FRAGMENT || 400 if (i == DTLS1_HM_BAD_FRAGMENT ||
402 i == DTLS1_HM_FRAGMENT_RETRY) /* bad fragment received */ 401 i == DTLS1_HM_FRAGMENT_RETRY) /* bad fragment received */
403 goto again; 402 goto again;
404 else if (i <= 0 && !*ok) 403 else if (i <= 0 && !ok)
405 return i; 404 return i;
406 405
407 p = (unsigned char *)s->internal->init_buf->data; 406 p = (unsigned char *)s->internal->init_buf->data;
@@ -425,15 +424,13 @@ dtls1_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
425 D1I(s)->handshake_read_seq++; 424 D1I(s)->handshake_read_seq++;
426 425
427 s->internal->init_msg = s->internal->init_buf->data + DTLS1_HM_HEADER_LENGTH; 426 s->internal->init_msg = s->internal->init_buf->data + DTLS1_HM_HEADER_LENGTH;
428 return s->internal->init_num; 427 return 1;
429 428
430 fatal_err: 429 fatal_err:
431 ssl3_send_alert(s, SSL3_AL_FATAL, al); 430 ssl3_send_alert(s, SSL3_AL_FATAL, al);
432 *ok = 0;
433 return -1; 431 return -1;
434} 432}
435 433
436
437static int 434static int
438dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr, int max) 435dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr, int max)
439{ 436{
@@ -847,8 +844,6 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok)
847 goto fatal_err; 844 goto fatal_err;
848 } 845 }
849 846
850 *ok = 1;
851
852 /* 847 /*
853 * Note that s->internal->init_num is *not* used as current offset in 848 * Note that s->internal->init_num is *not* used as current offset in
854 * s->internal->init_buf->data, but as a counter summing up fragments' 849 * s->internal->init_buf->data, but as a counter summing up fragments'
@@ -856,6 +851,7 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok)
856 * length, we assume we have got all the fragments. 851 * length, we assume we have got all the fragments.
857 */ 852 */
858 s->internal->init_num = frag_len; 853 s->internal->init_num = frag_len;
854 *ok = 1;
859 return frag_len; 855 return frag_len;
860 856
861 fatal_err: 857 fatal_err: