Re: [PATCH bpf-next 4/5] selftests/bpf: Disable kprobe attach test with offset for CONFIG_X86_KERNEL_IBT

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

 



On Sun, Jul 24, 2022 at 2:22 PM Jiri Olsa <jolsa@xxxxxxxxxx> wrote:
>
> Attach like 'kprobe/bpf_fentry_test6+0x5' will fail to attach
> when CONFIG_X86_KERNEL_IBT option is enabled because of the
> endbr instruction at the function entry.
>
> We would need to do manual attach with offset calculation based
> on the CONFIG_X86_KERNEL_IBT option, which does not seem worth
> the effort to me.
>
> Disabling these test when CONFIG_X86_KERNEL_IBT is enabled.
>
> Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx>
> ---
>  .../bpf/prog_tests/get_func_ip_test.c         | 25 +++++++++++++++----
>  1 file changed, 20 insertions(+), 5 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/prog_tests/get_func_ip_test.c b/tools/testing/selftests/bpf/prog_tests/get_func_ip_test.c
> index 938dbd4d7c2f..cb0b78fb29df 100644
> --- a/tools/testing/selftests/bpf/prog_tests/get_func_ip_test.c
> +++ b/tools/testing/selftests/bpf/prog_tests/get_func_ip_test.c
> @@ -2,6 +2,24 @@
>  #include <test_progs.h>
>  #include "get_func_ip_test.skel.h"
>
> +/* assume IBT is enabled when kernel configs are not available */
> +#ifdef HAVE_GENHDR
> +# include "autoconf.h"
> +#else
> +#  define CONFIG_X86_KERNEL_IBT 1
> +#endif

this autoconf.h business is something I'd rather avoid, it would be
great to be able to use libbpf's __kconfig support to detect
CONFIG_X86_KERNEL_IBT instead? One way would be to mark test6/test7 as
non-auto-loadable (SEC("?...")). Load only test1-tes5, run tests, in
one of BPF programs propagate __kconfig CONFIG_X86_KERNEL_IBT to
user-space through a global variable. Attach skeleton, trigger
everything, remember whether IBT is enabled or not.

If it is defined, load skeleton again, but now enable test6 and test7
and manually attach them through bpf_program__attach_kprobe()
specifying offset as +5 or +9, depending on IBT. It's certainly a bit
more code, but we'll actually test IBT stuff properly.

WDYT?


> +
> +/* test6 and test7 are x86_64 specific because of the instruction
> + * offset, disabling it for all other archs
> + *
> + * CONFIG_X86_KERNEL_IBT adds endbr instruction at function entry,
> + * so disabling test6 and test7, because the offset is hardcoded
> + * in program section
> + */
> +#if !defined(__x86_64__) || defined(CONFIG_X86_KERNEL_IBT)
> +#define DISABLE_OFFSET_ATTACH 1
> +#endif
> +
>  void test_get_func_ip_test(void)
>  {
>         struct get_func_ip_test *skel = NULL;
> @@ -12,10 +30,7 @@ void test_get_func_ip_test(void)
>         if (!ASSERT_OK_PTR(skel, "get_func_ip_test__open"))
>                 return;
>
> -       /* test6 is x86_64 specifc because of the instruction
> -        * offset, disabling it for all other archs
> -        */
> -#ifndef __x86_64__
> +#if defined(DISABLE_OFFSET_ATTACH)
>         bpf_program__set_autoload(skel->progs.test6, false);
>         bpf_program__set_autoload(skel->progs.test7, false);
>  #endif
> @@ -43,7 +58,7 @@ void test_get_func_ip_test(void)
>         ASSERT_EQ(skel->bss->test3_result, 1, "test3_result");
>         ASSERT_EQ(skel->bss->test4_result, 1, "test4_result");
>         ASSERT_EQ(skel->bss->test5_result, 1, "test5_result");
> -#ifdef __x86_64__
> +#if !defined(DISABLE_OFFSET_ATTACH)
>         ASSERT_EQ(skel->bss->test6_result, 1, "test6_result");
>         ASSERT_EQ(skel->bss->test7_result, 1, "test7_result");
>  #endif
> --
> 2.35.3
>



[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