app/crypto-perf: avoid wrong operation type for AEAD algos
authorDaniel Mrzyglod <danielx.t.mrzyglod@intel.com>
Wed, 8 Mar 2017 17:03:25 +0000 (18:03 +0100)
committerPablo de Lara <pablo.de.lara.guarch@intel.com>
Wed, 5 Apr 2017 22:17:44 +0000 (00:17 +0200)
When somebody use bad --optype with aead algorithms
segmentation fault could happen.

Fixes: f8be1786b1b8 ("app/crypto-perf: introduce performance test application")

Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
app/test-crypto-perf/cperf_options_parsing.c
app/test-crypto-perf/main.c
doc/guides/tools/cryptoperf.rst

index da82ce9..d6afc85 100644 (file)
@@ -643,6 +643,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;
 }
 
index c1eaaff..fb3f72e 100644 (file)
@@ -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;
index 1117ebf..478d256 100644 (file)
@@ -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.