diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/libssl/tls13_legacy.c | 48 |
1 files changed, 13 insertions, 35 deletions
diff --git a/src/lib/libssl/tls13_legacy.c b/src/lib/libssl/tls13_legacy.c index 6a06330b22..e42600b2cd 100644 --- a/src/lib/libssl/tls13_legacy.c +++ b/src/lib/libssl/tls13_legacy.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tls13_legacy.c,v 1.45 2026/04/03 07:17:36 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_legacy.c,v 1.46 2026/08/21 08:50:34 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -317,51 +317,34 @@ static int | |||
| 317 | tls13_use_legacy_stack(struct tls13_ctx *ctx) | 317 | tls13_use_legacy_stack(struct tls13_ctx *ctx) |
| 318 | { | 318 | { |
| 319 | SSL *s = ctx->ssl; | 319 | SSL *s = ctx->ssl; |
| 320 | CBB cbb, fragment; | ||
| 321 | CBS cbs; | 320 | CBS cbs; |
| 322 | 321 | ||
| 323 | memset(&cbb, 0, sizeof(cbb)); | ||
| 324 | |||
| 325 | if (!ssl3_setup_init_buffer(s)) | 322 | if (!ssl3_setup_init_buffer(s)) |
| 326 | goto err; | 323 | return 0; |
| 327 | if (!ssl3_setup_buffers(s)) | 324 | if (!ssl3_setup_buffers(s)) |
| 328 | goto err; | 325 | return 0; |
| 329 | if (!ssl_init_wbio_buffer(s, 1)) | 326 | if (!ssl_init_wbio_buffer(s, 1)) |
| 330 | goto err; | 327 | return 0; |
| 331 | 328 | ||
| 332 | /* Stash any unprocessed data from the last record. */ | 329 | /* Stash any unprocessed data from the last record. */ |
| 333 | tls13_record_layer_rcontent(ctx->rl, &cbs); | 330 | tls13_record_layer_rcontent(ctx->rl, &cbs); |
| 334 | if (CBS_len(&cbs) > 0) { | 331 | if (CBS_len(&cbs) > 0) { |
| 335 | if (!CBB_init_fixed(&cbb, s->s3->rbuf.buf, | 332 | if (s->s3->rcontent != NULL) |
| 336 | s->s3->rbuf.len)) | 333 | return 0; |
| 337 | goto err; | 334 | if ((s->s3->rcontent = tls_content_new()) == NULL) |
| 338 | if (!CBB_add_u8(&cbb, SSL3_RT_HANDSHAKE)) | 335 | return 0; |
| 339 | goto err; | 336 | if (!tls_content_dup_data(s->s3->rcontent, |
| 340 | if (!CBB_add_u16(&cbb, TLS1_2_VERSION)) | 337 | SSL3_RT_HANDSHAKE, CBS_data(&cbs), CBS_len(&cbs))) |
| 341 | goto err; | 338 | return 0; |
| 342 | if (!CBB_add_u16_length_prefixed(&cbb, &fragment)) | ||
| 343 | goto err; | ||
| 344 | if (!CBB_add_bytes(&fragment, CBS_data(&cbs), CBS_len(&cbs))) | ||
| 345 | goto err; | ||
| 346 | if (!CBB_finish(&cbb, NULL, NULL)) | ||
| 347 | goto err; | ||
| 348 | |||
| 349 | s->s3->rbuf.offset = SSL3_RT_HEADER_LENGTH; | ||
| 350 | s->s3->rbuf.left = CBS_len(&cbs); | ||
| 351 | s->s3->rrec.type = SSL3_RT_HANDSHAKE; | ||
| 352 | s->s3->rrec.length = CBS_len(&cbs); | ||
| 353 | s->rstate = SSL_ST_READ_BODY; | ||
| 354 | s->packet = s->s3->rbuf.buf; | ||
| 355 | s->packet_length = SSL3_RT_HEADER_LENGTH; | ||
| 356 | } | 339 | } |
| 357 | 340 | ||
| 358 | /* Stash the current handshake message. */ | 341 | /* Stash the current handshake message. */ |
| 359 | tls13_handshake_msg_data(ctx->hs_msg, &cbs); | 342 | tls13_handshake_msg_data(ctx->hs_msg, &cbs); |
| 360 | if (!BUF_MEM_grow_clean(s->init_buf, CBS_len(&cbs))) | 343 | if (!BUF_MEM_grow_clean(s->init_buf, CBS_len(&cbs))) |
| 361 | goto err; | 344 | return 0; |
| 362 | if (!CBS_write_bytes(&cbs, s->init_buf->data, | 345 | if (!CBS_write_bytes(&cbs, s->init_buf->data, |
| 363 | s->init_buf->length, NULL)) | 346 | s->init_buf->length, NULL)) |
| 364 | goto err; | 347 | return 0; |
| 365 | 348 | ||
| 366 | s->s3->hs.tls12.reuse_message = 1; | 349 | s->s3->hs.tls12.reuse_message = 1; |
| 367 | s->s3->hs.tls12.message_type = tls13_handshake_msg_type(ctx->hs_msg); | 350 | s->s3->hs.tls12.message_type = tls13_handshake_msg_type(ctx->hs_msg); |
| @@ -374,11 +357,6 @@ tls13_use_legacy_stack(struct tls13_ctx *ctx) | |||
| 374 | s->method = tls_legacy_method(); | 357 | s->method = tls_legacy_method(); |
| 375 | 358 | ||
| 376 | return 1; | 359 | return 1; |
| 377 | |||
| 378 | err: | ||
| 379 | CBB_cleanup(&cbb); | ||
| 380 | |||
| 381 | return 0; | ||
| 382 | } | 360 | } |
| 383 | 361 | ||
| 384 | int | 362 | int |
