Re: [PATCH bpf-next 1/2] selftests/bpf: Fix uprobe consumer test

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tuesday, September 24th, 2024 at 4:07 AM, Jiri Olsa <jolsa@xxxxxxxxxx> wrote:

> 
> 
> 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@xxxxx
> 
> Closes: https://lore.kernel.org/bpf/w6U8Z9fdhjnkSp2UaFaV1fGqJXvfLEtDKEUyGDkwmoruDJ_AgF_c0FFhrkeKW18OqiP-05s9yDKiT6X-Ns-avN_ABf0dcUkXqbSJN1TQSXo=@pm.me/
> Signed-off-by: Jiri Olsa jolsa@xxxxxxxxxx
> 
> ---
> .../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.46.0

Hi Jiri,

I tested this change on top of bpf-next/master, and
selftests/bpf/vmtest.sh passes.

Thank you for the fix!

Tested-by: Ihor Solodrai <ihor.solodrai@xxxxx>






[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux