sfc_kvarg_long_handler() only checked that strtol() consumed at least one character, so trailing garbage such as "5abc" was accepted, and errno was never checked, so an out of range value was silently taken as LONG_MAX or LONG_MIN.
It did nothing beyond that conversion, so drop it and use the new rte_kvargs_handle_long(). The callers keep their long variables and their own range checks. Signed-off-by: Stephen Hemminger <[email protected]> --- drivers/net/sfc/sfc.c | 2 +- drivers/net/sfc/sfc_kvargs.c | 19 ------------------- drivers/net/sfc/sfc_kvargs.h | 2 -- drivers/net/sfc/sfc_port.c | 2 +- 4 files changed, 2 insertions(+), 23 deletions(-) diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c index 39cd8d519a..3d460cc222 100644 --- a/drivers/net/sfc/sfc.c +++ b/drivers/net/sfc/sfc.c @@ -1213,7 +1213,7 @@ sfc_kvarg_rxd_wait_timeout_ns(struct sfc_adapter *sa) value = SFC_RXD_WAIT_TIMEOUT_NS_DEF; rc = sfc_kvargs_process(sa, SFC_KVARG_RXD_WAIT_TIMEOUT_NS, - sfc_kvarg_long_handler, &value); + rte_kvargs_handle_long, &value); if (rc != 0) return rc; diff --git a/drivers/net/sfc/sfc_kvargs.c b/drivers/net/sfc/sfc_kvargs.c index eb36fa98ca..d67f822dd2 100644 --- a/drivers/net/sfc/sfc_kvargs.c +++ b/drivers/net/sfc/sfc_kvargs.c @@ -107,25 +107,6 @@ sfc_kvarg_bool_handler(__rte_unused const char *key, return 0; } -int -sfc_kvarg_long_handler(__rte_unused const char *key, - const char *value_str, void *opaque) -{ - long value; - char *endptr; - - if (!opaque) - return -EINVAL; - - value = strtol(value_str, &endptr, 0); - if (endptr == value_str) - return -EINVAL; - - *(long *)opaque = value; - - return 0; -} - int sfc_kvarg_string_handler(__rte_unused const char *key, const char *value_str, void *opaque) diff --git a/drivers/net/sfc/sfc_kvargs.h b/drivers/net/sfc/sfc_kvargs.h index 4dcc61e973..99de772d2d 100644 --- a/drivers/net/sfc/sfc_kvargs.h +++ b/drivers/net/sfc/sfc_kvargs.h @@ -88,8 +88,6 @@ int sfc_kvargs_process_opt(struct sfc_adapter *sa, const char *key_match, int sfc_kvarg_bool_handler(const char *key, const char *value_str, void *opaque); -int sfc_kvarg_long_handler(const char *key, const char *value_str, - void *opaque); int sfc_kvarg_string_handler(const char *key, const char *value_str, void *opaque); diff --git a/drivers/net/sfc/sfc_port.c b/drivers/net/sfc/sfc_port.c index 33b53f7ac8..d0652b612b 100644 --- a/drivers/net/sfc/sfc_port.c +++ b/drivers/net/sfc/sfc_port.c @@ -488,7 +488,7 @@ sfc_port_attach(struct sfc_adapter *sa) kvarg_stats_update_period_ms = SFC_MAC_STATS_UPDATE_PERIOD_MS_DEF; rc = sfc_kvargs_process(sa, SFC_KVARG_STATS_UPDATE_PERIOD_MS, - sfc_kvarg_long_handler, + rte_kvargs_handle_long, &kvarg_stats_update_period_ms); if ((rc == 0) && ((kvarg_stats_update_period_ms < 0) || -- 2.53.0

