Hi, On 09-08-17 09:42, Antonio Quartulli wrote: > From: Antonio Quartulli <anto...@openvpn.net> > > In tls_ctx_load_ecdh_params() the SSL_CTX_get0_privatekey() function > is invoked only when "OPENSSL_VERSION_NUMBER >= 0x10002000L" and > curve_name is NULL. > > However, under the very same conditions the code flow will > lead to an earlier return, thus never reaching the invocation of > SSL_CTX_get0_privatekey(). > > Restructure the surrounding code in order to make the if/else > block a bit easier to read and get rid of the unreachable > invocation. > > Signed-off-by: Antonio Quartulli <anto...@openvpn.net> > --- > > Note: I believe that code sections like this, trying to deal with > different library versions, should be cleaned up by moving the > various #ifs to header files, instead of having them in the code. > However, this should be done in a later (and bigger) cleanup.
I'm not so sure that would improve things, but I'm happy to review a patch to be convinced otherwise ;-) > src/openvpn/ssl_openssl.c | 23 +++++++++-------------- > 1 file changed, 9 insertions(+), 14 deletions(-) > > diff --git a/src/openvpn/ssl_openssl.c b/src/openvpn/ssl_openssl.c > index e18fffc1..7ad6414e 100644 > --- a/src/openvpn/ssl_openssl.c > +++ b/src/openvpn/ssl_openssl.c > @@ -484,15 +484,7 @@ tls_ctx_load_ecdh_params(struct tls_root_ctx *ctx, const > char *curve_name > > /* Generate a new ECDH key for each SSL session (for non-ephemeral ECDH) > */ > SSL_CTX_set_options(ctx->ctx, SSL_OP_SINGLE_ECDH_USE); > -#if OPENSSL_VERSION_NUMBER >= 0x10002000L > - /* OpenSSL 1.0.2 and newer can automatically handle ECDH parameter > loading */ > - if (NULL == curve_name) > - { > - SSL_CTX_set_ecdh_auto(ctx->ctx, 1); > - return; > - } > -#endif > - /* For older OpenSSL, we'll have to do the parameter loading on our own > */ > + > if (curve_name != NULL) > { > /* Use user supplied curve if given */ > @@ -501,14 +493,17 @@ tls_ctx_load_ecdh_params(struct tls_root_ctx *ctx, > const char *curve_name > } > else > { > - /* Extract curve from key */ > +#if OPENSSL_VERSION_NUMBER >= 0x10002000L > + /* OpenSSL 1.0.2 and newer can automatically handle ECDH parameter > + * loading */ > + SSL_CTX_set_ecdh_auto(ctx->ctx, 1); > + return; > +#else > + /* For older OpenSSL we have to extract the curve from key on our > own */ > EC_KEY *eckey = NULL; > const EC_GROUP *ecgrp = NULL; > EVP_PKEY *pkey = NULL; > > -#if OPENSSL_VERSION_NUMBER >= 0x10002000L && > !defined(LIBRESSL_VERSION_NUMBER) > - pkey = SSL_CTX_get0_privatekey(ctx->ctx); > -#else > /* Little hack to get private key ref from SSL_CTX, yay OpenSSL... */ > SSL *ssl = SSL_new(ctx->ctx); > if (!ssl) > @@ -517,7 +512,6 @@ tls_ctx_load_ecdh_params(struct tls_root_ctx *ctx, const > char *curve_name > } > pkey = SSL_get_privatekey(ssl); > SSL_free(ssl); > -#endif > > msg(D_TLS_DEBUG, "Extracting ECDH curve from private key"); > > @@ -526,6 +520,7 @@ tls_ctx_load_ecdh_params(struct tls_root_ctx *ctx, const > char *curve_name > { > nid = EC_GROUP_get_curve_name(ecgrp); > } > +#endif > } > > /* Translate NID back to name , just for kicks */ > ACK. Patch looks good, and this still works as expected with both OpenSSL 1.0.1 and 1.0.2 (both #if branches). -Steffan ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel