[PATCH] selftests/bpf: Fix return value check in attach_bpf()

Subsystems: bpf [general] (safe dynamic programs and tools), bpf [selftests] (test runners & infrastructure), kernel selftest framework, the rest

STALE1904d

6 messages, 4 authors, 2021-05-30 · open the first message on its own page

[PATCH] selftests/bpf: Fix return value check in attach_bpf()

From: Yu Kuai <hidden>
Date: 2021-05-28 08:58:46

use libbpf_get_error() to check the return value of
bpf_program__attach().

Reported-by: Hulk Robot <redacted>
Signed-off-by: Yu Kuai <redacted>
---
 tools/testing/selftests/bpf/benchs/bench_rename.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/testing/selftests/bpf/benchs/bench_rename.c b/tools/testing/selftests/bpf/benchs/bench_rename.c
index c7ec114eca56..b7d4a1d74fca 100644
--- a/tools/testing/selftests/bpf/benchs/bench_rename.c
+++ b/tools/testing/selftests/bpf/benchs/bench_rename.c
@@ -65,7 +65,7 @@ static void attach_bpf(struct bpf_program *prog)
 	struct bpf_link *link;
 
 	link = bpf_program__attach(prog);
-	if (!link) {
+	if (libbpf_get_error(link)) {
 		fprintf(stderr, "failed to attach program!\n");
 		exit(1);
 	}
-- 
2.25.4

Re: [PATCH] selftests/bpf: Fix return value check in attach_bpf()

From: Daniel Borkmann <daniel@iogearbox.net>
Date: 2021-05-28 21:13:47

On 5/28/21 11:07 AM, Yu Kuai wrote:
quoted hunk
use libbpf_get_error() to check the return value of
bpf_program__attach().

Reported-by: Hulk Robot <redacted>
Signed-off-by: Yu Kuai <redacted>
---
  tools/testing/selftests/bpf/benchs/bench_rename.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/testing/selftests/bpf/benchs/bench_rename.c b/tools/testing/selftests/bpf/benchs/bench_rename.c
index c7ec114eca56..b7d4a1d74fca 100644
--- a/tools/testing/selftests/bpf/benchs/bench_rename.c
+++ b/tools/testing/selftests/bpf/benchs/bench_rename.c
@@ -65,7 +65,7 @@ static void attach_bpf(struct bpf_program *prog)
  	struct bpf_link *link;
  
  	link = bpf_program__attach(prog);
-	if (!link) {
+	if (libbpf_get_error(link)) {
  		fprintf(stderr, "failed to attach program!\n");
  		exit(1);
  	}
Could you explain the rationale of this patch? bad2e478af3b ("selftests/bpf: Turn
on libbpf 1.0 mode and fix all IS_ERR checks") explains: 'Fix all the explicit
IS_ERR checks that now will be broken because libbpf returns NULL on error (and
sets errno).' So the !link check looks totally reasonable to me. Converting to
libbpf_get_error() is not wrong in itself, but given you don't make any use of
the err code, there is also no point in this diff here.

Thanks,
Daniel

RE: [PATCH] selftests/bpf: Fix return value check in attach_bpf()

From: John Fastabend <john.fastabend@gmail.com>
Date: 2021-05-28 21:16:29

Yu Kuai wrote:
quoted hunk
use libbpf_get_error() to check the return value of
bpf_program__attach().

Reported-by: Hulk Robot <redacted>
Signed-off-by: Yu Kuai <redacted>
---
 tools/testing/selftests/bpf/benchs/bench_rename.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/testing/selftests/bpf/benchs/bench_rename.c b/tools/testing/selftests/bpf/benchs/bench_rename.c
index c7ec114eca56..b7d4a1d74fca 100644
--- a/tools/testing/selftests/bpf/benchs/bench_rename.c
+++ b/tools/testing/selftests/bpf/benchs/bench_rename.c
@@ -65,7 +65,7 @@ static void attach_bpf(struct bpf_program *prog)
 	struct bpf_link *link;
 
 	link = bpf_program__attach(prog);
-	if (!link) {
+	if (libbpf_get_error(link)) {
 		fprintf(stderr, "failed to attach program!\n");
 		exit(1);
 	}
-- 
Probably should be IS_ERR(link) same as the other benchs/*.c progs.

RE: [PATCH] selftests/bpf: Fix return value check in attach_bpf()

From: John Fastabend <john.fastabend@gmail.com>
Date: 2021-05-28 21:19:28

John Fastabend wrote:
Yu Kuai wrote:
quoted
use libbpf_get_error() to check the return value of
bpf_program__attach().

Reported-by: Hulk Robot <redacted>
Signed-off-by: Yu Kuai <redacted>
---
 tools/testing/selftests/bpf/benchs/bench_rename.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/testing/selftests/bpf/benchs/bench_rename.c b/tools/testing/selftests/bpf/benchs/bench_rename.c
index c7ec114eca56..b7d4a1d74fca 100644
--- a/tools/testing/selftests/bpf/benchs/bench_rename.c
+++ b/tools/testing/selftests/bpf/benchs/bench_rename.c
@@ -65,7 +65,7 @@ static void attach_bpf(struct bpf_program *prog)
 	struct bpf_link *link;
 
 	link = bpf_program__attach(prog);
-	if (!link) {
+	if (libbpf_get_error(link)) {
 		fprintf(stderr, "failed to attach program!\n");
 		exit(1);
 	}
-- 
Probably should be IS_ERR(link) same as the other benchs/*.c progs.
Oops on wrong branch, agree with Daniel looks fine as !link otherwise
need an explanation and fix the rest of the cases.

Re: [PATCH] selftests/bpf: Fix return value check in attach_bpf()

From: yukuai (C) <hidden>
Date: 2021-05-29 01:25:36

On 2021/05/29 4:46, Daniel Borkmann wrote:
On 5/28/21 11:07 AM, Yu Kuai wrote:
quoted
use libbpf_get_error() to check the return value of
bpf_program__attach().

Reported-by: Hulk Robot <redacted>
Signed-off-by: Yu Kuai <redacted>
---
  tools/testing/selftests/bpf/benchs/bench_rename.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/testing/selftests/bpf/benchs/bench_rename.c 
b/tools/testing/selftests/bpf/benchs/bench_rename.c
index c7ec114eca56..b7d4a1d74fca 100644
--- a/tools/testing/selftests/bpf/benchs/bench_rename.c
+++ b/tools/testing/selftests/bpf/benchs/bench_rename.c
@@ -65,7 +65,7 @@ static void attach_bpf(struct bpf_program *prog)
      struct bpf_link *link;
      link = bpf_program__attach(prog);
-    if (!link) {
+    if (libbpf_get_error(link)) {
          fprintf(stderr, "failed to attach program!\n");
          exit(1);
      }
Could you explain the rationale of this patch? bad2e478af3b 
("selftests/bpf: Turn
on libbpf 1.0 mode and fix all IS_ERR checks") explains: 'Fix all the 
explicit
IS_ERR checks that now will be broken because libbpf returns NULL on 
error (and
sets errno).' So the !link check looks totally reasonable to me. 
Converting to
libbpf_get_error() is not wrong in itself, but given you don't make any 
use of
the err code, there is also no point in this diff here.
Hi,

I was thinking that bpf_program__attach() can return error code
theoretically(for example -ESRCH), and such case need to be handled.

Thanks,
Yu Kuai
Thanks,
Daniel
.

Re: [PATCH] selftests/bpf: Fix return value check in attach_bpf()

From: Andrii Nakryiko <hidden>
Date: 2021-05-30 01:17:43

On Fri, May 28, 2021 at 6:25 PM yukuai (C) [off-list ref] wrote:
On 2021/05/29 4:46, Daniel Borkmann wrote:
quoted
On 5/28/21 11:07 AM, Yu Kuai wrote:
quoted
use libbpf_get_error() to check the return value of
bpf_program__attach().

Reported-by: Hulk Robot <redacted>
Signed-off-by: Yu Kuai <redacted>
---
  tools/testing/selftests/bpf/benchs/bench_rename.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/testing/selftests/bpf/benchs/bench_rename.c
b/tools/testing/selftests/bpf/benchs/bench_rename.c
index c7ec114eca56..b7d4a1d74fca 100644
--- a/tools/testing/selftests/bpf/benchs/bench_rename.c
+++ b/tools/testing/selftests/bpf/benchs/bench_rename.c
@@ -65,7 +65,7 @@ static void attach_bpf(struct bpf_program *prog)
      struct bpf_link *link;
      link = bpf_program__attach(prog);
-    if (!link) {
+    if (libbpf_get_error(link)) {
          fprintf(stderr, "failed to attach program!\n");
          exit(1);
      }
Could you explain the rationale of this patch? bad2e478af3b
("selftests/bpf: Turn
on libbpf 1.0 mode and fix all IS_ERR checks") explains: 'Fix all the
explicit
IS_ERR checks that now will be broken because libbpf returns NULL on
error (and
sets errno).' So the !link check looks totally reasonable to me.
Converting to
libbpf_get_error() is not wrong in itself, but given you don't make any
use of
the err code, there is also no point in this diff here.
Hi,

I was thinking that bpf_program__attach() can return error code
theoretically(for example -ESRCH), and such case need to be handled.
I explicitly changed to NULL check + libbpf 1.0 error reporting mode
because I don't care about specific error in benchmarks. So as Daniel
and John pointed out, existing code is correct and doesn't need
adjustment.

You are right, though, that error code is indeed returned, but you can
check errno directly (but need to enable libbpf 1.0 mode) or use
libbpf_get_error() (which will get deprecated some time before libbpf
1.0) if you don't know which mode your code will be run in.

Thanks,
Yu Kuai
quoted
Thanks,
Daniel
.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help