Add a skip() message function that stops the test, logs an explanation, and sets the "skip" return code (4).
Before loading a livepatch self-test kernel module, first verify that we've built and installed it by running a 'modprobe --dry-run'. This should catch a few environment issues, including !CONFIG_LIVEPATCH and !CONFIG_TEST_LIVEPATCH. In these cases, exit gracefully with the new skip() function.
Reported-by: Jiri Benc jbenc@redhat.com Suggested-by: Shuah Khan shuah@kernel.org Signed-off-by: Joe Lawrence joe.lawrence@redhat.com ---
v2: move assert_mod() call into load_mod() and load_lp_nowait(), before they check whether the module is a livepatch or not (a test-failing assertion).
.../testing/selftests/livepatch/functions.sh | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+)
diff --git a/tools/testing/selftests/livepatch/functions.sh b/tools/testing/selftests/livepatch/functions.sh index 30195449c63c..de5a504ffdbc 100644 --- a/tools/testing/selftests/livepatch/functions.sh +++ b/tools/testing/selftests/livepatch/functions.sh @@ -13,6 +13,14 @@ function log() { echo "$1" > /dev/kmsg }
+# skip(msg) - testing can't proceed +# msg - explanation +function skip() { + log "SKIP: $1" + echo "SKIP: $1" >&2 + exit 4 +} + # die(msg) - game over, man # msg - dying words function die() { @@ -43,6 +51,12 @@ function loop_until() { done }
+function assert_mod() { + local mod="$1" + + modprobe --dry-run "$mod" &>/dev/null +} + function is_livepatch_mod() { local mod="$1"
@@ -75,6 +89,9 @@ function __load_mod() { function load_mod() { local mod="$1"; shift
+ assert_mod "$mod" || + skip "Failed modprobe --dry-run of module: $mod" + is_livepatch_mod "$mod" && die "use load_lp() to load the livepatch module $mod"
@@ -88,6 +105,9 @@ function load_mod() { function load_lp_nowait() { local mod="$1"; shift
+ assert_mod "$mod" || + skip "Failed modprobe --dry-run of module: $mod" + is_livepatch_mod "$mod" || die "module $mod is not a livepatch"
On Tue, 16 Jul 2019, Joe Lawrence wrote:
Add a skip() message function that stops the test, logs an explanation, and sets the "skip" return code (4).
Before loading a livepatch self-test kernel module, first verify that we've built and installed it by running a 'modprobe --dry-run'. This should catch a few environment issues, including !CONFIG_LIVEPATCH and !CONFIG_TEST_LIVEPATCH. In these cases, exit gracefully with the new skip() function.
Reported-by: Jiri Benc jbenc@redhat.com Suggested-by: Shuah Khan shuah@kernel.org Signed-off-by: Joe Lawrence joe.lawrence@redhat.com
Reviewed-by: Miroslav Benes mbenes@suse.cz
Miroslav
On Tue 2019-07-16 09:34:14, Joe Lawrence wrote:
Add a skip() message function that stops the test, logs an explanation, and sets the "skip" return code (4).
Before loading a livepatch self-test kernel module, first verify that we've built and installed it by running a 'modprobe --dry-run'. This should catch a few environment issues, including !CONFIG_LIVEPATCH and !CONFIG_TEST_LIVEPATCH. In these cases, exit gracefully with the new skip() function.
Reported-by: Jiri Benc jbenc@redhat.com
Adding Jiri into CC to be sure that we really solved the original problem.
I get the following output when livepatching is not configured:
$> make run_tests TAP version 13 1..4 # selftests: livepatch: test-livepatch.sh # TEST: basic function patching ... SKIP: Failed modprobe --dry-run of module: test_klp_livepatch not ok 1 selftests: livepatch: test-livepatch.sh # SKIP # selftests: livepatch: test-callbacks.sh # TEST: target module before livepatch ... SKIP: Failed modprobe --dry-run of module: test_klp_callbacks_mod not ok 2 selftests: livepatch: test-callbacks.sh # SKIP # selftests: livepatch: test-shadow-vars.sh # TEST: basic shadow variable API ... SKIP: Failed modprobe --dry-run of module: test_klp_shadow_vars not ok 3 selftests: livepatch: test-shadow-vars.sh # SKIP # selftests: livepatch: test-state.sh # TEST: system state modification ... SKIP: Failed modprobe --dry-run of module: test_klp_state not ok 4 selftests: livepatch: test-state.sh # SKIP
Jiri, is it acceptable solution for you, please?
Suggested-by: Shuah Khan shuah@kernel.org Signed-off-by: Joe Lawrence joe.lawrence@redhat.com
Otherwise, the patch looks fine to me. If Jiri is fine then feel free to use:
Reviewed-by: Petr Mladek pmladek@suse.com
Best Regards, Petr
On Wed, 17 Jul 2019 14:00:55 +0200, Petr Mladek wrote:
Adding Jiri into CC to be sure that we really solved the original problem.
The patch looks good to me, the runner expects 4 as an indication that the test was skipped.
I get the following output when livepatching is not configured:
$> make run_tests TAP version 13 1..4 # selftests: livepatch: test-livepatch.sh # TEST: basic function patching ... SKIP: Failed modprobe --dry-run of module: test_klp_livepatch not ok 1 selftests: livepatch: test-livepatch.sh # SKIP # selftests: livepatch: test-callbacks.sh # TEST: target module before livepatch ... SKIP: Failed modprobe --dry-run of module: test_klp_callbacks_mod not ok 2 selftests: livepatch: test-callbacks.sh # SKIP # selftests: livepatch: test-shadow-vars.sh # TEST: basic shadow variable API ... SKIP: Failed modprobe --dry-run of module: test_klp_shadow_vars not ok 3 selftests: livepatch: test-shadow-vars.sh # SKIP # selftests: livepatch: test-state.sh # TEST: system state modification ... SKIP: Failed modprobe --dry-run of module: test_klp_state not ok 4 selftests: livepatch: test-state.sh # SKIP
Jiri, is it acceptable solution for you, please?
It looks correct. My reading of the TAP 13 specification is that it should be returned as "ok" instead of "not ok" but that is not a problem of this patch.
Otherwise, the patch looks fine to me. If Jiri is fine then feel free to use:
Reviewed-by: Petr Mladek pmladek@suse.com
Sure.
Acked-by: Jiri Benc jbenc@redhat.com
Thanks!
Jiri
On 7/16/19 7:04 PM, Joe Lawrence wrote:
Add a skip() message function that stops the test, logs an explanation, and sets the "skip" return code (4).
Before loading a livepatch self-test kernel module, first verify that we've built and installed it by running a 'modprobe --dry-run'. This should catch a few environment issues, including !CONFIG_LIVEPATCH and !CONFIG_TEST_LIVEPATCH. In these cases, exit gracefully with the new skip() function.
Reported-by: Jiri Benc jbenc@redhat.com Suggested-by: Shuah Khan shuah@kernel.org Signed-off-by: Joe Lawrence joe.lawrence@redhat.com
Reviewed-by: Kamalesh Babulal kamalesh@linux.vnet.ibm.com
linux-kselftest-mirror@lists.linaro.org