On Thu, Mar 05, 2026 at 11:02:58AM +0800, Sun Jian wrote:
> livepatch_trampoline relies on livepatch sysfs and livepatch-sample.ko.
> When CONFIG_LIVEPATCH is disabled or the samples module isn't built, the
> test fails with ENOENT and causes false failures in minimal CI configs.
> 
> Skip the test when livepatch sysfs or the sample module is unavailable.
> Also avoid writing to livepatch sysfs when it's not present.
> 
> Signed-off-by: Sun Jian <[email protected]>
> ---
> 
> v2:
>   - Add missing Cc's suggested by get_maintainer.pl
>   - Prefix subject with bpf-next to avoid Patchwork tree mis-detection
>   - Drop Fixes tag to avoid verify_fixes issues due to tree mismatch
>   - No code changes
> 
> v1: https://patchew.org/linux/[email protected]/
> 
>  .../bpf/prog_tests/livepatch_trampoline.c     | 28 ++++++++++++++++++-
>  1 file changed, 27 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/testing/selftests/bpf/prog_tests/livepatch_trampoline.c 
> b/tools/testing/selftests/bpf/prog_tests/livepatch_trampoline.c
> index 72aa5376c30e..75336d9c2313 100644
> --- a/tools/testing/selftests/bpf/prog_tests/livepatch_trampoline.c
> +++ b/tools/testing/selftests/bpf/prog_tests/livepatch_trampoline.c
> @@ -2,9 +2,12 @@
>  /* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */
>  
>  #include <test_progs.h>
> +#include <unistd.h>
>  #include "testing_helpers.h"
>  #include "livepatch_trampoline.skel.h"
>  
> +#define LIVEPATCH_ENABLED_PATH 
> "/sys/kernel/livepatch/livepatch_sample/enabled"
> +
>  static int load_livepatch(void)
>  {
>       char path[4096];
> @@ -19,7 +22,8 @@ static int load_livepatch(void)
>  static void unload_livepatch(void)
>  {
>       /* Disable the livepatch before unloading the module */
> -     system("echo 0 > /sys/kernel/livepatch/livepatch_sample/enabled");
> +     if (!access(LIVEPATCH_ENABLED_PATH, F_OK))
> +             system("echo 0 > " LIVEPATCH_ENABLED_PATH);
>  
>       unload_module("livepatch_sample", env_verbosity > VERBOSE_NONE);
>  }
> @@ -82,6 +86,28 @@ void test_livepatch_trampoline(void)
>  {
>       int retry_cnt = 0;
>  
> +     /* Skip if kernel was built without CONFIG_LIVEPATCH */
> +     if (access("/sys/kernel/livepatch", F_OK)) {
> +             test__skip();
> +             return;
> +     }
> +
> +     /*
> +      * Skip if livepatch-sample.ko was not built (same path logic as
> +      * load_livepatch()).
> +      */
> +     {
> +             char path[4096];
> +
> +             snprintf(path, sizeof(path),
> +                      "%s/samples/livepatch/livepatch-sample.ko",
> +                      getenv("KBUILD_OUTPUT") ? : "../../../..");
> +             if (access(path, R_OK)) {
> +                     test__skip();
> +                     return;
> +             }
> +     }
> +
>  retry:
>       if (load_livepatch()) {

load_livepatch returns -ENOENT if we fail to open the file, we could
check for it instead of putting together the path again

jirka

Reply via email to