mirror of
https://github.com/netdata/libbpf.git
synced 2026-03-20 16:29:07 +08:00
ci: add temporary patch for failing upstream BPF uprobe selftest
Signed-off-by: Jordan Rome <linux@jordanrome.com>
This commit is contained in:
committed by
Andrii Nakryiko
parent
7827ca87d1
commit
80b16457cb
58
ci/diffs/0003-selftests-bpf-Fix-uprobe-consumer-test.patch
Normal file
58
ci/diffs/0003-selftests-bpf-Fix-uprobe-consumer-test.patch
Normal file
@@ -0,0 +1,58 @@
|
||||
From affb32e4f056883f285f8535b766293b85752fb4 Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Olsa <jolsa@kernel.org>
|
||||
Date: Tue, 24 Sep 2024 13:07:30 +0200
|
||||
Subject: [PATCH] selftests/bpf: Fix uprobe consumer test
|
||||
|
||||
With newly merged code the uprobe behaviour is slightly different
|
||||
and affects uprobe consumer test.
|
||||
|
||||
We no longer need to check if the uprobe object is still preserved
|
||||
after removing last uretprobe, because it stays as long as there's
|
||||
pending/installed uretprobe instance.
|
||||
|
||||
This allows to run uretprobe consumers registered 'after' uprobe was
|
||||
hit even if previous uretprobe got unregistered before being hit.
|
||||
|
||||
The uprobe object will be now removed after the last uprobe ref is
|
||||
released and in such case it's held by ri->uprobe (return instance)
|
||||
which is released after the uretprobe is hit.
|
||||
|
||||
Reported-by: Ihor Solodrai <ihor.solodrai@pm.me>
|
||||
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
|
||||
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
|
||||
Tested-by: Ihor Solodrai <ihor.solodrai@pm.me>
|
||||
Closes: https://lore.kernel.org/bpf/w6U8Z9fdhjnkSp2UaFaV1fGqJXvfLEtDKEUyGDkwmoruDJ_AgF_c0FFhrkeKW18OqiP-05s9yDKiT6X-Ns-avN_ABf0dcUkXqbSJN1TQSXo=@pm.me/
|
||||
---
|
||||
.../testing/selftests/bpf/prog_tests/uprobe_multi_test.c | 9 +--------
|
||||
1 file changed, 1 insertion(+), 8 deletions(-)
|
||||
|
||||
diff --git a/tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c b/tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c
|
||||
index 844f6fc8487b..c1ac813ff9ba 100644
|
||||
--- a/tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c
|
||||
+++ b/tools/testing/selftests/bpf/prog_tests/uprobe_multi_test.c
|
||||
@@ -869,21 +869,14 @@ static void consumer_test(struct uprobe_multi_consumers *skel,
|
||||
fmt = "prog 0/1: uprobe";
|
||||
} else {
|
||||
/*
|
||||
- * uprobe return is tricky ;-)
|
||||
- *
|
||||
* to trigger uretprobe consumer, the uretprobe needs to be installed,
|
||||
* which means one of the 'return' uprobes was alive when probe was hit:
|
||||
*
|
||||
* idxs: 2/3 uprobe return in 'installed' mask
|
||||
- *
|
||||
- * in addition if 'after' state removes everything that was installed in
|
||||
- * 'before' state, then uprobe kernel object goes away and return uprobe
|
||||
- * is not installed and we won't hit it even if it's in 'after' state.
|
||||
*/
|
||||
unsigned long had_uretprobes = before & 0b1100; /* is uretprobe installed */
|
||||
- unsigned long probe_preserved = before & after; /* did uprobe go away */
|
||||
|
||||
- if (had_uretprobes && probe_preserved && test_bit(idx, after))
|
||||
+ if (had_uretprobes && test_bit(idx, after))
|
||||
val++;
|
||||
fmt = "idx 2/3: uretprobe";
|
||||
}
|
||||
--
|
||||
2.34.1
|
||||
|
||||
Reference in New Issue
Block a user