hns3_parse_mbx_time_limit() checks neither errno nor the end pointer, so a malformed value such as "abc" is taken as zero and then silently ignored by the range test that follows.
The range test is now part of the conversion, which keeps the existing behaviour of leaving the default in place when the value is out of range. The device capability mask parser is converted separately, later in this series, since it needs the hexadecimal handler rather than a decimal one. Signed-off-by: Stephen Hemminger <[email protected]> --- drivers/net/hns3/hns3_common.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/net/hns3/hns3_common.c b/drivers/net/hns3/hns3_common.c index 29b51856d9..c21740ba5e 100644 --- a/drivers/net/hns3/hns3_common.c +++ b/drivers/net/hns3/hns3_common.c @@ -231,14 +231,13 @@ hns3_parse_mbx_time_limit(const char *key, const char *value, void *extra_args) if (value == NULL || extra_args == NULL) return 0; - val = strtoul(value, NULL, HNS3_CONVERT_TO_DECIMAL); - /* * 500ms is empirical value in process of mailbox communication. If * the delay value is set to one lower than the empirical value, mailbox * communication may fail. */ - if (val > HNS3_MBX_DEF_TIME_LIMIT_MS && val <= UINT16_MAX) + if (rte_kvargs_to_uint(value, HNS3_MBX_DEF_TIME_LIMIT_MS + 1, + UINT16_MAX, &val) == 0) *(uint16_t *)extra_args = val; return 0; -- 2.53.0

