Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/ssl/record/rec_layer_s3.c |
Source code | Switch to Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 | * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 | * | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4 | * Licensed under the OpenSSL license (the "License"). You may not use | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 | * this file except in compliance with the License. You can obtain a copy | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 | * in the file LICENSE in the source distribution or at | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7 | * https://www.openssl.org/source/license.html | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10 | #include <stdio.h> | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
11 | #include <limits.h> | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
12 | #include <errno.h> | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
13 | #include "../ssl_locl.h" | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
14 | #include <openssl/evp.h> | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
15 | #include <openssl/buffer.h> | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
16 | #include <openssl/rand.h> | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
17 | #include "record_locl.h" | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
18 | #include "../packet_locl.h" | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
19 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
20 | #if defined(OPENSSL_SMALL_FOOTPRINT) || \ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
21 | !( defined(AES_ASM) && ( \ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
22 | defined(__x86_64) || defined(__x86_64__) || \ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
23 | defined(_M_AMD64) || defined(_M_X64) ) \ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
24 | ) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
25 | # undef EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
26 | # define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0 | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
27 | #endif | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
28 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
29 | void RECORD_LAYER_init(RECORD_LAYER *rl, SSL *s) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
30 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
31 | rl->s = s; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
32 | RECORD_LAYER_set_first_record(&s->rlayer); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33 | SSL3_RECORD_clear(rl->rrec, SSL_MAX_PIPELINES); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
34 | } executed 8254 times by 2 tests: end of block Executed by:
| 8254 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
35 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
36 | void RECORD_LAYER_clear(RECORD_LAYER *rl) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
37 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
38 | rl->rstate = SSL_ST_READ_HEADER; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
39 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
40 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
41 | * Do I need to clear read_ahead? As far as I can tell read_ahead did not | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
42 | * previously get reset by SSL_clear...so I'll keep it that way..but is | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
43 | * that right? | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
44 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
45 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
46 | rl->packet = NULL; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
47 | rl->packet_length = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
48 | rl->wnum = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
49 | memset(rl->handshake_fragment, 0, sizeof(rl->handshake_fragment)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
50 | rl->handshake_fragment_len = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
51 | rl->wpend_tot = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
52 | rl->wpend_type = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
53 | rl->wpend_ret = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
54 | rl->wpend_buf = NULL; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
55 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
56 | SSL3_BUFFER_clear(&rl->rbuf); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
57 | ssl3_release_write_buffer(rl->s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
58 | rl->numrpipes = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
59 | SSL3_RECORD_clear(rl->rrec, SSL_MAX_PIPELINES); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
60 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
61 | RECORD_LAYER_reset_read_sequence(rl); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
62 | RECORD_LAYER_reset_write_sequence(rl); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
63 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
64 | if (rl->d)
| 745-15524 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
65 | DTLS_RECORD_LAYER_clear(rl); executed 745 times by 1 test: DTLS_RECORD_LAYER_clear(rl); Executed by:
| 745 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
66 | } executed 16269 times by 2 tests: end of block Executed by:
| 16269 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
67 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
68 | void RECORD_LAYER_release(RECORD_LAYER *rl) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
69 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
70 | if (SSL3_BUFFER_is_initialised(&rl->rbuf))
| 330-7966 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
71 | ssl3_release_read_buffer(rl->s); executed 7966 times by 1 test: ssl3_release_read_buffer(rl->s); Executed by:
| 7966 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
72 | if (rl->numwpipes > 0)
| 327-7969 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
73 | ssl3_release_write_buffer(rl->s); executed 7969 times by 1 test: ssl3_release_write_buffer(rl->s); Executed by:
| 7969 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
74 | SSL3_RECORD_release(rl->rrec, SSL_MAX_PIPELINES); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
75 | } executed 8296 times by 2 tests: end of block Executed by:
| 8296 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
76 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
77 | /* Checks if we have unprocessed read ahead data pending */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
78 | int RECORD_LAYER_read_pending(const RECORD_LAYER *rl) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
79 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
80 | return SSL3_BUFFER_get_left(&rl->rbuf) != 0; executed 643 times by 1 test: return ((&rl->rbuf)->left) != 0; Executed by:
| 643 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
81 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
82 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
83 | /* Checks if we have decrypted unread record data pending */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
84 | int RECORD_LAYER_processed_read_pending(const RECORD_LAYER *rl) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
85 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
86 | size_t curr_rec = 0, num_recs = RECORD_LAYER_get_numrpipes(rl); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
87 | const SSL3_RECORD *rr = rl->rrec; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
88 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
89 | while (curr_rec < num_recs && SSL3_RECORD_is_read(&rr[curr_rec]))
| 6-3526 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
90 | curr_rec++; executed 3333 times by 1 test: curr_rec++; Executed by:
| 3333 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
91 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
92 | return curr_rec < num_recs; executed 3532 times by 1 test: return curr_rec < num_recs; Executed by:
| 3532 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
93 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
94 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
95 | int RECORD_LAYER_write_pending(const RECORD_LAYER *rl) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
96 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
97 | return (rl->numwpipes > 0) executed 47502 times by 1 test: return (rl->numwpipes > 0) && ((&rl->wbuf[rl->numwpipes - 1])->left) != 0; Executed by:
| 21-47502 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
98 | && SSL3_BUFFER_get_left(&rl->wbuf[rl->numwpipes - 1]) != 0; executed 47502 times by 1 test: return (rl->numwpipes > 0) && ((&rl->wbuf[rl->numwpipes - 1])->left) != 0; Executed by:
| 0-47502 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
99 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
100 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
101 | void RECORD_LAYER_reset_read_sequence(RECORD_LAYER *rl) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
102 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
103 | memset(rl->read_sequence, 0, sizeof(rl->read_sequence)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
104 | } executed 31588 times by 2 tests: end of block Executed by:
| 31588 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
105 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
106 | void RECORD_LAYER_reset_write_sequence(RECORD_LAYER *rl) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
107 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
108 | memset(rl->write_sequence, 0, sizeof(rl->write_sequence)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
109 | } executed 21344 times by 2 tests: end of block Executed by:
| 21344 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
110 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
111 | size_t ssl3_pending(const SSL *s) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
112 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
113 | size_t i, num = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
114 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
115 | if (s->rlayer.rstate == SSL_ST_READ_BODY)
| 0-1570 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
116 | return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
117 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
118 | for (i = 0; i < RECORD_LAYER_get_numrpipes(&s->rlayer); i++) {
| 491-1277 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
119 | if (SSL3_RECORD_get_type(&s->rlayer.rrec[i])
| 198-293 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
120 | != SSL3_RT_APPLICATION_DATA)
| 198-293 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
121 | return 0; executed 293 times by 1 test: return 0; Executed by:
| 293 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
122 | num += SSL3_RECORD_get_length(&s->rlayer.rrec[i]); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
123 | } executed 198 times by 1 test: end of block Executed by:
| 198 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
124 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
125 | return num; executed 1277 times by 1 test: return num; Executed by:
| 1277 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
126 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
127 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
128 | void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
129 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
130 | ctx->default_read_buf_len = len; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
131 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
132 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
133 | void SSL_set_default_read_buffer_len(SSL *s, size_t len) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
134 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
135 | SSL3_BUFFER_set_default_len(RECORD_LAYER_get_rbuf(&s->rlayer), len); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
136 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
137 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
138 | const char *SSL_rstate_string_long(const SSL *s) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
139 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
140 | switch (s->rlayer.rstate) { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
141 | case SSL_ST_READ_HEADER: never executed: case 0xF0: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
142 | return "read header"; never executed: return "read header"; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
143 | case SSL_ST_READ_BODY: never executed: case 0xF1: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
144 | return "read body"; never executed: return "read body"; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
145 | case SSL_ST_READ_DONE: never executed: case 0xF2: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
146 | return "read done"; never executed: return "read done"; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
147 | default: never executed: default: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
148 | return "unknown"; never executed: return "unknown"; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
149 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
150 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
151 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
152 | const char *SSL_rstate_string(const SSL *s) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
153 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
154 | switch (s->rlayer.rstate) { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
155 | case SSL_ST_READ_HEADER: never executed: case 0xF0: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
156 | return "RH"; never executed: return "RH"; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
157 | case SSL_ST_READ_BODY: never executed: case 0xF1: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
158 | return "RB"; never executed: return "RB"; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
159 | case SSL_ST_READ_DONE: never executed: case 0xF2: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
160 | return "RD"; never executed: return "RD"; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
161 | default: never executed: default: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
162 | return "unknown"; never executed: return "unknown"; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
163 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
164 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
165 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
166 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
167 | * Return values are as per SSL_read() | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
168 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
169 | int ssl3_read_n(SSL *s, size_t n, size_t max, int extend, int clearold, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
170 | size_t *readbytes) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
171 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
172 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
173 | * If extend == 0, obtain new n-byte packet; if extend == 1, increase | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
174 | * packet by another n bytes. The packet will be in the sub-array of | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
175 | * s->s3->rbuf.buf specified by s->packet and s->packet_length. (If | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
176 | * s->rlayer.read_ahead is set, 'max' bytes may be stored in rbuf [plus | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
177 | * s->packet_length bytes if extend == 1].) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
178 | * if clearold == 1, move the packet to the start of the buffer; if | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
179 | * clearold == 0 then leave any old packets where they were | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
180 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
181 | size_t len, left, align = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
182 | unsigned char *pkt; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
183 | SSL3_BUFFER *rb; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
184 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
185 | if (n == 0)
| 0-138375 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
186 | return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
187 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
188 | rb = &s->rlayer.rbuf; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
189 | if (rb->buf == NULL)
| 0-138375 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
190 | if (!ssl3_setup_read_buffer(s)) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
191 | /* SSLfatal() already called */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
192 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
193 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
194 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
195 | left = rb->left; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
196 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
197 | align = (size_t)rb->buf + SSL3_RT_HEADER_LENGTH; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
198 | align = SSL3_ALIGN_PAYLOAD - 1 - ((align - 1) % SSL3_ALIGN_PAYLOAD); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
199 | #endif | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
200 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
201 | if (!extend) {
| 58683-79692 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
202 | /* start with empty packet ... */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
203 | if (left == 0)
| 4143-75549 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
204 | rb->offset = align; executed 75549 times by 1 test: rb->offset = align; Executed by:
| 75549 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
205 | else if (align != 0 && left >= SSL3_RT_HEADER_LENGTH) {
| 0-4143 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
206 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
207 | * check if next packet length is large enough to justify payload | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
208 | * alignment... | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
209 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
210 | pkt = rb->buf + rb->offset; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
211 | if (pkt[0] == SSL3_RT_APPLICATION_DATA
| 175-1785 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
212 | && (pkt[3] << 8 | pkt[4]) >= 128) {
| 42-133 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
213 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
214 | * Note that even if packet is corrupted and its length field | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
215 | * is insane, we can only be led to wrong decision about | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
216 | * whether memmove will occur or not. Header values has no | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
217 | * effect on memmove arguments and therefore no buffer | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
218 | * overrun can be triggered. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
219 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
220 | memmove(rb->buf + align, pkt, left); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
221 | rb->offset = align; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
222 | } executed 42 times by 1 test: end of block Executed by:
| 42 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
223 | } executed 1960 times by 1 test: end of block Executed by:
| 1960 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
224 | s->rlayer.packet = rb->buf + rb->offset; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
225 | s->rlayer.packet_length = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
226 | /* ... now we can act as if 'extend' was set */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
227 | } executed 79692 times by 1 test: end of block Executed by:
| 79692 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
228 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
229 | len = s->rlayer.packet_length; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
230 | pkt = rb->buf + align; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
231 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
232 | * Move any available bytes to front of buffer: 'len' bytes already | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
233 | * pointed to by 'packet', 'left' extra ones at the end | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
234 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
235 | if (s->rlayer.packet != pkt && clearold == 1) {
| 0-136454 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
236 | memmove(pkt, s->rlayer.packet, len + left); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
237 | s->rlayer.packet = pkt; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
238 | rb->offset = len + align; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
239 | } executed 1921 times by 1 test: end of block Executed by:
| 1921 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
240 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
241 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
242 | * For DTLS/UDP reads should not span multiple packets because the read | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
243 | * operation returns the whole packet at once (as long as it fits into | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
244 | * the buffer). | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
245 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
246 | if (SSL_IS_DTLS(s)) {
| 8127-130248 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
247 | if (left == 0 && extend)
| 0-5172 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
248 | return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
249 | if (left > 0 && n > left)
| 4-5172 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
250 | n = left; executed 4 times by 1 test: n = left; Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
251 | } executed 8127 times by 1 test: end of block Executed by:
| 8127 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
252 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
253 | /* if there is enough in the buffer from a previous read, take some */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
254 | if (left >= n) {
| 5757-132618 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
255 | s->rlayer.packet_length += n; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
256 | rb->left = left - n; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
257 | rb->offset += n; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
258 | *readbytes = n; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
259 | return 1; executed 5757 times by 1 test: return 1; Executed by:
| 5757 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
260 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
261 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
262 | /* else we need to read more data */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
263 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
264 | if (n > rb->len - rb->offset) {
| 0-132618 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
265 | /* does not happen */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
266 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_N, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
267 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
268 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
269 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
270 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
271 | /* We always act like read_ahead is set for DTLS */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
272 | if (!s->rlayer.read_ahead && !SSL_IS_DTLS(s))
| 254-132364 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
273 | /* ignore max parameter */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
274 | max = n; executed 129409 times by 1 test: max = n; Executed by:
| 129409 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
275 | else { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
276 | if (max < n)
| 0-3209 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
277 | max = n; never executed: max = n; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
278 | if (max > rb->len - rb->offset)
| 1-3208 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
279 | max = rb->len - rb->offset; executed 3208 times by 1 test: max = rb->len - rb->offset; Executed by:
| 3208 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
280 | } executed 3209 times by 1 test: end of block Executed by:
| 3209 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
281 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
282 | while (left < n) {
| 102865-138866 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
283 | size_t bioread = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
284 | int ret; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
285 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
286 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
287 | * Now we have len+left bytes at the front of s->s3->rbuf.buf and | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
288 | * need to read in more until we have len+n (up to len+max if | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
289 | * possible) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
290 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
291 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
292 | clear_sys_error(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
293 | if (s->rbio != NULL) {
| 0-138866 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
294 | s->rwstate = SSL_READING; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
295 | /* TODO(size_t): Convert this function */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
296 | ret = BIO_read(s->rbio, pkt + len + left, max - left); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
297 | if (ret >= 0)
| 20828-118038 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
298 | bioread = ret; executed 118038 times by 1 test: bioread = ret; Executed by:
| 118038 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
299 | } else { executed 138866 times by 1 test: end of block Executed by:
| 138866 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
300 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_N, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
301 | SSL_R_READ_BIO_NOT_SET); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
302 | ret = -1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
303 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
304 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
305 | if (ret <= 0) {
| 29753-109113 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
306 | rb->left = left; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
307 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && !SSL_IS_DTLS(s))
| 0-29753 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
308 | if (len + left == 0)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
309 | ssl3_release_read_buffer(s); never executed: ssl3_release_read_buffer(s); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
310 | return ret; executed 29753 times by 1 test: return ret; Executed by:
| 29753 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
311 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
312 | left += bioread; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
313 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
314 | * reads should *never* span multiple packets for DTLS because the | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
315 | * underlying transport protocol is message oriented as opposed to | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
316 | * byte oriented as in the TLS case. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
317 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
318 | if (SSL_IS_DTLS(s)) {
| 1751-107362 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
319 | if (n > left)
| 0-1751 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
320 | n = left; /* makes the while condition false */ never executed: n = left; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
321 | } executed 1751 times by 1 test: end of block Executed by:
| 1751 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
322 | } executed 109113 times by 1 test: end of block Executed by:
| 109113 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
323 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
324 | /* done reading, now the book-keeping */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
325 | rb->offset += n; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
326 | rb->left = left - n; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
327 | s->rlayer.packet_length += n; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
328 | s->rwstate = SSL_NOTHING; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
329 | *readbytes = n; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
330 | return 1; executed 102865 times by 1 test: return 1; Executed by:
| 102865 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
331 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
332 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
333 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
334 | * Call this to write data in records of type 'type' It will return <= 0 if | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
335 | * not all data has been sent or non-blocking IO. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
336 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
337 | int ssl3_write_bytes(SSL *s, int type, const void *buf_, size_t len, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
338 | size_t *written) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
339 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
340 | const unsigned char *buf = buf_; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
341 | size_t tot; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
342 | size_t n, max_send_fragment, split_send_fragment, maxpipes; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
343 | #if !defined(OPENSSL_NO_MULTIBLOCK) && EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
344 | size_t nw; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
345 | #endif | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
346 | SSL3_BUFFER *wb = &s->rlayer.wbuf[0]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
347 | int i; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
348 | size_t tmpwrit; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
349 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
350 | s->rwstate = SSL_NOTHING; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
351 | tot = s->rlayer.wnum; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
352 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
353 | * ensure that if we end up with a smaller value of data to write out | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
354 | * than the original len from a write which didn't complete for | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
355 | * non-blocking I/O and also somehow ended up avoiding the check for | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
356 | * this in ssl3_write_pending/SSL_R_BAD_WRITE_RETRY as it must never be | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
357 | * possible to end up with (len-tot) as a large number that will then | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
358 | * promptly send beyond the end of the users buffer ... so we trap and | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
359 | * report the error in a way the user will notice | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
360 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
361 | if ((len < s->rlayer.wnum)
| 0-29362 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
362 | || ((wb->left != 0) && (len < (s->rlayer.wnum + s->rlayer.wpend_tot)))) {
| 0-28863 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
363 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
364 | SSL_R_BAD_LENGTH); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
365 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
366 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
367 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
368 | if (s->early_data_state == SSL_EARLY_DATA_WRITING
| 53-29309 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
369 | && !early_data_count_ok(s, len, 0, 1)) {
| 0-53 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
370 | /* SSLfatal() already called */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
371 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
372 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
373 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
374 | s->rlayer.wnum = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
375 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
376 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
377 | * When writing early data on the server side we could be "in_init" in | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
378 | * between receiving the EoED and the CF - but we don't want to handle those | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
379 | * messages yet. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
380 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
381 | if (SSL_in_init(s) && !ossl_statem_get_in_handshake(s)
| 2504-26538 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
382 | && s->early_data_state != SSL_EARLY_DATA_UNAUTH_WRITING) {
| 3-2501 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
383 | i = s->handshake_func(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
384 | /* SSLfatal() already called */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
385 | if (i < 0)
| 329-2172 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
386 | return i; executed 2172 times by 1 test: return i; Executed by:
| 2172 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
387 | if (i == 0) {
| 0-329 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
388 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
389 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
390 | } executed 329 times by 1 test: end of block Executed by:
| 329 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
391 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
392 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
393 | * first check if there is a SSL3_BUFFER still being written out. This | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
394 | * will happen with non blocking IO | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
395 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
396 | if (wb->left != 0) {
| 445-26745 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
397 | /* SSLfatal() already called if appropriate */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
398 | i = ssl3_write_pending(s, type, &buf[tot], s->rlayer.wpend_tot, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
399 | &tmpwrit); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
400 | if (i <= 0) {
| 92-353 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
401 | /* XXX should we ssl3_release_write_buffer if i<0? */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
402 | s->rlayer.wnum = tot; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
403 | return i; executed 353 times by 1 test: return i; Executed by:
| 353 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
404 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
405 | tot += tmpwrit; /* this might be last fragment */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
406 | } executed 92 times by 1 test: end of block Executed by:
| 92 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
407 | #if !defined(OPENSSL_NO_MULTIBLOCK) && EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
408 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
409 | * Depending on platform multi-block can deliver several *times* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
410 | * better performance. Downside is that it has to allocate | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
411 | * jumbo buffer to accommodate up to 8 records, but the | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
412 | * compromise is considered worthy. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
413 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
414 | if (type == SSL3_RT_APPLICATION_DATA &&
| 2803-24034 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
415 | len >= 4 * (max_send_fragment = ssl_get_max_send_fragment(s)) &&
| 234-2569 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
416 | s->compress == NULL && s->msg_callback == NULL &&
| 0-234 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
417 | !SSL_WRITE_ETM(s) && SSL_USE_EXPLICIT_IV(s) &&
| 0-128 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
418 | EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(s->enc_write_ctx)) &
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
419 | EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
420 | unsigned char aad[13]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
421 | EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM mb_param; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
422 | size_t packlen; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
423 | int packleni; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
424 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
425 | /* minimize address aliasing conflicts */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
426 | if ((max_send_fragment & 0xfff) == 0)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
427 | max_send_fragment -= 512; never executed: max_send_fragment -= 512; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
428 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
429 | if (tot == 0 || wb->buf == NULL) { /* allocate jumbo buffer */
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
430 | ssl3_release_write_buffer(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
431 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
432 | packlen = EVP_CIPHER_CTX_ctrl(s->enc_write_ctx, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
433 | EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
434 | (int)max_send_fragment, NULL); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
435 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
436 | if (len >= 8 * max_send_fragment)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
437 | packlen *= 8; never executed: packlen *= 8; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
438 | else | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
439 | packlen *= 4; never executed: packlen *= 4; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
440 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
441 | if (!ssl3_setup_write_buffer(s, 1, packlen)) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
442 | /* SSLfatal() already called */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
443 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
444 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
445 | } else if (tot == len) { /* done? */ never executed: end of block
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
446 | /* free jumbo buffer */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
447 | ssl3_release_write_buffer(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
448 | *written = tot; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
449 | return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
450 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
451 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
452 | n = (len - tot); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
453 | for (;;) { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
454 | if (n < 4 * max_send_fragment) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
455 | /* free jumbo buffer */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
456 | ssl3_release_write_buffer(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
457 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
458 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
459 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
460 | if (s->s3->alert_dispatch) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
461 | i = s->method->ssl_dispatch_alert(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
462 | if (i <= 0) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
463 | /* SSLfatal() already called if appropriate */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
464 | s->rlayer.wnum = tot; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
465 | return i; never executed: return i; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
466 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
467 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
468 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
469 | if (n >= 8 * max_send_fragment)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
470 | nw = max_send_fragment * (mb_param.interleave = 8); never executed: nw = max_send_fragment * (mb_param.interleave = 8); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
471 | else | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
472 | nw = max_send_fragment * (mb_param.interleave = 4); never executed: nw = max_send_fragment * (mb_param.interleave = 4); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
473 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
474 | memcpy(aad, s->rlayer.write_sequence, 8); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
475 | aad[8] = type; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
476 | aad[9] = (unsigned char)(s->version >> 8); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
477 | aad[10] = (unsigned char)(s->version); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
478 | aad[11] = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
479 | aad[12] = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
480 | mb_param.out = NULL; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
481 | mb_param.inp = aad; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
482 | mb_param.len = nw; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
483 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
484 | packleni = EVP_CIPHER_CTX_ctrl(s->enc_write_ctx, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
485 | EVP_CTRL_TLS1_1_MULTIBLOCK_AAD, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
486 | sizeof(mb_param), &mb_param); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
487 | packlen = (size_t)packleni; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
488 | if (packleni <= 0 || packlen > wb->len) { /* never happens */
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
489 | /* free jumbo buffer */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
490 | ssl3_release_write_buffer(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
491 | break; never executed: break; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
492 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
493 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
494 | mb_param.out = wb->buf; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
495 | mb_param.inp = &buf[tot]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
496 | mb_param.len = nw; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
497 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
498 | if (EVP_CIPHER_CTX_ctrl(s->enc_write_ctx,
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
499 | EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT,
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
500 | sizeof(mb_param), &mb_param) <= 0)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
501 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
502 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
503 | s->rlayer.write_sequence[7] += mb_param.interleave; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
504 | if (s->rlayer.write_sequence[7] < mb_param.interleave) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
505 | int j = 6; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
506 | while (j >= 0 && (++s->rlayer.write_sequence[j--]) == 0) ; never executed: ;
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
507 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
508 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
509 | wb->offset = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
510 | wb->left = packlen; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
511 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
512 | s->rlayer.wpend_tot = nw; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
513 | s->rlayer.wpend_buf = &buf[tot]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
514 | s->rlayer.wpend_type = type; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
515 | s->rlayer.wpend_ret = nw; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
516 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
517 | i = ssl3_write_pending(s, type, &buf[tot], nw, &tmpwrit); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
518 | if (i <= 0) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
519 | /* SSLfatal() already called if appropriate */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
520 | if (i < 0 && (!s->wbio || !BIO_should_retry(s->wbio))) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
521 | /* free jumbo buffer */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
522 | ssl3_release_write_buffer(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
523 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
524 | s->rlayer.wnum = tot; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
525 | return i; never executed: return i; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
526 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
527 | if (tmpwrit == n) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
528 | /* free jumbo buffer */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
529 | ssl3_release_write_buffer(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
530 | *written = tot + tmpwrit; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
531 | return 1; never executed: return 1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
532 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
533 | n -= tmpwrit; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
534 | tot += tmpwrit; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
535 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
536 | } else never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
537 | #endif /* !defined(OPENSSL_NO_MULTIBLOCK) && EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
538 | if (tot == len) { /* done? */
| 218-26619 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
539 | if (s->mode & SSL_MODE_RELEASE_BUFFERS && !SSL_IS_DTLS(s))
| 0-218 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
540 | ssl3_release_write_buffer(s); never executed: ssl3_release_write_buffer(s); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
541 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
542 | *written = tot; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
543 | return 1; executed 218 times by 1 test: return 1; Executed by:
| 218 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
544 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
545 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
546 | n = (len - tot); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
547 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
548 | max_send_fragment = ssl_get_max_send_fragment(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
549 | split_send_fragment = ssl_get_split_send_fragment(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
550 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
551 | * If max_pipelines is 0 then this means "undefined" and we default to | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
552 | * 1 pipeline. Similarly if the cipher does not support pipelined | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
553 | * processing then we also only use 1 pipeline, or if we're not using | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
554 | * explicit IVs | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
555 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
556 | maxpipes = s->max_pipelines; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
557 | if (maxpipes > SSL_MAX_PIPELINES) {
| 0-26619 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
558 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
559 | * We should have prevented this when we set max_pipelines so we | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
560 | * shouldn't get here | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
561 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
562 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
563 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
564 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
565 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
566 | if (maxpipes == 0
| 0-26619 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
567 | || s->enc_write_ctx == NULL
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
568 | || !(EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(s->enc_write_ctx))
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
569 | & EVP_CIPH_FLAG_PIPELINE)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
570 | || !SSL_USE_EXPLICIT_IV(s))
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
571 | maxpipes = 1; executed 26619 times by 1 test: maxpipes = 1; Executed by:
| 26619 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
572 | if (max_send_fragment == 0 || split_send_fragment == 0
| 0-26619 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
573 | || split_send_fragment > max_send_fragment) {
| 0-26619 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
574 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
575 | * We should have prevented this when we set/get the split and max send | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
576 | * fragments so we shouldn't get here | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
577 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
578 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
579 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
580 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
581 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
582 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
583 | for (;;) { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
584 | size_t pipelens[SSL_MAX_PIPELINES], tmppipelen, remain; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
585 | size_t numpipes, j; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
586 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
587 | if (n == 0)
| 0-34563 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
588 | numpipes = 1; never executed: numpipes = 1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
589 | else | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
590 | numpipes = ((n - 1) / split_send_fragment) + 1; executed 34563 times by 1 test: numpipes = ((n - 1) / split_send_fragment) + 1; Executed by:
| 34563 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
591 | if (numpipes > maxpipes)
| 7944-26619 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
592 | numpipes = maxpipes; executed 7944 times by 1 test: numpipes = maxpipes; Executed by:
| 7944 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
593 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
594 | if (n / numpipes >= max_send_fragment) {
| 8084-26479 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
595 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
596 | * We have enough data to completely fill all available | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
597 | * pipelines | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
598 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
599 | for (j = 0; j < numpipes; j++) {
| 8084 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
600 | pipelens[j] = max_send_fragment; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
601 | } executed 8084 times by 1 test: end of block Executed by:
| 8084 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
602 | } else { executed 8084 times by 1 test: end of block Executed by:
| 8084 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
603 | /* We can partially fill all available pipelines */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
604 | tmppipelen = n / numpipes; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
605 | remain = n % numpipes; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
606 | for (j = 0; j < numpipes; j++) {
| 26479 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
607 | pipelens[j] = tmppipelen; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
608 | if (j < remain)
| 0-26479 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
609 | pipelens[j]++; never executed: pipelens[j]++; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
610 | } executed 26479 times by 1 test: end of block Executed by:
| 26479 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
611 | } executed 26479 times by 1 test: end of block Executed by:
| 26479 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
612 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
613 | i = do_ssl3_write(s, type, &(buf[tot]), pipelens, numpipes, 0, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
614 | &tmpwrit); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
615 | if (i <= 0) {
| 92-34471 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
616 | /* SSLfatal() already called if appropriate */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
617 | /* XXX should we ssl3_release_write_buffer if i<0? */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
618 | s->rlayer.wnum = tot; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
619 | return i; executed 92 times by 1 test: return i; Executed by:
| 92 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
620 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
621 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
622 | if (tmpwrit == n ||
| 7944-26527 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
623 | (type == SSL3_RT_APPLICATION_DATA &&
| 994-6950 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
624 | (s->mode & SSL_MODE_ENABLE_PARTIAL_WRITE))) {
| 0-6950 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
625 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
626 | * next chunk of data should get another prepended empty fragment | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
627 | * in ciphersuites with known-IV weakness: | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
628 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
629 | s->s3->empty_fragment_done = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
630 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
631 | if ((i == (int)n) && s->mode & SSL_MODE_RELEASE_BUFFERS &&
| 0-22198 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
632 | !SSL_IS_DTLS(s))
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
633 | ssl3_release_write_buffer(s); never executed: ssl3_release_write_buffer(s); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
634 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
635 | *written = tot + tmpwrit; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
636 | return 1; executed 26527 times by 1 test: return 1; Executed by:
| 26527 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
637 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
638 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
639 | n -= tmpwrit; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
640 | tot += tmpwrit; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
641 | } executed 7944 times by 1 test: end of block Executed by:
| 7944 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
642 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
643 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
644 | int do_ssl3_write(SSL *s, int type, const unsigned char *buf, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
645 | size_t *pipelens, size_t numpipes, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
646 | int create_empty_fragment, size_t *written) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
647 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
648 | WPACKET pkt[SSL_MAX_PIPELINES]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
649 | SSL3_RECORD wr[SSL_MAX_PIPELINES]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
650 | WPACKET *thispkt; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
651 | SSL3_RECORD *thiswr; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
652 | unsigned char *recordstart; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
653 | int i, mac_size, clear = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
654 | size_t prefix_len = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
655 | int eivlen = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
656 | size_t align = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
657 | SSL3_BUFFER *wb; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
658 | SSL_SESSION *sess; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
659 | size_t totlen = 0, len, wpinited = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
660 | size_t j; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
661 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
662 | for (j = 0; j < numpipes; j++)
| 41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
663 | totlen += pipelens[j]; executed 41051 times by 1 test: totlen += pipelens[j]; Executed by:
| 41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
664 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
665 | * first check if there is a SSL3_BUFFER still being written out. This | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
666 | * will happen with non blocking IO | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
667 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
668 | if (RECORD_LAYER_write_pending(&s->rlayer)) {
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
669 | /* Calls SSLfatal() as required */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
670 | return ssl3_write_pending(s, type, buf, totlen, written); never executed: return ssl3_write_pending(s, type, buf, totlen, written); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
671 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
672 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
673 | /* If we have an alert to send, lets send it */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
674 | if (s->s3->alert_dispatch) {
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
675 | i = s->method->ssl_dispatch_alert(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
676 | if (i <= 0) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
677 | /* SSLfatal() already called if appropriate */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
678 | return i; never executed: return i; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
679 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
680 | /* if it went, fall through and send more stuff */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
681 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
682 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
683 | if (s->rlayer.numwpipes < numpipes) {
| 12-41039 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
684 | if (!ssl3_setup_write_buffer(s, numpipes, 0)) {
| 0-12 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
685 | /* SSLfatal() already called */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
686 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
687 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
688 | } executed 12 times by 1 test: end of block Executed by:
| 12 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
689 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
690 | if (totlen == 0 && !create_empty_fragment)
| 0-40701 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
691 | return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
692 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
693 | sess = s->session; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
694 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
695 | if ((sess == NULL) ||
| 965-40086 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
696 | (s->enc_write_ctx == NULL) || (EVP_MD_CTX_md(s->write_hash) == NULL)) {
| 5482-20220 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
697 | clear = s->enc_write_ctx ? 0 : 1; /* must be AEAD cipher */
| 14738-20831 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
698 | mac_size = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
699 | } else { executed 35569 times by 1 test: end of block Executed by:
| 35569 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
700 | /* TODO(siz_t): Convert me */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
701 | mac_size = EVP_MD_CTX_size(s->write_hash); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
702 | if (mac_size < 0) {
| 0-5482 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
703 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
704 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
705 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
706 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
707 | } executed 5482 times by 1 test: end of block Executed by:
| 5482 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
708 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
709 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
710 | * 'create_empty_fragment' is true only when this function calls itself | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
711 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
712 | if (!clear && !create_empty_fragment && !s->s3->empty_fragment_done) {
| 350-20831 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
713 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
714 | * countermeasure against known-IV weakness in CBC ciphersuites (see | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
715 | * http://www.openssl.org/~bodo/tls-cbc.txt) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
716 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
717 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
718 | if (s->s3->need_empty_fragments && type == SSL3_RT_APPLICATION_DATA) {
| 350-11354 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
719 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
720 | * recursive function call with 'create_empty_fragment' set; this | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
721 | * prepares and buffers the data for an empty fragment (these | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
722 | * 'prefix_len' bytes are sent out later together with the actual | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
723 | * payload) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
724 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
725 | size_t tmppipelen = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
726 | int ret; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
727 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
728 | ret = do_ssl3_write(s, type, buf, &tmppipelen, 1, 1, &prefix_len); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
729 | if (ret <= 0) {
| 0-350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
730 | /* SSLfatal() already called if appropriate */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
731 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
732 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
733 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
734 | if (prefix_len >
| 0-350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
735 | (SSL3_RT_HEADER_LENGTH + SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD)) {
| 0-350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
736 | /* insufficient space */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
737 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
738 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
739 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
740 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
741 | } executed 350 times by 1 test: end of block Executed by:
| 350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
742 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
743 | s->s3->empty_fragment_done = 1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
744 | } executed 12465 times by 1 test: end of block Executed by:
| 12465 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
745 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
746 | if (create_empty_fragment) {
| 350-40701 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
747 | wb = &s->rlayer.wbuf[0]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
748 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
749 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
750 | * extra fragment would be couple of cipher blocks, which would be | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
751 | * multiple of SSL3_ALIGN_PAYLOAD, so if we want to align the real | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
752 | * payload, then we can just pretend we simply have two headers. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
753 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
754 | align = (size_t)SSL3_BUFFER_get_buf(wb) + 2 * SSL3_RT_HEADER_LENGTH; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
755 | align = SSL3_ALIGN_PAYLOAD - 1 - ((align - 1) % SSL3_ALIGN_PAYLOAD); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
756 | #endif | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
757 | SSL3_BUFFER_set_offset(wb, align); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
758 | if (!WPACKET_init_static_len(&pkt[0], SSL3_BUFFER_get_buf(wb),
| 0-350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
759 | SSL3_BUFFER_get_len(wb), 0)
| 0-350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
760 | || !WPACKET_allocate_bytes(&pkt[0], align, NULL)) {
| 0-350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
761 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
762 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
763 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
764 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
765 | wpinited = 1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
766 | } else if (prefix_len) { executed 350 times by 1 test: end of block Executed by:
| 350-40351 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
767 | wb = &s->rlayer.wbuf[0]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
768 | if (!WPACKET_init_static_len(&pkt[0],
| 0-350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
769 | SSL3_BUFFER_get_buf(wb),
| 0-350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
770 | SSL3_BUFFER_get_len(wb), 0)
| 0-350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
771 | || !WPACKET_allocate_bytes(&pkt[0], SSL3_BUFFER_get_offset(wb)
| 0-350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
772 | + prefix_len, NULL)) {
| 0-350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
773 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
774 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
775 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
776 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
777 | wpinited = 1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
778 | } else { executed 350 times by 1 test: end of block Executed by:
| 350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
779 | for (j = 0; j < numpipes; j++) {
| 40351 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
780 | thispkt = &pkt[j]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
781 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
782 | wb = &s->rlayer.wbuf[j]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
783 | #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD != 0 | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
784 | align = (size_t)SSL3_BUFFER_get_buf(wb) + SSL3_RT_HEADER_LENGTH; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
785 | align = SSL3_ALIGN_PAYLOAD - 1 - ((align - 1) % SSL3_ALIGN_PAYLOAD); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
786 | #endif | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
787 | SSL3_BUFFER_set_offset(wb, align); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
788 | if (!WPACKET_init_static_len(thispkt, SSL3_BUFFER_get_buf(wb),
| 0-40351 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
789 | SSL3_BUFFER_get_len(wb), 0)
| 0-40351 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
790 | || !WPACKET_allocate_bytes(thispkt, align, NULL)) {
| 0-40351 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
791 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
792 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
793 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
794 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
795 | wpinited++; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
796 | } executed 40351 times by 1 test: end of block Executed by:
| 40351 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
797 | } executed 40351 times by 1 test: end of block Executed by:
| 40351 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
798 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
799 | /* Explicit IV length, block ciphers appropriate version flag */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
800 | if (s->enc_write_ctx && SSL_USE_EXPLICIT_IV(s) && !SSL_TREAT_AS_TLS13(s)) {
| 0-20831 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
801 | int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
802 | if (mode == EVP_CIPH_CBC_MODE) {
| 2378-3898 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
803 | /* TODO(size_t): Convert me */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
804 | eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
805 | if (eivlen <= 1)
| 0-3898 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
806 | eivlen = 0; never executed: eivlen = 0; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
807 | } else if (mode == EVP_CIPH_GCM_MODE) { executed 3898 times by 1 test: end of block Executed by:
| 180-3898 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
808 | /* Need explicit part of IV for GCM mode */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
809 | eivlen = EVP_GCM_TLS_EXPLICIT_IV_LEN; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
810 | } else if (mode == EVP_CIPH_CCM_MODE) { executed 2198 times by 1 test: end of block Executed by:
| 65-2198 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
811 | eivlen = EVP_CCM_TLS_EXPLICIT_IV_LEN; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
812 | } executed 115 times by 1 test: end of block Executed by:
| 115 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
813 | } executed 6276 times by 1 test: end of block Executed by:
| 6276 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
814 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
815 | totlen = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
816 | /* Clear our SSL3_RECORD structures */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
817 | memset(wr, 0, sizeof(wr)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
818 | for (j = 0; j < numpipes; j++) {
| 41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
819 | unsigned int version = (s->version == TLS1_3_VERSION) ? TLS1_2_VERSION
| 20311-20740 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
820 | : s->version; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
821 | unsigned char *compressdata = NULL; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
822 | size_t maxcomplen; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
823 | unsigned int rectype; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
824 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
825 | thispkt = &pkt[j]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
826 | thiswr = &wr[j]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
827 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
828 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
829 | * In TLSv1.3, once encrypting, we always use application data for the | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
830 | * record type | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
831 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
832 | if (SSL_TREAT_AS_TLS13(s)
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
833 | && s->enc_write_ctx != NULL
| 4212-12393 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
834 | && (s->statem.enc_write_state != ENC_WRITE_STATE_WRITE_PLAIN_ALERTS
| 46-12347 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
835 | || type != SSL3_RT_ALERT))
| 0-46 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
836 | rectype = SSL3_RT_APPLICATION_DATA; executed 12393 times by 1 test: rectype = 23; Executed by:
| 12393 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
837 | else | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
838 | rectype = type; executed 28658 times by 1 test: rectype = type; Executed by:
| 28658 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
839 | SSL3_RECORD_set_type(thiswr, rectype); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
840 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
841 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
842 | * Some servers hang if initial client hello is larger than 256 bytes | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
843 | * and record version number > TLS 1.0 | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
844 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
845 | if (SSL_get_state(s) == TLS_ST_CW_CLNT_HELLO
| 4853-36198 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
846 | && !s->renegotiate
| 21-4832 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
847 | && TLS1_get_version(s) > TLS1_VERSION
| 0-4832 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
848 | && s->hello_retry_request == SSL_HRR_NONE)
| 685-3986 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
849 | version = TLS1_VERSION; executed 3986 times by 1 test: version = 0x0301; Executed by:
| 3986 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
850 | SSL3_RECORD_set_rec_version(thiswr, version); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
851 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
852 | maxcomplen = pipelens[j]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
853 | if (s->compress != NULL)
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
854 | maxcomplen += SSL3_RT_MAX_COMPRESSED_OVERHEAD; never executed: maxcomplen += 1024; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
855 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
856 | /* write the header */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
857 | if (!WPACKET_put_bytes_u8(thispkt, rectype)
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
858 | || !WPACKET_put_bytes_u16(thispkt, version)
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
859 | || !WPACKET_start_sub_packet_u16(thispkt)
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
860 | || (eivlen > 0
| 6211-34840 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
861 | && !WPACKET_allocate_bytes(thispkt, eivlen, NULL))
| 0-6211 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
862 | || (maxcomplen > 0
| 350-40701 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
863 | && !WPACKET_reserve_bytes(thispkt, maxcomplen,
| 0-40701 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
864 | &compressdata))) {
| 0-40701 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
865 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
866 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
867 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
868 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
869 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
870 | /* lets setup the record stuff. */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
871 | SSL3_RECORD_set_data(thiswr, compressdata); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
872 | SSL3_RECORD_set_length(thiswr, pipelens[j]); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
873 | SSL3_RECORD_set_input(thiswr, (unsigned char *)&buf[totlen]); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
874 | totlen += pipelens[j]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
875 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
876 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
877 | * we now 'read' from thiswr->input, thiswr->length bytes into | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
878 | * thiswr->data | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
879 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
880 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
881 | /* first we compress */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
882 | if (s->compress != NULL) {
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
883 | if (!ssl3_do_compress(s, thiswr)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
884 | || !WPACKET_allocate_bytes(thispkt, thiswr->length, NULL)) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
885 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
886 | SSL_R_COMPRESSION_FAILURE); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
887 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
888 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
889 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
890 | if (!WPACKET_memcpy(thispkt, thiswr->input, thiswr->length)) {
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
891 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
892 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
893 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
894 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
895 | SSL3_RECORD_reset_input(&wr[j]); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
896 | } executed 41051 times by 1 test: end of block Executed by:
| 41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
897 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
898 | if (SSL_TREAT_AS_TLS13(s)
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
899 | && s->enc_write_ctx != NULL
| 4212-12393 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
900 | && (s->statem.enc_write_state != ENC_WRITE_STATE_WRITE_PLAIN_ALERTS
| 46-12347 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
901 | || type != SSL3_RT_ALERT)) {
| 0-46 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
902 | size_t rlen, max_send_fragment; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
903 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
904 | if (!WPACKET_put_bytes_u8(thispkt, type)) {
| 0-12393 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
905 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
906 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
907 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
908 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
909 | SSL3_RECORD_add_length(thiswr, 1); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
910 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
911 | /* Add TLS1.3 padding */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
912 | max_send_fragment = ssl_get_max_send_fragment(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
913 | rlen = SSL3_RECORD_get_length(thiswr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
914 | if (rlen < max_send_fragment) {
| 5645-6748 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
915 | size_t padding = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
916 | size_t max_padding = max_send_fragment - rlen; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
917 | if (s->record_padding_cb != NULL) {
| 0-6748 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
918 | padding = s->record_padding_cb(s, type, rlen, s->record_padding_arg); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
919 | } else if (s->block_padding > 0) { never executed: end of block
| 0-6737 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
920 | size_t mask = s->block_padding - 1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
921 | size_t remainder; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
922 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
923 | /* optimize for power of 2 */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
924 | if ((s->block_padding & mask) == 0)
| 3-8 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
925 | remainder = rlen & mask; executed 8 times by 1 test: remainder = rlen & mask; Executed by:
| 8 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
926 | else | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
927 | remainder = rlen % s->block_padding; executed 3 times by 1 test: remainder = rlen % s->block_padding; Executed by:
| 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
928 | /* don't want to add a block of padding if we don't have to */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
929 | if (remainder == 0)
| 0-11 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
930 | padding = 0; never executed: padding = 0; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
931 | else | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
932 | padding = s->block_padding - remainder; executed 11 times by 1 test: padding = s->block_padding - remainder; Executed by:
| 11 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
933 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
934 | if (padding > 0) {
| 11-6737 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
935 | /* do not allow the record to exceed max plaintext length */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
936 | if (padding > max_padding)
| 0-11 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
937 | padding = max_padding; never executed: padding = max_padding; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
938 | if (!WPACKET_memset(thispkt, 0, padding)) {
| 0-11 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
939 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
940 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
941 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
942 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
943 | SSL3_RECORD_add_length(thiswr, padding); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
944 | } executed 11 times by 1 test: end of block Executed by:
| 11 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
945 | } executed 6748 times by 1 test: end of block Executed by:
| 6748 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
946 | } executed 12393 times by 1 test: end of block Executed by:
| 12393 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
947 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
948 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
949 | * we should still have the output to thiswr->data and the input from | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
950 | * wr->input. Length should be thiswr->length. thiswr->data still points | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
951 | * in the wb->buf | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
952 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
953 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
954 | if (!SSL_WRITE_ETM(s) && mac_size != 0) {
| 457-36026 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
955 | unsigned char *mac; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
956 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
957 | if (!WPACKET_allocate_bytes(thispkt, mac_size, &mac)
| 0-457 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
958 | || !s->method->ssl3_enc->mac(s, thiswr, mac, 1)) {
| 0-457 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
959 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
960 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
961 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
962 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
963 | } executed 457 times by 1 test: end of block Executed by:
| 457 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
964 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
965 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
966 | * Reserve some bytes for any growth that may occur during encryption. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
967 | * This will be at most one cipher block or the tag length if using | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
968 | * AEAD. SSL_RT_MAX_CIPHER_BLOCK_SIZE covers either case. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
969 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
970 | if (!WPACKET_reserve_bytes(thispkt, SSL_RT_MAX_CIPHER_BLOCK_SIZE,
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
971 | NULL)
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
972 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
973 | * We also need next the amount of bytes written to this | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
974 | * sub-packet | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
975 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
976 | || !WPACKET_get_length(thispkt, &len)) {
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
977 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
978 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
979 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
980 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
981 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
982 | /* Get a pointer to the start of this record excluding header */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
983 | recordstart = WPACKET_get_curr(thispkt) - len; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
984 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
985 | SSL3_RECORD_set_data(thiswr, recordstart); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
986 | SSL3_RECORD_reset_input(thiswr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
987 | SSL3_RECORD_set_length(thiswr, len); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
988 | } executed 41051 times by 1 test: end of block Executed by:
| 41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
989 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
990 | if (s->statem.enc_write_state == ENC_WRITE_STATE_WRITE_PLAIN_ALERTS) {
| 55-40996 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
991 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
992 | * We haven't actually negotiated the version yet, but we're trying to | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
993 | * send early data - so we need to use the tls13enc function. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
994 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
995 | if (tls13_enc(s, wr, numpipes, 1) < 1) {
| 0-55 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
996 | if (!ossl_statem_in_error(s)) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
997 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
998 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
999 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1000 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1001 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1002 | } else { executed 55 times by 1 test: end of block Executed by:
| 55 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1003 | if (s->method->ssl3_enc->enc(s, wr, numpipes, 1) < 1) {
| 0-40996 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1004 | if (!ossl_statem_in_error(s)) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1005 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1006 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1007 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1008 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1009 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1010 | } executed 40996 times by 1 test: end of block Executed by:
| 40996 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1011 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1012 | for (j = 0; j < numpipes; j++) {
| 40701-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1013 | size_t origlen; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1014 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1015 | thispkt = &pkt[j]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1016 | thiswr = &wr[j]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1017 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1018 | /* Allocate bytes for the encryption overhead */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1019 | if (!WPACKET_get_length(thispkt, &origlen)
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1020 | /* Encryption should never shrink the data! */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1021 | || origlen > thiswr->length
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1022 | || (thiswr->length > origlen
| 20171-20880 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1023 | && !WPACKET_allocate_bytes(thispkt,
| 0-20171 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1024 | thiswr->length - origlen, NULL))) {
| 0-20171 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1025 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1026 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1027 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1028 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1029 | if (SSL_WRITE_ETM(s) && mac_size != 0) {
| 0-36026 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1030 | unsigned char *mac; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1031 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1032 | if (!WPACKET_allocate_bytes(thispkt, mac_size, &mac)
| 0-5025 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1033 | || !s->method->ssl3_enc->mac(s, thiswr, mac, 1)) {
| 0-5025 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1034 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1035 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1036 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1037 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1038 | SSL3_RECORD_add_length(thiswr, mac_size); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1039 | } executed 5025 times by 1 test: end of block Executed by:
| 5025 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1040 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1041 | if (!WPACKET_get_length(thispkt, &len)
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1042 | || !WPACKET_close(thispkt)) {
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1043 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1044 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1045 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1046 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1047 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1048 | if (s->msg_callback) {
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1049 | recordstart = WPACKET_get_curr(thispkt) - len | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1050 | - SSL3_RT_HEADER_LENGTH; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1051 | s->msg_callback(1, 0, SSL3_RT_HEADER, recordstart, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1052 | SSL3_RT_HEADER_LENGTH, s, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1053 | s->msg_callback_arg); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1054 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1055 | if (SSL_TREAT_AS_TLS13(s) && s->enc_write_ctx != NULL) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1056 | unsigned char ctype = type; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1057 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1058 | s->msg_callback(1, s->version, SSL3_RT_INNER_CONTENT_TYPE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1059 | &ctype, 1, s, s->msg_callback_arg); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1060 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1061 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1062 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1063 | if (!WPACKET_finish(thispkt)) {
| 0-41051 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1064 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1065 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1066 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1067 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1068 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1069 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1070 | * we should now have thiswr->data pointing to the encrypted data, which | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1071 | * is thiswr->length long | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1072 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1073 | SSL3_RECORD_set_type(thiswr, type); /* not needed but helps for | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1074 | * debugging */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1075 | SSL3_RECORD_add_length(thiswr, SSL3_RT_HEADER_LENGTH); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1076 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1077 | if (create_empty_fragment) {
| 350-40701 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1078 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1079 | * we are in a recursive call; just return the length, don't write | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1080 | * out anything here | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1081 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1082 | if (j > 0) {
| 0-350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1083 | /* We should never be pipelining an empty fragment!! */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1084 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_SSL3_WRITE, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1085 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1086 | goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1087 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1088 | *written = SSL3_RECORD_get_length(thiswr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1089 | return 1; executed 350 times by 1 test: return 1; Executed by:
| 350 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1090 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1091 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1092 | /* now let's set up wb */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1093 | SSL3_BUFFER_set_left(&s->rlayer.wbuf[j], | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1094 | prefix_len + SSL3_RECORD_get_length(thiswr)); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1095 | } executed 40701 times by 1 test: end of block Executed by:
| 40701 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1096 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1097 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1098 | * memorize arguments so that ssl3_write_pending can detect bad write | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1099 | * retries later | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1100 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1101 | s->rlayer.wpend_tot = totlen; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1102 | s->rlayer.wpend_buf = buf; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1103 | s->rlayer.wpend_type = type; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1104 | s->rlayer.wpend_ret = totlen; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1105 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1106 | /* we now just need to write the buffer */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1107 | return ssl3_write_pending(s, type, buf, totlen, written); executed 40701 times by 1 test: return ssl3_write_pending(s, type, buf, totlen, written); Executed by:
| 40701 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1108 | err: | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1109 | for (j = 0; j < wpinited; j++)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1110 | WPACKET_cleanup(&pkt[j]); never executed: WPACKET_cleanup(&pkt[j]); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1111 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1112 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1113 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1114 | /* if s->s3->wbuf.left != 0, we need to call this | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1115 | * | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1116 | * Return values are as per SSL_write() | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1117 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1118 | int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, size_t len, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1119 | size_t *written) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1120 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1121 | int i; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1122 | SSL3_BUFFER *wb = s->rlayer.wbuf; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1123 | size_t currbuf = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1124 | size_t tmpwrit = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1125 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1126 | if ((s->rlayer.wpend_tot > len)
| 0-45492 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1127 | || (!(s->mode & SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER)
| 0-45492 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1128 | && (s->rlayer.wpend_buf != buf))
| 0-45492 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1129 | || (s->rlayer.wpend_type != type)) {
| 0-45492 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1130 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_PENDING, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1131 | SSL_R_BAD_WRITE_RETRY); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1132 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1133 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1134 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1135 | for (;;) { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1136 | /* Loop until we find a buffer we haven't written out yet */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1137 | if (SSL3_BUFFER_get_left(&wb[currbuf]) == 0
| 0-45902 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1138 | && currbuf < s->rlayer.numwpipes - 1) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1139 | currbuf++; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1140 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1141 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1142 | clear_sys_error(); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1143 | if (s->wbio != NULL) {
| 0-45902 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1144 | s->rwstate = SSL_WRITING; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1145 | /* TODO(size_t): Convert this call */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1146 | i = BIO_write(s->wbio, (char *) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1147 | &(SSL3_BUFFER_get_buf(&wb[currbuf]) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1148 | [SSL3_BUFFER_get_offset(&wb[currbuf])]), | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1149 | (unsigned int)SSL3_BUFFER_get_left(&wb[currbuf])); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1150 | if (i >= 0)
| 529-45373 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1151 | tmpwrit = i; executed 45373 times by 1 test: tmpwrit = i; Executed by:
| 45373 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1152 | } else { executed 45902 times by 1 test: end of block Executed by:
| 45902 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1153 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_WRITE_PENDING, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1154 | SSL_R_BIO_NOT_SET); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1155 | i = -1; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1156 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1157 | if (i > 0 && tmpwrit == SSL3_BUFFER_get_left(&wb[currbuf])) {
| 410-45369 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1158 | SSL3_BUFFER_set_left(&wb[currbuf], 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1159 | SSL3_BUFFER_add_offset(&wb[currbuf], tmpwrit); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1160 | if (currbuf + 1 < s->rlayer.numwpipes)
| 0-44959 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1161 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1162 | s->rwstate = SSL_NOTHING; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1163 | *written = s->rlayer.wpend_ret; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1164 | return 1; executed 44959 times by 1 test: return 1; Executed by:
| 44959 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1165 | } else if (i <= 0) {
| 410-533 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1166 | if (SSL_IS_DTLS(s)) {
| 0-533 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1167 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1168 | * For DTLS, just drop it. That's kind of the whole point in | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1169 | * using a datagram service | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1170 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1171 | SSL3_BUFFER_set_left(&wb[currbuf], 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1172 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1173 | return i; executed 533 times by 1 test: return i; Executed by:
| 533 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1174 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1175 | SSL3_BUFFER_add_offset(&wb[currbuf], tmpwrit); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1176 | SSL3_BUFFER_sub_left(&wb[currbuf], tmpwrit); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1177 | } executed 410 times by 1 test: end of block Executed by:
| 410 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1178 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1179 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1180 | /*- | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1181 | * Return up to 'len' payload bytes received in 'type' records. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1182 | * 'type' is one of the following: | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1183 | * | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1184 | * - SSL3_RT_HANDSHAKE (when ssl3_get_message calls us) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1185 | * - SSL3_RT_APPLICATION_DATA (when ssl3_read calls us) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1186 | * - 0 (during a shutdown, no data has to be returned) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1187 | * | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1188 | * If we don't have stored data to work from, read a SSL/TLS record first | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1189 | * (possibly multiple records if we still don't have anything to return). | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1190 | * | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1191 | * This function must handle any surprises the peer may have for us, such as | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1192 | * Alert records (e.g. close_notify) or renegotiation requests. ChangeCipherSpec | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1193 | * messages are treated as if they were handshake messages *if* the |recd_type| | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1194 | * argument is non NULL. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1195 | * Also if record payloads contain fragments too small to process, we store | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1196 | * them until there is enough for the respective protocol (the record protocol | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1197 | * may use arbitrary fragmentation and even interleaving): | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1198 | * Change cipher spec protocol | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1199 | * just 1 byte needed, no need for keeping anything stored | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1200 | * Alert protocol | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1201 | * 2 bytes needed (AlertLevel, AlertDescription) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1202 | * Handshake protocol | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1203 | * 4 bytes needed (HandshakeType, uint24 length) -- we just have | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1204 | * to detect unexpected Client Hello and Hello Request messages | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1205 | * here, anything else is handled by higher layers | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1206 | * Application data protocol | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1207 | * none of our business | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1208 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1209 | int ssl3_read_bytes(SSL *s, int type, int *recvd_type, unsigned char *buf, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1210 | size_t len, int peek, size_t *readbytes) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1211 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1212 | int i, j, ret; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1213 | size_t n, curr_rec, num_recs, totalbytes; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1214 | SSL3_RECORD *rr; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1215 | SSL3_BUFFER *rbuf; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1216 | void (*cb) (const SSL *ssl, int type2, int val) = NULL; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1217 | int is_tls13 = SSL_IS_TLS13(s);
| 0-90401 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1218 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1219 | rbuf = &s->rlayer.rbuf; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1220 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1221 | if (!SSL3_BUFFER_is_initialised(rbuf)) {
| 106-90295 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1222 | /* Not initialized yet */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1223 | if (!ssl3_setup_read_buffer(s)) {
| 0-106 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1224 | /* SSLfatal() already called */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1225 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1226 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1227 | } executed 106 times by 1 test: end of block Executed by:
| 106 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1228 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1229 | if ((type && (type != SSL3_RT_APPLICATION_DATA)
| 1679-88722 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1230 | && (type != SSL3_RT_HANDSHAKE)) || (peek
| 0-90401 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1231 | && (type !=
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1232 | SSL3_RT_APPLICATION_DATA))) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1233 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1234 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1235 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1236 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1237 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1238 | if ((type == SSL3_RT_HANDSHAKE) && (s->rlayer.handshake_fragment_len > 0))
| 1034-67689 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1239 | /* (partially) satisfy request from storage */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1240 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1241 | unsigned char *src = s->rlayer.handshake_fragment; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1242 | unsigned char *dst = buf; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1243 | unsigned int k; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1244 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1245 | /* peek == 0 */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1246 | n = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1247 | while ((len > 0) && (s->rlayer.handshake_fragment_len > 0)) {
| 0-4136 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1248 | *dst++ = *src++; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1249 | len--; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1250 | s->rlayer.handshake_fragment_len--; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1251 | n++; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1252 | } executed 4136 times by 1 test: end of block Executed by:
| 4136 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1253 | /* move any remaining fragment bytes: */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1254 | for (k = 0; k < s->rlayer.handshake_fragment_len; k++)
| 0-1034 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1255 | s->rlayer.handshake_fragment[k] = *src++; never executed: s->rlayer.handshake_fragment[k] = *src++; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1256 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1257 | if (recvd_type != NULL)
| 0-1034 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1258 | *recvd_type = SSL3_RT_HANDSHAKE; executed 1034 times by 1 test: *recvd_type = 22; Executed by:
| 1034 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1259 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1260 | *readbytes = n; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1261 | return 1; executed 1034 times by 1 test: return 1; Executed by:
| 1034 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1262 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1263 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1264 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1265 | * Now s->rlayer.handshake_fragment_len == 0 if type == SSL3_RT_HANDSHAKE. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1266 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1267 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1268 | if (!ossl_statem_get_in_handshake(s) && SSL_in_init(s)) {
| 2111-66655 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1269 | /* type == SSL3_RT_APPLICATION_DATA */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1270 | i = s->handshake_func(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1271 | /* SSLfatal() already called */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1272 | if (i < 0)
| 113-1998 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1273 | return i; executed 1998 times by 1 test: return i; Executed by:
| 1998 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1274 | if (i == 0)
| 0-113 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1275 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1276 | } executed 113 times by 1 test: end of block Executed by:
| 113 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1277 | start: code before this statement executed 87369 times by 1 test: start: Executed by:
| 87369 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1278 | s->rwstate = SSL_NOTHING; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1279 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1280 | /*- | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1281 | * For each record 'i' up to |num_recs] | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1282 | * rr[i].type - is the type of record | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1283 | * rr[i].data, - data | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1284 | * rr[i].off, - offset into 'data' for next read | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1285 | * rr[i].length, - number of bytes. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1286 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1287 | rr = s->rlayer.rrec; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1288 | num_recs = RECORD_LAYER_get_numrpipes(&s->rlayer); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1289 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1290 | do { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1291 | /* get new records if necessary */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1292 | if (num_recs == 0) {
| 55708-80271 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1293 | ret = ssl3_get_record(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1294 | if (ret <= 0) {
| 29138-51133 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1295 | /* SSLfatal() already called if appropriate */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1296 | return ret; executed 29138 times by 1 test: return ret; Executed by:
| 29138 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1297 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1298 | num_recs = RECORD_LAYER_get_numrpipes(&s->rlayer); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1299 | if (num_recs == 0) {
| 0-51133 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1300 | /* Shouldn't happen */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1301 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1302 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1303 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1304 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1305 | } executed 51133 times by 1 test: end of block Executed by:
| 51133 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1306 | /* Skip over any records we have already read */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1307 | for (curr_rec = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1308 | curr_rec < num_recs && SSL3_RECORD_is_read(&rr[curr_rec]);
| 45240-106841 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1309 | curr_rec++) ; executed 45240 times by 1 test: ; Executed by:
| 45240 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1310 | if (curr_rec == num_recs) {
| 45240-61601 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1311 | RECORD_LAYER_set_numrpipes(&s->rlayer, 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1312 | num_recs = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1313 | curr_rec = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1314 | } executed 45240 times by 1 test: end of block Executed by:
| 45240 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1315 | } while (num_recs == 0); executed 106841 times by 1 test: end of block Executed by:
| 45240-106841 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1316 | rr = &rr[curr_rec]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1317 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1318 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1319 | * Reset the count of consecutive warning alerts if we've got a non-empty | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1320 | * record that isn't an alert. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1321 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1322 | if (SSL3_RECORD_get_type(rr) != SSL3_RT_ALERT
| 2349-59252 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1323 | && SSL3_RECORD_get_length(rr) != 0)
| 1922-57330 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1324 | s->rlayer.alert_count = 0; executed 57330 times by 1 test: s->rlayer.alert_count = 0; Executed by:
| 57330 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1325 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1326 | /* we now have a packet which can be read and processed */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1327 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1328 | if (s->s3->change_cipher_spec /* set when we receive ChangeCipherSpec,
| 3777-57824 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1329 | * reset by ssl3_get_finished */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1330 | && (SSL3_RECORD_get_type(rr) != SSL3_RT_HANDSHAKE)) {
| 0-3777 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1331 | SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1332 | SSL_R_DATA_BETWEEN_CCS_AND_FINISHED); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1333 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1334 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1335 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1336 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1337 | * If the other end has shut down, throw anything we read away (even in | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1338 | * 'peek' mode) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1339 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1340 | if (s->shutdown & SSL_RECEIVED_SHUTDOWN) {
| 0-61601 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1341 | SSL3_RECORD_set_length(rr, 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1342 | s->rwstate = SSL_NOTHING; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1343 | return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1344 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1345 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1346 | if (type == SSL3_RECORD_get_type(rr)
| 6233-55368 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1347 | || (SSL3_RECORD_get_type(rr) == SSL3_RT_CHANGE_CIPHER_SPEC
| 2616-3617 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1348 | && type == SSL3_RT_HANDSHAKE && recvd_type != NULL
| 0-2616 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1349 | && !is_tls13)) {
| 0-2616 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1350 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1351 | * SSL3_RT_APPLICATION_DATA or | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1352 | * SSL3_RT_HANDSHAKE or | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1353 | * SSL3_RT_CHANGE_CIPHER_SPEC | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1354 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1355 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1356 | * make sure that we are not getting application data when we are | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1357 | * doing a handshake for the first time | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1358 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1359 | if (SSL_in_init(s) && (type == SSL3_RT_APPLICATION_DATA) &&
| 0-48261 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1360 | (s->enc_read_ctx == NULL)) {
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1361 | SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1362 | SSL_R_APP_DATA_IN_HANDSHAKE); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1363 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1364 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1365 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1366 | if (type == SSL3_RT_HANDSHAKE
| 9723-48261 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1367 | && SSL3_RECORD_get_type(rr) == SSL3_RT_CHANGE_CIPHER_SPEC
| 2616-45645 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1368 | && s->rlayer.handshake_fragment_len > 0) {
| 0-2616 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1369 | SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1370 | SSL_R_CCS_RECEIVED_EARLY); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1371 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1372 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1373 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1374 | if (recvd_type != NULL)
| 24175-33809 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1375 | *recvd_type = SSL3_RECORD_get_type(rr); executed 24175 times by 1 test: *recvd_type = ((rr)->type); Executed by:
| 24175 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1376 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1377 | if (len == 0) {
| 0-57984 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1378 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1379 | * Mark a zero length record as read. This ensures multiple calls to | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1380 | * SSL_read() with a zero length buffer will eventually cause | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1381 | * SSL_pending() to report data as being available. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1382 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1383 | if (SSL3_RECORD_get_length(rr) == 0)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1384 | SSL3_RECORD_set_read(rr); never executed: ((rr)->read = 1); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1385 | return 0; never executed: return 0; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1386 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1387 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1388 | totalbytes = 0; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1389 | do { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1390 | if (len - totalbytes > SSL3_RECORD_get_length(rr))
| 18055-39929 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1391 | n = SSL3_RECORD_get_length(rr); executed 18055 times by 1 test: n = ((rr)->length); Executed by:
| 18055 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1392 | else | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1393 | n = len - totalbytes; executed 39929 times by 1 test: n = len - totalbytes; Executed by:
| 39929 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1394 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1395 | memcpy(buf, &(rr->data[rr->off]), n); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1396 | buf += n; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1397 | if (peek) {
| 0-57984 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1398 | /* Mark any zero length record as consumed CVE-2016-6305 */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1399 | if (SSL3_RECORD_get_length(rr) == 0)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1400 | SSL3_RECORD_set_read(rr); never executed: ((rr)->read = 1); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1401 | } else { never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1402 | SSL3_RECORD_sub_length(rr, n); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1403 | SSL3_RECORD_add_off(rr, n); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1404 | if (SSL3_RECORD_get_length(rr) == 0) {
| 22295-35689 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1405 | s->rlayer.rstate = SSL_ST_READ_HEADER; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1406 | SSL3_RECORD_set_off(rr, 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1407 | SSL3_RECORD_set_read(rr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1408 | } executed 35689 times by 1 test: end of block Executed by:
| 35689 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1409 | } executed 57984 times by 1 test: end of block Executed by:
| 57984 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1410 | if (SSL3_RECORD_get_length(rr) == 0
| 22295-35689 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1411 | || (peek && n == SSL3_RECORD_get_length(rr))) {
| 0-22295 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1412 | curr_rec++; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1413 | rr++; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1414 | } executed 35689 times by 1 test: end of block Executed by:
| 35689 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1415 | totalbytes += n; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1416 | } while (type == SSL3_RT_APPLICATION_DATA && curr_rec < num_recs executed 57984 times by 1 test: end of block Executed by:
| 1-57984 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1417 | && totalbytes < len);
| 0-1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1418 | if (totalbytes == 0) {
| 1913-56071 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1419 | /* We must have read empty records. Get more data */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1420 | goto start; executed 1913 times by 1 test: goto start; Executed by:
| 1913 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1421 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1422 | if (!peek && curr_rec == num_recs
| 0-56071 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1423 | && (s->mode & SSL_MODE_RELEASE_BUFFERS)
| 0-33776 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1424 | && SSL3_BUFFER_get_left(rbuf) == 0)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1425 | ssl3_release_read_buffer(s); never executed: ssl3_release_read_buffer(s); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1426 | *readbytes = totalbytes; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1427 | return 1; executed 56071 times by 1 test: return 1; Executed by:
| 56071 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1428 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1429 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1430 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1431 | * If we get here, then type != rr->type; if we have a handshake message, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1432 | * then it was unexpected (Hello Request or Client Hello) or invalid (we | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1433 | * were actually expecting a CCS). | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1434 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1435 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1436 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1437 | * Lets just double check that we've not got an SSLv2 record | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1438 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1439 | if (rr->rec_version == SSL2_VERSION) {
| 0-3617 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1440 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1441 | * Should never happen. ssl3_get_record() should only give us an SSLv2 | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1442 | * record back if this is the first packet and we are looking for an | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1443 | * initial ClientHello. Therefore |type| should always be equal to | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1444 | * |rr->type|. If not then something has gone horribly wrong | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1445 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1446 | SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1447 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1448 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1449 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1450 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1451 | if (s->method->version == TLS_ANY_VERSION
| 491-3126 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1452 | && (s->server || rr->type != SSL3_RT_ALERT)) {
| 2-484 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1453 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1454 | * If we've got this far and still haven't decided on what version | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1455 | * we're using then this must be a client side alert we're dealing with | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1456 | * (we don't allow heartbeats yet). We shouldn't be receiving anything | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1457 | * other than a ClientHello if we are a server. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1458 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1459 | s->version = rr->rec_version; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1460 | SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1461 | SSL_R_UNEXPECTED_MESSAGE); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1462 | return -1; executed 9 times by 1 test: return -1; Executed by:
| 9 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1463 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1464 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1465 | /*- | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1466 | * s->rlayer.handshake_fragment_len == 4 iff rr->type == SSL3_RT_HANDSHAKE; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1467 | * (Possibly rr is 'empty' now, i.e. rr->length may be 0.) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1468 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1469 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1470 | if (SSL3_RECORD_get_type(rr) == SSL3_RT_ALERT) {
| 1260-2348 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1471 | unsigned int alert_level, alert_descr; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1472 | unsigned char *alert_bytes = SSL3_RECORD_get_data(rr) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1473 | + SSL3_RECORD_get_off(rr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1474 | PACKET alert; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1475 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1476 | if (!PACKET_buf_init(&alert, alert_bytes, SSL3_RECORD_get_length(rr))
| 0-2348 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1477 | || !PACKET_get_1(&alert, &alert_level)
| 4-2344 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1478 | || !PACKET_get_1(&alert, &alert_descr)
| 4-2340 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1479 | || PACKET_remaining(&alert) != 0) {
| 2-2338 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1480 | SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1481 | SSL_R_INVALID_ALERT); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1482 | return -1; executed 10 times by 1 test: return -1; Executed by:
| 10 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1483 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1484 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1485 | if (s->msg_callback)
| 0-2338 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1486 | s->msg_callback(0, s->version, SSL3_RT_ALERT, alert_bytes, 2, s, never executed: s->msg_callback(0, s->version, 21, alert_bytes, 2, s, s->msg_callback_arg); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1487 | s->msg_callback_arg); never executed: s->msg_callback(0, s->version, 21, alert_bytes, 2, s, s->msg_callback_arg); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1488 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1489 | if (s->info_callback != NULL)
| 485-1853 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1490 | cb = s->info_callback; executed 1853 times by 1 test: cb = s->info_callback; Executed by:
| 1853 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1491 | else if (s->ctx->info_callback != NULL)
| 0-485 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1492 | cb = s->ctx->info_callback; never executed: cb = s->ctx->info_callback; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1493 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1494 | if (cb != NULL) {
| 485-1853 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1495 | j = (alert_level << 8) | alert_descr; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1496 | cb(s, SSL_CB_READ_ALERT, j); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1497 | } executed 1853 times by 1 test: end of block Executed by:
| 1853 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1498 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1499 | if (alert_level == SSL3_AL_WARNING
| 280-2058 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1500 | || (is_tls13 && alert_descr == SSL_AD_USER_CANCELLED)) {
| 1-250 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1501 | s->s3->warn_alert = alert_descr; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1502 | SSL3_RECORD_set_read(rr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1503 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1504 | s->rlayer.alert_count++; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1505 | if (s->rlayer.alert_count == MAX_WARN_ALERT_COUNT) {
| 1-2058 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1506 | SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1507 | SSL_R_TOO_MANY_WARN_ALERTS); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1508 | return -1; executed 1 time by 1 test: return -1; Executed by:
| 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1509 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1510 | } executed 2058 times by 1 test: end of block Executed by:
| 2058 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1511 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1512 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1513 | * Apart from close_notify the only other warning alert in TLSv1.3 | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1514 | * is user_cancelled - which we just ignore. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1515 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1516 | if (is_tls13 && alert_descr == SSL_AD_USER_CANCELLED) {
| 4-1705 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1517 | goto start; executed 4 times by 1 test: goto start; Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1518 | } else if (alert_descr == SSL_AD_CLOSE_NOTIFY
| 538-1795 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1519 | && (is_tls13 || alert_level == SSL3_AL_WARNING)) {
| 1-1196 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1520 | s->shutdown |= SSL_RECEIVED_SHUTDOWN; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1521 | return 0; executed 1794 times by 1 test: return 0; Executed by:
| 1794 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1522 | } else if (alert_level == SSL3_AL_FATAL || is_tls13) {
| 1-277 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1523 | char tmp[16]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1524 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1525 | s->rwstate = SSL_NOTHING; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1526 | s->s3->fatal_alert = alert_descr; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1527 | SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1528 | SSL_AD_REASON_OFFSET + alert_descr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1529 | BIO_snprintf(tmp, sizeof tmp, "%d", alert_descr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1530 | ERR_add_error_data(2, "SSL alert number ", tmp); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1531 | s->shutdown |= SSL_RECEIVED_SHUTDOWN; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1532 | SSL3_RECORD_set_read(rr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1533 | SSL_CTX_remove_session(s->session_ctx, s->session); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1534 | return 0; executed 278 times by 1 test: return 0; Executed by:
| 278 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1535 | } else if (alert_descr == SSL_AD_NO_RENEGOTIATION) {
| 4-257 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1536 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1537 | * This is a warning but we receive it if we requested | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1538 | * renegotiation and the peer denied it. Terminate with a fatal | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1539 | * alert because if application tried to renegotiate it | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1540 | * presumably had a good reason and expects it to succeed. In | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1541 | * future we might have a renegotiation where we don't care if | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1542 | * the peer refused it where we carry on. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1543 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1544 | SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1545 | SSL_R_NO_RENEGOTIATION); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1546 | return -1; executed 4 times by 1 test: return -1; Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1547 | } else if (alert_level == SSL3_AL_WARNING) {
| 1-256 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1548 | /* We ignore any other warning alert in TLSv1.2 and below */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1549 | goto start; executed 256 times by 1 test: goto start; Executed by:
| 256 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1550 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1551 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1552 | SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1553 | SSL_R_UNKNOWN_ALERT_TYPE); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1554 | return -1; executed 1 time by 1 test: return -1; Executed by:
| 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1555 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1556 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1557 | if ((s->shutdown & SSL_SENT_SHUTDOWN) != 0) {
| 5-1255 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1558 | if (SSL3_RECORD_get_type(rr) == SSL3_RT_HANDSHAKE) {
| 1-4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1559 | BIO *rbio; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1560 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1561 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1562 | * We ignore any handshake messages sent to us unless they are | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1563 | * TLSv1.3 in which case we want to process them. For all other | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1564 | * handshake messages we can't do anything reasonable with them | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1565 | * because we are unable to write any response due to having already | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1566 | * sent close_notify. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1567 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1568 | if (!SSL_IS_TLS13(s)) {
| 0-4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1569 | SSL3_RECORD_set_length(rr, 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1570 | SSL3_RECORD_set_read(rr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1571 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1572 | if ((s->mode & SSL_MODE_AUTO_RETRY) != 0)
| 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1573 | goto start; never executed: goto start; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1574 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1575 | s->rwstate = SSL_READING; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1576 | rbio = SSL_get_rbio(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1577 | BIO_clear_retry_flags(rbio); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1578 | BIO_set_retry_read(rbio); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1579 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1580 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1581 | } else { executed 4 times by 1 test: end of block Executed by:
| 4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1582 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1583 | * The peer is continuing to send application data, but we have | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1584 | * already sent close_notify. If this was expected we should have | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1585 | * been called via SSL_read() and this would have been handled | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1586 | * above. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1587 | * No alert sent because we already sent close_notify | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1588 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1589 | SSL3_RECORD_set_length(rr, 0); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1590 | SSL3_RECORD_set_read(rr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1591 | SSLfatal(s, SSL_AD_NO_ALERT, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1592 | SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1593 | return -1; executed 1 time by 1 test: return -1; Executed by:
| 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1594 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1595 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1596 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1597 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1598 | * For handshake data we have 'fragment' storage, so fill that so that we | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1599 | * can process the header at a fixed place. This is done after the | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1600 | * "SHUTDOWN" code above to avoid filling the fragment storage with data | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1601 | * that we're just going to discard. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1602 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1603 | if (SSL3_RECORD_get_type(rr) == SSL3_RT_HANDSHAKE) {
| 225-1034 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1604 | size_t dest_maxlen = sizeof(s->rlayer.handshake_fragment); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1605 | unsigned char *dest = s->rlayer.handshake_fragment; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1606 | size_t *dest_len = &s->rlayer.handshake_fragment_len; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1607 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1608 | n = dest_maxlen - *dest_len; /* available space in 'dest' */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1609 | if (SSL3_RECORD_get_length(rr) < n)
| 0-1034 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1610 | n = SSL3_RECORD_get_length(rr); /* available bytes */ never executed: n = ((rr)->length); | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1611 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1612 | /* now move 'n' bytes: */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1613 | memcpy(dest + *dest_len, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1614 | SSL3_RECORD_get_data(rr) + SSL3_RECORD_get_off(rr), n); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1615 | SSL3_RECORD_add_off(rr, n); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1616 | SSL3_RECORD_sub_length(rr, n); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1617 | *dest_len += n; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1618 | if (SSL3_RECORD_get_length(rr) == 0)
| 15-1019 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1619 | SSL3_RECORD_set_read(rr); executed 15 times by 1 test: ((rr)->read = 1); Executed by:
| 15 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1620 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1621 | if (*dest_len < dest_maxlen)
| 0-1034 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1622 | goto start; /* fragment was too small */ never executed: goto start; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1623 | } executed 1034 times by 1 test: end of block Executed by:
| 1034 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1624 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1625 | if (SSL3_RECORD_get_type(rr) == SSL3_RT_CHANGE_CIPHER_SPEC) {
| 0-1259 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1626 | SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1627 | SSL_R_CCS_RECEIVED_EARLY); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1628 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1629 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1630 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1631 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1632 | * Unexpected handshake message (ClientHello, NewSessionTicket (TLS1.3) or | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1633 | * protocol violation) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1634 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1635 | if ((s->rlayer.handshake_fragment_len >= 4)
| 225-1034 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1636 | && !ossl_statem_get_in_handshake(s)) {
| 0-1034 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1637 | int ined = (s->early_data_state == SSL_EARLY_DATA_READING); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1638 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1639 | /* We found handshake data, so we're going back into init */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1640 | ossl_statem_set_in_init(s, 1); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1641 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1642 | i = s->handshake_func(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1643 | /* SSLfatal() already called if appropriate */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1644 | if (i < 0)
| 20-1014 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1645 | return i; executed 20 times by 1 test: return i; Executed by:
| 20 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1646 | if (i == 0) {
| 0-1014 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1647 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1648 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1649 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1650 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1651 | * If we were actually trying to read early data and we found a | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1652 | * handshake message, then we don't want to continue to try and read | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1653 | * the application data any more. It won't be "early" now. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1654 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1655 | if (ined)
| 7-1007 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1656 | return -1; executed 7 times by 1 test: return -1; Executed by:
| 7 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1657 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1658 | if (!(s->mode & SSL_MODE_AUTO_RETRY)) {
| 25-982 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1659 | if (SSL3_BUFFER_get_left(rbuf) == 0) {
| 0-25 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1660 | /* no read-ahead left? */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1661 | BIO *bio; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1662 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1663 | * In the case where we try to read application data, but we | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1664 | * trigger an SSL handshake, we return -1 with the retry | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1665 | * option set. Otherwise renegotiation may cause nasty | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1666 | * problems in the blocking world | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1667 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1668 | s->rwstate = SSL_READING; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1669 | bio = SSL_get_rbio(s); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1670 | BIO_clear_retry_flags(bio); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1671 | BIO_set_retry_read(bio); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1672 | return -1; executed 25 times by 1 test: return -1; Executed by:
| 25 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1673 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1674 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1675 | goto start; executed 982 times by 1 test: goto start; Executed by:
| 982 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1676 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1677 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1678 | switch (SSL3_RECORD_get_type(rr)) { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1679 | default: executed 6 times by 1 test: default: Executed by:
| 6 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1680 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1681 | * TLS 1.0 and 1.1 say you SHOULD ignore unrecognised record types, but | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1682 | * TLS 1.2 says you MUST send an unexpected message alert. We use the | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1683 | * TLS 1.2 behaviour for all protocol versions to prevent issues where | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1684 | * no progress is being made and the peer continually sends unrecognised | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1685 | * record types, using up resources processing them. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1686 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1687 | SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1688 | SSL_R_UNEXPECTED_RECORD); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1689 | return -1; executed 6 times by 1 test: return -1; Executed by:
| 6 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1690 | case SSL3_RT_CHANGE_CIPHER_SPEC: never executed: case 20: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1691 | case SSL3_RT_ALERT: never executed: case 21: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1692 | case SSL3_RT_HANDSHAKE: never executed: case 22: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1693 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1694 | * we already handled all of these, with the possible exception of | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1695 | * SSL3_RT_HANDSHAKE when ossl_statem_get_in_handshake(s) is true, but | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1696 | * that should not happen when type != rr->type | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1697 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1698 | SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1699 | ERR_R_INTERNAL_ERROR); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1700 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1701 | case SSL3_RT_APPLICATION_DATA: executed 219 times by 1 test: case 23: Executed by:
| 219 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1702 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1703 | * At this point, we were expecting handshake data, but have | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1704 | * application data. If the library was running inside ssl3_read() | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1705 | * (i.e. in_read_app_data is set) and it makes sense to read | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1706 | * application data at this point (session renegotiation not yet | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1707 | * started), we will indulge it. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1708 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1709 | if (ossl_statem_app_data_allowed(s)) {
| 0-219 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1710 | s->s3->in_read_app_data = 2; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1711 | return -1; never executed: return -1; | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1712 | } else if (ossl_statem_skip_early_data(s)) {
| 3-216 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1713 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1714 | * This can happen after a client sends a CH followed by early_data, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1715 | * but the server responds with a HelloRetryRequest. The server | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1716 | * reads the next record from the client expecting to find a | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1717 | * plaintext ClientHello but gets a record which appears to be | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1718 | * application data. The trial decrypt "works" because null | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1719 | * decryption was applied. We just skip it and move on to the next | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1720 | * record. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1721 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1722 | if (!early_data_count_ok(s, rr->length,
| 1-215 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1723 | EARLY_DATA_CIPHERTEXT_OVERHEAD, 0)) {
| 1-215 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1724 | /* SSLfatal() already called */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1725 | return -1; executed 1 time by 1 test: return -1; Executed by:
| 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1726 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1727 | SSL3_RECORD_set_read(rr); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1728 | goto start; executed 215 times by 1 test: goto start; Executed by:
| 215 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1729 | } else { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1730 | SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_F_SSL3_READ_BYTES, | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1731 | SSL_R_UNEXPECTED_RECORD); | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1732 | return -1; executed 3 times by 1 test: return -1; Executed by:
| 3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1733 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1734 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1735 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1736 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1737 | void ssl3_record_sequence_update(unsigned char *seq) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1738 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1739 | int i; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1740 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1741 | for (i = 7; i >= 0; i--) {
| 0-4346 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1742 | ++seq[i]; | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1743 | if (seq[i] != 0)
| 0-4346 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1744 | break; executed 4346 times by 1 test: break; Executed by:
| 4346 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1745 | } never executed: end of block | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1746 | } executed 4346 times by 1 test: end of block Executed by:
| 4346 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1747 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1748 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1749 | * Returns true if the current rrec was sent in SSLv2 backwards compatible | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1750 | * format and false otherwise. | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1751 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1752 | int RECORD_LAYER_is_sslv2_record(RECORD_LAYER *rl) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1753 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1754 | return SSL3_RECORD_is_sslv2_record(&rl->rrec[0]); executed 44645 times by 1 test: return ((&rl->rrec[0])->rec_version == 0x0002); Executed by:
| 44645 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1755 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1756 | - | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1757 | /* | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1758 | * Returns the length in bytes of the current rrec | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1759 | */ | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1760 | size_t RECORD_LAYER_get_rrec_length(RECORD_LAYER *rl) | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1761 | { | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1762 | return SSL3_RECORD_get_length(&rl->rrec[0]); executed 2746 times by 1 test: return ((&rl->rrec[0])->length); Executed by:
| 2746 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1763 | } | - | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Source code | Switch to Preprocessed file |