2022-11-14 03:32:52

by Tiezhu Yang

[permalink] [raw]
Subject: [PATCH bpf-next 0/2] Some small changes about bpftool

Tiezhu Yang (2):
bpftool: Use strcmp() instead of is_prefix() to check parameters
bpftool: Check argc first before "file" in do_batch()

tools/bpf/bpftool/main.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

--
2.1.0



2022-11-14 04:36:21

by Tiezhu Yang

[permalink] [raw]
Subject: [PATCH bpf-next 2/2] bpftool: Check argc first before "file" in do_batch()

If the parameters for batch are more than 2, check argc first can
return immediately, no need to use strcmp() to check "file" with
a little overhead and then check argc, it is better to check "file"
only when the parameters for batch are 2.

Signed-off-by: Tiezhu Yang <[email protected]>
---
tools/bpf/bpftool/main.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/tools/bpf/bpftool/main.c b/tools/bpf/bpftool/main.c
index 4ef87c2..27d6dbf 100644
--- a/tools/bpf/bpftool/main.c
+++ b/tools/bpf/bpftool/main.c
@@ -337,12 +337,12 @@ static int do_batch(int argc, char **argv)
if (argc < 2) {
p_err("too few parameters for batch");
return -1;
- } else if (strcmp(*argv, "file")) {
- p_err("expected 'file', got: %s", *argv);
- return -1;
} else if (argc > 2) {
p_err("too many parameters for batch");
return -1;
+ } else if (strcmp(*argv, "file")) {
+ p_err("expected 'file', got: %s", *argv);
+ return -1;
}
NEXT_ARG();

--
2.1.0


2022-11-14 17:39:22

by Stanislav Fomichev

[permalink] [raw]
Subject: Re: [PATCH bpf-next 2/2] bpftool: Check argc first before "file" in do_batch()

On 11/14, Tiezhu Yang wrote:
> If the parameters for batch are more than 2, check argc first can
> return immediately, no need to use strcmp() to check "file" with
> a little overhead and then check argc, it is better to check "file"
> only when the parameters for batch are 2.

Seems fine if you respin with is_prefix instead of strcmp.
Has the potential of breaking some buggy users which pass
more than one file, but I don't think it's a good justification
no to do the fix? Quentin?


> Signed-off-by: Tiezhu Yang <[email protected]>
> ---
> tools/bpf/bpftool/main.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)

> diff --git a/tools/bpf/bpftool/main.c b/tools/bpf/bpftool/main.c
> index 4ef87c2..27d6dbf 100644
> --- a/tools/bpf/bpftool/main.c
> +++ b/tools/bpf/bpftool/main.c
> @@ -337,12 +337,12 @@ static int do_batch(int argc, char **argv)
> if (argc < 2) {
> p_err("too few parameters for batch");
> return -1;
> - } else if (strcmp(*argv, "file")) {
> - p_err("expected 'file', got: %s", *argv);
> - return -1;
> } else if (argc > 2) {
> p_err("too many parameters for batch");
> return -1;
> + } else if (strcmp(*argv, "file")) {
> + p_err("expected 'file', got: %s", *argv);
> + return -1;
> }
> NEXT_ARG();

> --
> 2.1.0


2022-11-14 21:10:43

by Quentin Monnet

[permalink] [raw]
Subject: Re: [PATCH bpf-next 2/2] bpftool: Check argc first before "file" in do_batch()

On Mon, 14 Nov 2022 at 17:30, <[email protected]> wrote:
>
> On 11/14, Tiezhu Yang wrote:
> > If the parameters for batch are more than 2, check argc first can
> > return immediately, no need to use strcmp() to check "file" with
> > a little overhead and then check argc, it is better to check "file"
> > only when the parameters for batch are 2.

Thanks for the patch

> Seems fine if you respin with is_prefix instead of strcmp.
> Has the potential of breaking some buggy users which pass
> more than one file, but I don't think it's a good justification
> no to do the fix? Quentin?

I don't think it could break, the argc check is already enforced
(currently after the check on "file") and no more than one batch file
can be passed. I'm not sure it's super useful to swap the checks
either, because you can similarly argue that there's no need to check
argc is <= 2 if the first arg for "bpftool batch" is different from
"file" (or a prefix). The argc check is faster than the is_prefix()
comparison, but that's a minor optimization for one specific error
case. I don't really see the point, but I'm not opposed to the patch
either if you repost with is_prefix() as suggested by Stanislav.