When somebody use bad --optype with aead alghorithms segmentation fault could happen.
Fixes: f8be1786b1b8 ("app/crypto-perf: introduce performance test application") Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyg...@intel.com> --- Changes for v3: - fix headline of this patch - add ccm alghorithm Changes for v2: - fix checkpatch error related with whitespace - fix spelling error How to reproduce: AESNI_GCM: ./build/app/dpdk-test-crypto-perf -c 0xc0 --vdev crypto_aesni_gcm_pmd -w 0000:5e:00.0 -w 0000:3d:01.0 -- --ptest throughput --devtype crypto_aesni_gcm --optype cipher-then-auth --cipher-algo aes-gcm --cipher-op encrypt --cipher-key-sz 16 --cipher-iv-sz 12 --auth-algo aes-gcm --auth-op generate --auth-key-sz 16 --auth-aad-sz 4 --auth-digest-sz 8 --total-ops 10000000 --burst-sz 32 --buffer-sz 1024 --- app/test-crypto-perf/cperf_options_parsing.c | 11 +++++++++++ app/test-crypto-perf/main.c | 6 ++++-- doc/guides/tools/cryptoperf.rst | 2 ++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/test-crypto-perf/cperf_options_parsing.c b/app/test-crypto-perf/cperf_options_parsing.c index c1d5ffc..c87ba67 100644 --- a/app/test-crypto-perf/cperf_options_parsing.c +++ b/app/test-crypto-perf/cperf_options_parsing.c @@ -829,6 +829,17 @@ cperf_options_check(struct cperf_options *options) } } + if (options->cipher_algo == RTE_CRYPTO_CIPHER_AES_GCM || + options->cipher_algo == RTE_CRYPTO_CIPHER_AES_CCM || + options->auth_algo == RTE_CRYPTO_AUTH_AES_GCM || + options->auth_algo == RTE_CRYPTO_AUTH_AES_CCM || + options->auth_algo == RTE_CRYPTO_AUTH_AES_GMAC) { + if (options->op_type != CPERF_AEAD) { + RTE_LOG(ERR, USER1, "Use --optype aead\n"); + return -EINVAL; + } + } + return 0; } diff --git a/app/test-crypto-perf/main.c b/app/test-crypto-perf/main.c index c1eaaff..fb3f72e 100644 --- a/app/test-crypto-perf/main.c +++ b/app/test-crypto-perf/main.c @@ -118,7 +118,8 @@ cperf_verify_devices_capabilities(struct cperf_options *opts, if (opts->op_type == CPERF_AUTH_ONLY || opts->op_type == CPERF_CIPHER_THEN_AUTH || - opts->op_type == CPERF_AUTH_THEN_CIPHER) { + opts->op_type == CPERF_AUTH_THEN_CIPHER || + opts->op_type == CPERF_AEAD) { cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH; cap_idx.algo.auth = opts->auth_algo; @@ -139,7 +140,8 @@ cperf_verify_devices_capabilities(struct cperf_options *opts, if (opts->op_type == CPERF_CIPHER_ONLY || opts->op_type == CPERF_CIPHER_THEN_AUTH || - opts->op_type == CPERF_AUTH_THEN_CIPHER) { + opts->op_type == CPERF_AUTH_THEN_CIPHER || + opts->op_type == CPERF_AEAD) { cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER; cap_idx.algo.cipher = opts->cipher_algo; diff --git a/doc/guides/tools/cryptoperf.rst b/doc/guides/tools/cryptoperf.rst index 1117ebf..478d256 100644 --- a/doc/guides/tools/cryptoperf.rst +++ b/doc/guides/tools/cryptoperf.rst @@ -181,6 +181,8 @@ The following are the appication command-line options: auth-then-cipher aead + For GCM/CCM algorithms you should use aead flag. + * ``--sessionless`` Enable session-less crypto operations mode. -- 2.7.4