[PATCH bpf] bpf: fix selftest/xsk single test selection

Mahdi Faramarzpour posted 1 patch 1 month, 2 weeks ago
There is a newer version of this series
tools/testing/selftests/bpf/xskxceiver.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
[PATCH bpf] bpf: fix selftest/xsk single test selection
Posted by Mahdi Faramarzpour 1 month, 2 weeks ago
From: Mahdi Faramarzpour <mahdifrmx@gmail.com>

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.

Signd-off-by: Mahdi Faramarzpour <mahdifrmx@gmail.com>
Fixes: 146e30554a53 ("selftests/xsk: add option to run single test")
---
 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..f2d5c4dd2 100644
--- a/tools/testing/selftests/bpf/xskxceiver.c
+++ b/tools/testing/selftests/bpf/xskxceiver.c
@@ -247,9 +247,10 @@ static void parse_command_line(struct ifobject *ifobj_tx, struct ifobject *ifobj
 			opt_print_tests = true;
 			break;
 		case 't':
+			char *eptr;
 			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
Re: [PATCH bpf] bpf: fix selftest/xsk single test selection
Posted by bot+bpf-ci@kernel.org 1 month, 2 weeks ago
> Signd-off-by: Mahdi Faramarzpour <mahdifrmx@gmail.com>

Should this be "Signed-off-by"?


---
AI reviewed your patch. Please fix the bug or email reply why it's not a bug.
See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md

CI run summary: https://github.com/kernel-patches/bpf/actions/runs/22090844124

AI-authorship-score: low
AI-authorship-explanation: Natural writing style with human uncertainty markers and specific manpage citation suggest human authorship; the Signed-off-by typo is consistent with human error.
issues-found: 1
issue-severity-score: low
issue-severity-explanation: Misspelled Signed-off-by tag (Signd-off-by) breaks the Developer Certificate of Origin chain and automated tooling recognition.
Re: [PATCH bpf] bpf: fix selftest/xsk single test selection
Posted by Mahdi Faramarzpour 1 month, 2 weeks ago
On Tue, Feb 17, 2026 at 11:34 AM Mahdi Faramarzpour <mahdifrmx@gmail.com> wrote:
>
> From: Mahdi Faramarzpour <mahdifrmx@gmail.com>
>
> 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.
>
> Signd-off-by: Mahdi Faramarzpour <mahdifrmx@gmail.com>
> Fixes: 146e30554a53 ("selftests/xsk: add option to run single test")
> ---
>  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..f2d5c4dd2 100644
> --- a/tools/testing/selftests/bpf/xskxceiver.c
> +++ b/tools/testing/selftests/bpf/xskxceiver.c
> @@ -247,9 +247,10 @@ static void parse_command_line(struct ifobject *ifobj_tx, struct ifobject *ifobj
>                         opt_print_tests = true;
>                         break;
>                 case 't':
> +                       char *eptr;
>                         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
>
Some style issues and typos, will send the follow up tomorrow.
Re: [PATCH bpf] bpf: fix selftest/xsk single test selection
Posted by Maciej Fijalkowski 1 month, 2 weeks ago
On Tue, Feb 17, 2026 at 11:33:26AM +0330, Mahdi Faramarzpour wrote:
> From: Mahdi Faramarzpour <mahdifrmx@gmail.com>
> 
> 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.
> 
> Signd-off-by: Mahdi Faramarzpour <mahdifrmx@gmail.com>
> Fixes: 146e30554a53 ("selftests/xsk: add option to run single test")

Hi Mahdi, selftests related patches are supposed to be routed via
bpf-next tree. Also your SoB line should be last in the set of tags.

> ---
>  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..f2d5c4dd2 100644
> --- a/tools/testing/selftests/bpf/xskxceiver.c
> +++ b/tools/testing/selftests/bpf/xskxceiver.c
> @@ -247,9 +247,10 @@ static void parse_command_line(struct ifobject *ifobj_tx, struct ifobject *ifobj
>  			opt_print_tests = true;
>  			break;
>  		case 't':
> +			char *eptr;
>  			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
>