diff options
| author | miod <> | 2014-05-26 17:06:21 +0000 |
|---|---|---|
| committer | miod <> | 2014-05-26 17:06:21 +0000 |
| commit | be6c7be0c897a4579deb5f3bdc20177429f57d10 (patch) | |
| tree | 905d7a824b69366bc00870b29f40d00a24e02ee7 /src | |
| parent | 58b5aef9f7f1523118ecb52caa290a0277c800fc (diff) | |
| download | openbsd-be6c7be0c897a4579deb5f3bdc20177429f57d10.tar.gz openbsd-be6c7be0c897a4579deb5f3bdc20177429f57d10.tar.bz2 openbsd-be6c7be0c897a4579deb5f3bdc20177429f57d10.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 | ||
