Skip to contentSkip to conversation

remove unnecessary null checks in OpenSSL usage

PATCH In review Stephen Hemminger 3 participants 5 messages Nov 2, 2023 – Nov 9, 2023 Crypto API

lore
Share & tools
lore
#0 lore raw

cover remove unnecessary null checks in OpenSSL usage

OpenSSL follows null free conventions

Stephen Hemminger (2):
nullfree: add matches for null free cases from OpenSSL crypto/openssl: remove unnecessary NULL checks before free

 devtools/cocci/nullfree.cocci                |  9 +++++
 drivers/crypto/openssl/rte_openssl_pmd.c     | 36 +++++++-------------
 drivers/crypto/openssl/rte_openssl_pmd_ops.c |  3 +-
 3 files changed, 22 insertions(+), 26 deletions(-)
Signature · 1 line
2.41.0
#1 lore raw

PATCH 1/2 nullfree: add matches for null free cases from OpenSSL

OpenSSL functions follow the design parameter that free of NULL is ok.

---
 devtools/cocci/nullfree.cocci | 9 +++++++++
 1 file changed, 9 insertions(+)
devtools/cocci/nullfree.cocci +9 -0
index 9ca3fc2864..c58aad4fb7 100644
@@ -126,4 +126,13 @@ expression E;
 |
 - if (E != NULL) trie_free(E);
 + trie_free(E);
+|
+- if (E != NULL) EVP_PKEY_CTX_free(E);
++ EVP_PKEY_CTX_free(E);
+|
+- if (E != NULL) EVP_PKEY_free(E);
++ EVP_PKEY_free(E);
+|
+- if (E != NULL) BN_free(E);
++ BN_free(E);
 )
Signature · 1 line
2.41.0
#2 lore raw

PATCH 2/2 crypto/openssl: remove unnecessary NULL checks before free

In reply to Stephen Hemminger

Found with nullfree.cocci

---
 drivers/crypto/openssl/rte_openssl_pmd.c     | 36 +++++++-------------
 drivers/crypto/openssl/rte_openssl_pmd_ops.c |  3 +-
 2 files changed, 13 insertions(+), 26 deletions(-)
drivers/crypto/openssl/rte_openssl_pmd.c +12 -24
index c234882417..090320602d 100644
@@ -1957,10 +1957,8 @@ process_openssl_dsa_sign_op_evp(struct rte_crypto_op *cop,
 err_dsa_sign:
 	if (params)
 		OSSL_PARAM_free(params);
-	if (key_ctx)
-		EVP_PKEY_CTX_free(key_ctx);
-	if (dsa_ctx)
-		EVP_PKEY_CTX_free(dsa_ctx);
+	EVP_PKEY_CTX_free(key_ctx);
+	EVP_PKEY_CTX_free(dsa_ctx);
 	return -1;
 }
 
@@ -2039,10 +2037,8 @@ process_openssl_dsa_verify_op_evp(struct rte_crypto_op *cop,
 		DSA_SIG_free(sign);
 	if (params)
 		OSSL_PARAM_free(params);
-	if (key_ctx)
-		EVP_PKEY_CTX_free(key_ctx);
-	if (dsa_ctx)
-		EVP_PKEY_CTX_free(dsa_ctx);
+	EVP_PKEY_CTX_free(key_ctx);
+	EVP_PKEY_CTX_free(dsa_ctx);
 
 	return ret;
 }
