Replace memcmp() with rte_memeq_timingsafe() when verifying
RSA signatures to prevent timing-based side-channel attacks.

The comparison at drivers/crypto/octeontx/otx_cryptodev_ops.c:742
is used to verify RSA signed data against expected message content.
Using regular memcmp() for cryptographic verification can leak
information about the compared data through timing differences.

Signed-off-by: Stephen Hemminger <[email protected]>
---
 drivers/crypto/octeontx/otx_cryptodev_ops.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/crypto/octeontx/otx_cryptodev_ops.c 
b/drivers/crypto/octeontx/otx_cryptodev_ops.c
index d6d1b2cea9..40f565cd78 100644
--- a/drivers/crypto/octeontx/otx_cryptodev_ops.c
+++ b/drivers/crypto/octeontx/otx_cryptodev_ops.c
@@ -12,6 +12,7 @@
 #include <rte_errno.h>
 #include <rte_malloc.h>
 #include <rte_mempool.h>
+#include <rte_memory.h>
 
 #include "otx_cryptodev.h"
 #include "otx_cryptodev_capabilities.h"
@@ -739,7 +740,7 @@ otx_cpt_asym_rsa_op(struct rte_crypto_op *cop, struct 
cpt_request_info *req,
                }
                memcpy(rsa->sign.data, req->rptr, rsa->sign.length);
 
-               if (memcmp(rsa->sign.data, rsa->message.data,
+               if (!rte_memeq_timingsafe(rsa->sign.data, rsa->message.data,
                           rsa->message.length)) {
                        CPT_LOG_DP_ERR("RSA verification failed");
                        cop->status = RTE_CRYPTO_OP_STATUS_ERROR;
-- 
2.53.0

Reply via email to