The dump mode handlers use atoi(), which cannot report an error, so a
malformed value is silently taken as zero, which disables dumping
entirely rather than being rejected.

Out of range values keep being clamped to the full dump level, as
before.

Signed-off-by: Stephen Hemminger <[email protected]>
---
 drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c | 15 ++++++++++++---
 drivers/crypto/dpaa_sec/dpaa_sec.c          | 17 +++++++++++++----
 2 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c 
b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
index 3d980d096f..93e92af6a7 100644
--- a/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
+++ b/drivers/crypto/dpaa2_sec/dpaa2_sec_dpseci.c
@@ -4342,13 +4342,22 @@ check_devargs_handler(const char *key, const char 
*value,
        if (!strcmp(key, "drv_strict_order")) {
                priv->en_loose_ordered = false;
        } else if (!strcmp(key, "drv_dump_mode")) {
-               dpaa2_sec_dp_dump = atoi(value);
-               if (dpaa2_sec_dp_dump > DPAA2_SEC_DP_FULL_DUMP) {
+               uint64_t val;
+
+               if (rte_kvargs_to_uint(value, 0, UINT8_MAX, &val) < 0) {
+                       DPAA2_SEC_WARN("WARN: invalid value \"%s\" for \"%s\"",
+                                      value, key);
+                       return -EINVAL;
+               }
+
+               if (val > DPAA2_SEC_DP_FULL_DUMP) {
                        DPAA2_SEC_WARN("WARN: DPAA2_SEC_DP_DUMP_LEVEL is not "
                                      "supported, changing to FULL error"
                                      " prints");
-                       dpaa2_sec_dp_dump = DPAA2_SEC_DP_FULL_DUMP;
+                       val = DPAA2_SEC_DP_FULL_DUMP;
                }
+
+               dpaa2_sec_dp_dump = val;
        } else
                return -1;
 
diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c 
b/drivers/crypto/dpaa_sec/dpaa_sec.c
index c53ee70853..3feb752bcd 100644
--- a/drivers/crypto/dpaa_sec/dpaa_sec.c
+++ b/drivers/crypto/dpaa_sec/dpaa_sec.c
@@ -3625,16 +3625,25 @@ dpaa_sec_uninit(struct rte_cryptodev *dev)
 }
 
 static int
-check_devargs_handler(__rte_unused const char *key, const char *value,
+check_devargs_handler(const char *key, const char *value,
                      __rte_unused void *opaque)
 {
-       dpaa_sec_dp_dump = atoi(value);
-       if (dpaa_sec_dp_dump > DPAA_SEC_DP_FULL_DUMP) {
+       uint64_t val;
+
+       if (rte_kvargs_to_uint(value, 0, UINT8_MAX, &val) < 0) {
+               DPAA_SEC_WARN("WARN: invalid value \"%s\" for \"%s\"",
+                             value, key);
+               return -EINVAL;
+       }
+
+       if (val > DPAA_SEC_DP_FULL_DUMP) {
                DPAA_SEC_WARN("WARN: DPAA_SEC_DP_DUMP_LEVEL is not "
                              "supported, changing to FULL error prints");
-               dpaa_sec_dp_dump = DPAA_SEC_DP_FULL_DUMP;
+               val = DPAA_SEC_DP_FULL_DUMP;
        }
 
+       dpaa_sec_dp_dump = val;
+
        return 0;
 }
 
-- 
2.53.0

Reply via email to