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