On Wed, Feb 25, 2026 at 7:35 AM Alexei Starovoitov
<[email protected]> wrote:
>
> On Wed, Feb 18, 2026 at 1:20 AM Mahdi Faramarzpour <[email protected]>
> wrote:
> >
> > 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)
>
> This is unnecessary. It was required we would have hit segfaults by now.
This patch does not prevent segfaults; it prevents silent misparsing.
On systems where strtol() does not set
errno for non-numeric input, passing -t abc results in opt_run_test
being 0 without triggering usage().
Checking endptr is the documented way to validate full-string conversion.
>
> pw-bot: cr