diff --git a/crypto/evp/exchange.c b/crypto/evp/exchange.c index 0c27d34ba4..a24b54dd71 100644 --- a/crypto/evp/exchange.c +++ b/crypto/evp/exchange.c @@ -494,20 +494,15 @@ int EVP_PKEY_derive_set_peer_ex(EVP_PKEY_CTX *ctx, EVP_PKEY *peer, return -1; } + ret = ctx->pmeth->ctrl(ctx, EVP_PKEY_CTRL_PEER_KEY, 1, peer); + if (ret <= 0) + return ret; if (!EVP_PKEY_up_ref(peer)) return -1; EVP_PKEY_free(ctx->peerkey); ctx->peerkey = peer; - ret = ctx->pmeth->ctrl(ctx, EVP_PKEY_CTRL_PEER_KEY, 1, peer); - - if (ret <= 0) { - EVP_PKEY_free(ctx->peerkey); - ctx->peerkey = NULL; - return ret; - } - return 1; #endif }