aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-dpdk
diff options
context:
space:
mode:
authorJanne Peltonen <janne.peltonen@nokia.com>2023-04-20 09:44:02 +0300
committerMatias Elo <matias.elo@nokia.com>2023-04-24 12:01:50 +0300
commit913779acecbd1fb855781d45f52137a842419903 (patch)
tree1cea9e3ec1fa96159a36caa064052422ef582ccd /platform/linux-dpdk
parent3abb8c6e4381f9bd6fd2a76edb24a8576453bbd2 (diff)
linux-dpdk: crypto: fix capability query to ignore asymmetric algs
Check that crypto op type is symmetric before looking at the sym part of rte_cryptodev_capabilities. Currently capabilities for asymmetric algorithms are processed as if they were for symmetric algorithms, potentially resulting in incorrect ODP crypto capabilities and incorrect crypto device selection. Signed-off-by: Janne Peltonen <janne.peltonen@nokia.com> Reviewed-by: Matias Elo <matias.elo@nokia.com>
Diffstat (limited to 'platform/linux-dpdk')
-rw-r--r--platform/linux-dpdk/odp_crypto.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/platform/linux-dpdk/odp_crypto.c b/platform/linux-dpdk/odp_crypto.c
index 84a761d2f..0692c0b8f 100644
--- a/platform/linux-dpdk/odp_crypto.c
+++ b/platform/linux-dpdk/odp_crypto.c
@@ -531,6 +531,9 @@ static void capability_process(struct rte_cryptodev_info *dev_info,
for (cap = &dev_info->capabilities[0];
cap->op != RTE_CRYPTO_OP_TYPE_UNDEFINED;
cap++) {
+ if (cap->op != RTE_CRYPTO_OP_TYPE_SYMMETRIC)
+ continue;
+
if (cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_CIPHER) {
enum rte_crypto_cipher_algorithm cap_cipher_algo;
@@ -755,7 +758,8 @@ static int cipher_aead_capability(odp_cipher_alg_t cipher,
for (cap = &dev_info.capabilities[0];
cap->op != RTE_CRYPTO_OP_TYPE_UNDEFINED &&
- !(cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AEAD &&
+ !(cap->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC &&
+ cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AEAD &&
cap->sym.aead.algo == aead_xform.aead.algo);
cap++)
;
@@ -807,7 +811,8 @@ static int cipher_capability(odp_cipher_alg_t cipher,
for (cap = &dev_info.capabilities[0];
cap->op != RTE_CRYPTO_OP_TYPE_UNDEFINED &&
- !(cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_CIPHER &&
+ !(cap->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC &&
+ cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_CIPHER &&
cap->sym.cipher.algo == cipher_xform.cipher.algo);
cap++)
;
@@ -967,7 +972,8 @@ static int auth_aead_capability(odp_auth_alg_t auth,
for (cap = &dev_info.capabilities[0];
cap->op != RTE_CRYPTO_OP_TYPE_UNDEFINED &&
- !(cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AEAD &&
+ !(cap->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC &&
+ cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AEAD &&
cap->sym.auth.algo == aead_xform.auth.algo);
cap++)
;
@@ -1054,7 +1060,8 @@ static int auth_capability(odp_auth_alg_t auth,
for (cap = &dev_info.capabilities[0];
cap->op != RTE_CRYPTO_OP_TYPE_UNDEFINED &&
- !(cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH &&
+ !(cap->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC &&
+ cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH &&
cap->sym.auth.algo == auth_xform.auth.algo);
cap++)
;
@@ -1116,7 +1123,8 @@ static int get_crypto_aead_dev(struct rte_crypto_sym_xform *aead_xform,
for (cap = &dev_info.capabilities[0];
cap->op != RTE_CRYPTO_OP_TYPE_UNDEFINED &&
- !(cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AEAD &&
+ !(cap->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC &&
+ cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AEAD &&
cap->sym.aead.algo == aead_xform->aead.algo);
cap++)
;
@@ -1170,7 +1178,8 @@ static int get_crypto_dev(struct rte_crypto_sym_xform *cipher_xform,
for (cap = &dev_info.capabilities[0];
cap->op != RTE_CRYPTO_OP_TYPE_UNDEFINED &&
- !(cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_CIPHER &&
+ !(cap->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC &&
+ cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_CIPHER &&
cap->sym.cipher.algo == cipher_xform->cipher.algo);
cap++)
;
@@ -1200,7 +1209,8 @@ check_auth:
for (cap = &dev_info.capabilities[0];
cap->op != RTE_CRYPTO_OP_TYPE_UNDEFINED &&
- !(cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH &&
+ !(cap->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC &&
+ cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH &&
cap->sym.auth.algo == auth_xform->auth.algo);
cap++)
;