diff options
Diffstat (limited to 'src/lib/libssl/tls13_client.c')
| -rw-r--r-- | src/lib/libssl/tls13_client.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/src/lib/libssl/tls13_client.c b/src/lib/libssl/tls13_client.c index 3e168a0b54..4b52f6cf62 100644 --- a/src/lib/libssl/tls13_client.c +++ b/src/lib/libssl/tls13_client.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tls13_client.c,v 1.92 2022/01/11 18:39:28 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_client.c,v 1.93 2022/01/11 19:03:15 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 | * |
| @@ -561,7 +561,7 @@ tls13_server_certificate_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
| 561 | X509 *cert = NULL; | 561 | X509 *cert = NULL; |
| 562 | EVP_PKEY *pkey; | 562 | EVP_PKEY *pkey; |
| 563 | const uint8_t *p; | 563 | const uint8_t *p; |
| 564 | int cert_idx, alert_desc; | 564 | int alert_desc, cert_type; |
| 565 | int ret = 0; | 565 | int ret = 0; |
| 566 | 566 | ||
| 567 | if ((certs = sk_X509_new_null()) == NULL) | 567 | if ((certs = sk_X509_new_null()) == NULL) |
| @@ -625,24 +625,20 @@ tls13_server_certificate_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
| 625 | goto err; | 625 | goto err; |
| 626 | if (EVP_PKEY_missing_parameters(pkey)) | 626 | if (EVP_PKEY_missing_parameters(pkey)) |
| 627 | goto err; | 627 | goto err; |
| 628 | if ((cert_idx = ssl_cert_type(cert, pkey)) < 0) | 628 | if ((cert_type = ssl_cert_type(cert, pkey)) < 0) |
| 629 | goto err; | 629 | goto err; |
| 630 | 630 | ||
| 631 | sk_X509_pop_free(s->session->cert_chain, X509_free); | ||
| 632 | s->session->cert_chain = certs; | ||
| 633 | certs = NULL; | ||
| 634 | |||
| 635 | X509_up_ref(cert); | ||
| 636 | X509_free(s->session->peer_pkeys[cert_idx].x509); | ||
| 637 | s->session->peer_pkeys[cert_idx].x509 = cert; | ||
| 638 | s->session->peer_key = &s->session->peer_pkeys[cert_idx]; | ||
| 639 | |||
| 640 | X509_up_ref(cert); | 631 | X509_up_ref(cert); |
| 641 | X509_free(s->session->peer_cert); | 632 | X509_free(s->session->peer_cert); |
| 642 | s->session->peer_cert = cert; | 633 | s->session->peer_cert = cert; |
| 634 | s->session->peer_cert_type = cert_type; | ||
| 643 | 635 | ||
| 644 | s->session->verify_result = s->verify_result; | 636 | s->session->verify_result = s->verify_result; |
| 645 | 637 | ||
| 638 | sk_X509_pop_free(s->session->cert_chain, X509_free); | ||
| 639 | s->session->cert_chain = certs; | ||
| 640 | certs = NULL; | ||
| 641 | |||
| 646 | if (ctx->ocsp_status_recv_cb != NULL && | 642 | if (ctx->ocsp_status_recv_cb != NULL && |
| 647 | !ctx->ocsp_status_recv_cb(ctx)) | 643 | !ctx->ocsp_status_recv_cb(ctx)) |
| 648 | goto err; | 644 | goto err; |
