]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests/bpf: Skip livepatch test when prerequisites are missing
authorSun Jian <sun.jian.kdev@gmail.com>
Mon, 9 Mar 2026 10:44:48 +0000 (18:44 +0800)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 11 Mar 2026 16:36:37 +0000 (09:36 -0700)
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 <sun.jian.kdev@gmail.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Link: https://lore.kernel.org/r/20260309104448.817401-1-sun.jian.kdev@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/prog_tests/livepatch_trampoline.c

index 72aa5376c30e91b79194462593df06303d921aac..0a12af924a992655437047d86b68a48911144e2a 100644 (file)
@@ -5,6 +5,8 @@
 #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 +21,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);
 }
@@ -81,9 +84,22 @@ out:
 void test_livepatch_trampoline(void)
 {
        int retry_cnt = 0;
+       int err;
+
+       /* Skip if kernel was built without CONFIG_LIVEPATCH */
+       if (access("/sys/kernel/livepatch", F_OK)) {
+               test__skip();
+               return;
+       }
 
 retry:
-       if (load_livepatch()) {
+       err = load_livepatch();
+       if (err) {
+               if (err == -ENOENT) {
+                       test__skip();
+                       return;
+               }
+
                if (retry_cnt) {
                        ASSERT_OK(1, "load_livepatch");
                        goto out;