On Tue, Feb 24, 2026 at 9:59 PM Mahdi Faramarzpour <[email protected]> wrote:
>
> 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.

Prove me wrong with a selftest.

Reply via email to