@@ -2294,16 +2290,12 @@ process_openssl_dh_op_evp(struct rte_crypto_op *cop,
 	ret = 0;
 
  err_dh:
-	if (pub_key)
-		BN_free(pub_key);
-	if (priv_key)
-		BN_free(priv_key);
+	BN_free(pub_key);
+	BN_free(priv_key);
 	if (params)
 		OSSL_PARAM_free(params);
-	if (dhpkey)
-		EVP_PKEY_free(dhpkey);
-	if (peerkey)
-		EVP_PKEY_free(peerkey);
+	EVP_PKEY_free(dhpkey);
+	EVP_PKEY_free(peerkey);
 
 	EVP_PKEY_CTX_free(dh_ctx);
 
@@ -2880,17 +2872,13 @@ process_openssl_sm2_op_evp(struct rte_crypto_op *cop,
 	ret = 0;
 	cop->status = RTE_CRYPTO_OP_STATUS_SUCCESS;
 err_sm2:
-	if (kctx)
-		EVP_PKEY_CTX_free(kctx);
+	EVP_PKEY_CTX_free(kctx);
 
-	if (sctx)
-		EVP_PKEY_CTX_free(sctx);
+	EVP_PKEY_CTX_free(sctx);
 
-	if (cctx)
-		EVP_PKEY_CTX_free(cctx);
+	EVP_PKEY_CTX_free(cctx);
 
-	if (pkey)
-		EVP_PKEY_free(pkey);
+	EVP_PKEY_free(pkey);
 
 	return ret;
 }
drivers/crypto/openssl/rte_openssl_pmd_ops.c +1 -2
index 2862c294a9..419a767817 100644
@@ -1431,8 +1431,7 @@ static void openssl_reset_asym_session(struct openssl_asym_session *sess)
 	switch (sess->xfrm_type) {
 	case RTE_CRYPTO_ASYM_XFORM_RSA:
 #if (OPENSSL_VERSION_NUMBER >= 0x30000000L)
-		if (sess->u.r.ctx)
-			EVP_PKEY_CTX_free(sess->u.r.ctx);
+		EVP_PKEY_CTX_free(sess->u.r.ctx);
 #else
 		if (sess->u.r.rsa)
 			RSA_free(sess->u.r.rsa);
Signature · 1 line
2.41.0
Acked-by on v1 2/2
#3 lore raw

Re: [PATCH 2/2] crypto/openssl: remove unnecessary NULL checks before free

________________________________
From: Stephen Hemminger <[email protected]>
Sent: 02 November 2023 23:02
To: [email protected] <[email protected]>
Cc: Stephen Hemminger <[email protected]>; Ji, Kai <[email protected]>
Subject: [PATCH 2/2] crypto/openssl: remove unnecessary NULL checks before free

Found with nullfree.cocci

---
 drivers/crypto/openssl/rte_openssl_pmd.c     | 36 +++++++-------------
 drivers/crypto/openssl/rte_openssl_pmd_ops.c |  3 +-
 2 files changed, 13 insertions(+), 26 deletions(-)
drivers/crypto/openssl/rte_openssl_pmd.c +12 -24
index c234882417..090320602d 100644
@@ -1957,10 +1957,8 @@ process_openssl_dsa_sign_op_evp(struct rte_crypto_op *cop,
 err_dsa_sign:
         if (params)
                 OSSL_PARAM_free(params);
-       if (key_ctx)
-               EVP_PKEY_CTX_free(key_ctx);
-       if (dsa_ctx)
-               EVP_PKEY_CTX_free(dsa_ctx);
+       EVP_PKEY_CTX_free(key_ctx);
+       EVP_PKEY_CTX_free(dsa_ctx);
         return -1;
 }
 
@@ -2039,10 +2037,8 @@ process_openssl_dsa_verify_op_evp(struct rte_crypto_op *cop,
                 DSA_SIG_free(sign);
         if (params)
                 OSSL_PARAM_free(params);
-       if (key_ctx)
-               EVP_PKEY_CTX_free(key_ctx);
-       if (dsa_ctx)
-               EVP_PKEY_CTX_free(dsa_ctx);
+       EVP_PKEY_CTX_free(key_ctx);
+       EVP_PKEY_CTX_free(dsa_ctx);
 
         return ret;
 }
@@ -2294,16 +2290,12 @@ process_openssl_dh_op_evp(struct rte_crypto_op *cop,
         ret = 0;
 
  err_dh:
-       if (pub_key)
-               BN_free(pub_key);
-       if (priv_key)
-               BN_free(priv_key);
+       BN_free(pub_key);
+       BN_free(priv_key);
         if (params)
                 OSSL_PARAM_free(params);
-       if (dhpkey)
-               EVP_PKEY_free(dhpkey);
-       if (peerkey)
-               EVP_PKEY_free(peerkey);
+       EVP_PKEY_free(dhpkey);
+       EVP_PKEY_free(peerkey);
 
         EVP_PKEY_CTX_free(dh_ctx);
 
@@ -2880,17 +2872,13 @@ process_openssl_sm2_op_evp(struct rte_crypto_op *cop,
         ret = 0;
         cop->status = RTE_CRYPTO_OP_STATUS_SUCCESS;
 err_sm2:
-       if (kctx)
-               EVP_PKEY_CTX_free(kctx);
+       EVP_PKEY_CTX_free(kctx);
 
-       if (sctx)
-               EVP_PKEY_CTX_free(sctx);
+       EVP_PKEY_CTX_free(sctx);
 
-       if (cctx)
-               EVP_PKEY_CTX_free(cctx);
+       EVP_PKEY_CTX_free(cctx);
 
-       if (pkey)
-               EVP_PKEY_free(pkey);
+       EVP_PKEY_free(pkey);
 
         return ret;
 }
drivers/crypto/openssl/rte_openssl_pmd_ops.c +1 -2
index 2862c294a9..419a767817 100644
@@ -1431,8 +1431,7 @@ static void openssl_reset_asym_session(struct openssl_asym_session *sess)
         switch (sess->xfrm_type) {
         case RTE_CRYPTO_ASYM_XFORM_RSA:
 #if (OPENSSL_VERSION_NUMBER >= 0x30000000L)
-               if (sess->u.r.ctx)
-                       EVP_PKEY_CTX_free(sess->u.r.ctx);
+               EVP_PKEY_CTX_free(sess->u.r.ctx);
 #else
                 if (sess->u.r.rsa)
                         RSA_free(sess->u.r.rsa);

--
2.41.0

#4 lore raw
In reply to Stephen Hemminger
Quoted 10 lines

OpenSSL follows null free conventions

Stephen Hemminger (2):
nullfree: add matches for null free cases from OpenSSL crypto/openssl: remove unnecessary NULL checks before free

 devtools/cocci/nullfree.cocci                |  9 +++++
 drivers/crypto/openssl/rte_openssl_pmd.c     | 36 +++++++-------------
 drivers/crypto/openssl/rte_openssl_pmd_ops.c |  3 +-
 3 files changed, 22 insertions(+), 26 deletions(-)

Series Applied to dpdk-next-crypto
Thanks.