From: Mahdi Faramarzpour <[email protected]>

This commit fixes the integer parsing of -t option. The cli parser
only relies on errno to detect parsing errors. The manpage for
strtol (https://man7.org/linux/man-pages/man3/strtol.3.html)
states that the said function "MAY" set errno to EINVAL in case the
conversion fails. Currently on some systems, this leads to a silent
failure with return value not being exactly documented in the
manpages (probably zero). The reliable way to validate the input is
to check whether the endptr has been bumped all the way to the end
of the string or not.

Fixes: 146e30554a53 ("selftests/xsk: add option to run single test")
Signed-off-by: Mahdi Faramarzpour <[email protected]>
---
v2:
  - fix style issues
v1: https://lore.kernel.org/all/[email protected]/
---
 tools/testing/selftests/bpf/xskxceiver.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/bpf/xskxceiver.c 
b/tools/testing/selftests/bpf/xskxceiver.c
index 05b3cebc5..5e4095fd1 100644
--- a/tools/testing/selftests/bpf/xskxceiver.c
+++ b/tools/testing/selftests/bpf/xskxceiver.c
@@ -200,6 +200,7 @@ static void parse_command_line(struct ifobject *ifobj_tx, 
struct ifobject *ifobj
        struct ifobject *ifobj;
        u32 interface_nb = 0;
        int option_index, c;
+       char *eptr;
 
        opterr = 0;
 
@@ -248,8 +249,8 @@ static void parse_command_line(struct ifobject *ifobj_tx, 
struct ifobject *ifobj
                        break;
                case 't':
                        errno = 0;
-                       opt_run_test = strtol(optarg, NULL, 0);
-                       if (errno)
+                       opt_run_test = strtol(optarg, &eptr, 0);
+                       if (errno || *eptr)
                                print_usage(argv);
                        break;
                case 'h':
-- 
2.34.1


Reply via email to