mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
livepatch: Move tests from lib/livepatch to selftests/livepatch
The modules are being moved from lib/livepatch to tools/testing/selftests/livepatch/test_modules. This code moving will allow writing more complex tests, like for example an userspace C code that will call a livepatched kernel function. The modules are now built as out-of-tree modules, but being part of the kernel source means they will be maintained. Another advantage of the code moving is to be able to easily change, debug and rebuild the tests by running make on the selftests/livepatch directory, which is not currently possible since the modules on lib/livepatch are build and installed using the "modules" target. The current approach also keeps the ability to execute the tests manually by executing the scripts inside selftests/livepatch directory, as it's currently supported. If the modules are modified, they needed to be rebuilt before running the scripts though. The modules are built before running the selftests when using the kselftest invocations: make kselftest TARGETS=livepatch or make -C tools/testing/selftests/livepatch run_tests Having the modules being built as out-of-modules requires changing the currently used 'modprobe' by 'insmod' and adapt the test scripts that check for the kernel message buffer. Now it is possible to only compile the modules by running: make -C tools/testing/selftests/livepatch/ This way the test modules and other test program can be built in order to be packaged if so desired. As there aren't any modules being built on lib/livepatch, remove the TEST_LIVEPATCH Kconfig and it's references. Note: "make gen_tar" packages the pre-built binaries into the tarball. It means that it will store the test modules pre-built for the kernel running on the build host. Note that these modules need not binary compatible with the kernel built from the same sources. But the same is true for other packaged selftest binaries. The entire kernel sources are needed for rebuilding the selftests on another system. Reviewed-by: Joe Lawrence <joe.lawrence@redhat.com> Reviewed-by: Petr Mladek <pmladek@suse.com> Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com> Acked-by: Alexander Gordeev <agordeev@linux.ibm.com> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
parent
6727980b67
commit
c4bbe83d27
@ -12510,7 +12510,6 @@ F: arch/powerpc/include/asm/livepatch.h
|
||||
F: include/linux/livepatch.h
|
||||
F: kernel/livepatch/
|
||||
F: kernel/module/livepatch.c
|
||||
F: lib/livepatch/
|
||||
F: samples/livepatch/
|
||||
F: tools/testing/selftests/livepatch/
|
||||
|
||||
|
@ -886,4 +886,3 @@ CONFIG_ATOMIC64_SELFTEST=y
|
||||
CONFIG_STRING_SELFTEST=y
|
||||
CONFIG_TEST_BITOPS=m
|
||||
CONFIG_TEST_BPF=m
|
||||
CONFIG_TEST_LIVEPATCH=m
|
||||
|
@ -815,4 +815,3 @@ CONFIG_KPROBES_SANITY_TEST=m
|
||||
CONFIG_PERCPU_TEST=m
|
||||
CONFIG_ATOMIC64_SELFTEST=y
|
||||
CONFIG_TEST_BPF=m
|
||||
CONFIG_TEST_LIVEPATCH=m
|
||||
|
@ -2857,28 +2857,6 @@ config TEST_MEMCAT_P
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config TEST_LIVEPATCH
|
||||
tristate "Test livepatching"
|
||||
default n
|
||||
depends on DYNAMIC_DEBUG
|
||||
depends on LIVEPATCH
|
||||
depends on m
|
||||
help
|
||||
Test kernel livepatching features for correctness. The tests will
|
||||
load test modules that will be livepatched in various scenarios.
|
||||
|
||||
To run all the livepatching tests:
|
||||
|
||||
make -C tools/testing/selftests TARGETS=livepatch run_tests
|
||||
|
||||
Alternatively, individual tests may be invoked:
|
||||
|
||||
tools/testing/selftests/livepatch/test-callbacks.sh
|
||||
tools/testing/selftests/livepatch/test-livepatch.sh
|
||||
tools/testing/selftests/livepatch/test-shadow-vars.sh
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config TEST_OBJAGG
|
||||
tristate "Perform selftest on object aggreration manager"
|
||||
default n
|
||||
|
@ -134,8 +134,6 @@ endif
|
||||
obj-$(CONFIG_TEST_FPU) += test_fpu.o
|
||||
CFLAGS_test_fpu.o += $(FPU_CFLAGS)
|
||||
|
||||
obj-$(CONFIG_TEST_LIVEPATCH) += livepatch/
|
||||
|
||||
# Some KUnit files (hooks.o) need to be built-in even when KUnit is a module,
|
||||
# so we can't just use obj-$(CONFIG_KUNIT).
|
||||
ifdef CONFIG_KUNIT
|
||||
|
@ -1,14 +0,0 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
#
|
||||
# Makefile for livepatch test code.
|
||||
|
||||
obj-$(CONFIG_TEST_LIVEPATCH) += test_klp_atomic_replace.o \
|
||||
test_klp_callbacks_demo.o \
|
||||
test_klp_callbacks_demo2.o \
|
||||
test_klp_callbacks_busy.o \
|
||||
test_klp_callbacks_mod.o \
|
||||
test_klp_livepatch.o \
|
||||
test_klp_shadow_vars.o \
|
||||
test_klp_state.o \
|
||||
test_klp_state2.o \
|
||||
test_klp_state3.o
|
@ -1,5 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
TEST_GEN_MODS_DIR := test_modules
|
||||
TEST_PROGS_EXTENDED := functions.sh
|
||||
TEST_PROGS := \
|
||||
test-livepatch.sh \
|
||||
|
@ -13,23 +13,36 @@ the message buffer for only the duration of each individual test.)
|
||||
Config
|
||||
------
|
||||
|
||||
Set these config options and their prerequisites:
|
||||
Set CONFIG_LIVEPATCH=y option and it's prerequisites.
|
||||
|
||||
CONFIG_LIVEPATCH=y
|
||||
CONFIG_TEST_LIVEPATCH=m
|
||||
|
||||
Building the tests
|
||||
------------------
|
||||
|
||||
To only build the tests without running them, run:
|
||||
|
||||
% make -C tools/testing/selftests/livepatch
|
||||
|
||||
The command above will compile all test modules and test programs, making them
|
||||
ready to be packaged if so desired.
|
||||
|
||||
Running the tests
|
||||
-----------------
|
||||
|
||||
Test kernel modules are built as part of lib/ (make modules) and need to
|
||||
be installed (make modules_install) as the test scripts will modprobe
|
||||
them.
|
||||
Test kernel modules are built before running the livepatch selftests. The
|
||||
modules are located under test_modules directory, and are built as out-of-tree
|
||||
modules. This is specially useful since the same sources can be built and
|
||||
tested on systems with different kABI, ensuring they the tests are backwards
|
||||
compatible. The modules will be loaded by the test scripts using insmod.
|
||||
|
||||
To run the livepatch selftests, from the top of the kernel source tree:
|
||||
|
||||
% make -C tools/testing/selftests TARGETS=livepatch run_tests
|
||||
|
||||
or
|
||||
|
||||
% make kselftest TARGETS=livepatch
|
||||
|
||||
|
||||
Adding tests
|
||||
------------
|
||||
|
@ -1,3 +1,2 @@
|
||||
CONFIG_LIVEPATCH=y
|
||||
CONFIG_DYNAMIC_DEBUG=y
|
||||
CONFIG_TEST_LIVEPATCH=m
|
||||
|
@ -127,16 +127,14 @@ function loop_until() {
|
||||
done
|
||||
}
|
||||
|
||||
function assert_mod() {
|
||||
local mod="$1"
|
||||
|
||||
modprobe --dry-run "$mod" &>/dev/null
|
||||
}
|
||||
|
||||
function is_livepatch_mod() {
|
||||
local mod="$1"
|
||||
|
||||
if [[ $(modinfo "$mod" | awk '/^livepatch:/{print $NF}') == "Y" ]]; then
|
||||
if [[ ! -f "test_modules/$mod.ko" ]]; then
|
||||
die "Can't find \"test_modules/$mod.ko\", try \"make\""
|
||||
fi
|
||||
|
||||
if [[ $(modinfo "test_modules/$mod.ko" | awk '/^livepatch:/{print $NF}') == "Y" ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
@ -146,9 +144,9 @@ function is_livepatch_mod() {
|
||||
function __load_mod() {
|
||||
local mod="$1"; shift
|
||||
|
||||
local msg="% modprobe $mod $*"
|
||||
local msg="% insmod test_modules/$mod.ko $*"
|
||||
log "${msg%% }"
|
||||
ret=$(modprobe "$mod" "$@" 2>&1)
|
||||
ret=$(insmod "test_modules/$mod.ko" "$@" 2>&1)
|
||||
if [[ "$ret" != "" ]]; then
|
||||
die "$ret"
|
||||
fi
|
||||
@ -161,13 +159,10 @@ function __load_mod() {
|
||||
|
||||
# load_mod(modname, params) - load a kernel module
|
||||
# modname - module name to load
|
||||
# params - module parameters to pass to modprobe
|
||||
# params - module parameters to pass to insmod
|
||||
function load_mod() {
|
||||
local mod="$1"; shift
|
||||
|
||||
assert_mod "$mod" ||
|
||||
skip "unable to load module ${mod}, verify CONFIG_TEST_LIVEPATCH=m and run self-tests as root"
|
||||
|
||||
is_livepatch_mod "$mod" &&
|
||||
die "use load_lp() to load the livepatch module $mod"
|
||||
|
||||
@ -177,13 +172,10 @@ function load_mod() {
|
||||
# load_lp_nowait(modname, params) - load a kernel module with a livepatch
|
||||
# but do not wait on until the transition finishes
|
||||
# modname - module name to load
|
||||
# params - module parameters to pass to modprobe
|
||||
# params - module parameters to pass to insmod
|
||||
function load_lp_nowait() {
|
||||
local mod="$1"; shift
|
||||
|
||||
assert_mod "$mod" ||
|
||||
skip "unable to load module ${mod}, verify CONFIG_TEST_LIVEPATCH=m and run self-tests as root"
|
||||
|
||||
is_livepatch_mod "$mod" ||
|
||||
die "module $mod is not a livepatch"
|
||||
|
||||
@ -196,7 +188,7 @@ function load_lp_nowait() {
|
||||
|
||||
# load_lp(modname, params) - load a kernel module with a livepatch
|
||||
# modname - module name to load
|
||||
# params - module parameters to pass to modprobe
|
||||
# params - module parameters to pass to insmod
|
||||
function load_lp() {
|
||||
local mod="$1"; shift
|
||||
|
||||
@ -209,13 +201,13 @@ function load_lp() {
|
||||
|
||||
# load_failing_mod(modname, params) - load a kernel module, expect to fail
|
||||
# modname - module name to load
|
||||
# params - module parameters to pass to modprobe
|
||||
# params - module parameters to pass to insmod
|
||||
function load_failing_mod() {
|
||||
local mod="$1"; shift
|
||||
|
||||
local msg="% modprobe $mod $*"
|
||||
local msg="% insmod test_modules/$mod.ko $*"
|
||||
log "${msg%% }"
|
||||
ret=$(modprobe "$mod" "$@" 2>&1)
|
||||
ret=$(insmod "test_modules/$mod.ko" "$@" 2>&1)
|
||||
if [[ "$ret" == "" ]]; then
|
||||
die "$mod unexpectedly loaded"
|
||||
fi
|
||||
|
@ -34,9 +34,9 @@ disable_lp $MOD_LIVEPATCH
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
unload_mod $MOD_TARGET
|
||||
|
||||
check_result "% modprobe $MOD_TARGET
|
||||
check_result "% insmod test_modules/$MOD_TARGET.ko
|
||||
$MOD_TARGET: ${MOD_TARGET}_init
|
||||
% modprobe $MOD_LIVEPATCH
|
||||
% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
$MOD_LIVEPATCH: pre_patch_callback: vmlinux
|
||||
@ -81,7 +81,7 @@ disable_lp $MOD_LIVEPATCH
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
unload_mod $MOD_TARGET
|
||||
|
||||
check_result "% modprobe $MOD_LIVEPATCH
|
||||
check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
$MOD_LIVEPATCH: pre_patch_callback: vmlinux
|
||||
@ -89,7 +89,7 @@ livepatch: '$MOD_LIVEPATCH': starting patching transition
|
||||
livepatch: '$MOD_LIVEPATCH': completing patching transition
|
||||
$MOD_LIVEPATCH: post_patch_callback: vmlinux
|
||||
livepatch: '$MOD_LIVEPATCH': patching complete
|
||||
% modprobe $MOD_TARGET
|
||||
% insmod test_modules/$MOD_TARGET.ko
|
||||
livepatch: applying patch '$MOD_LIVEPATCH' to loading module '$MOD_TARGET'
|
||||
$MOD_LIVEPATCH: pre_patch_callback: $MOD_TARGET -> [MODULE_STATE_COMING] Full formed, running module_init
|
||||
$MOD_LIVEPATCH: post_patch_callback: $MOD_TARGET -> [MODULE_STATE_COMING] Full formed, running module_init
|
||||
@ -129,9 +129,9 @@ unload_mod $MOD_TARGET
|
||||
disable_lp $MOD_LIVEPATCH
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
|
||||
check_result "% modprobe $MOD_TARGET
|
||||
check_result "% insmod test_modules/$MOD_TARGET.ko
|
||||
$MOD_TARGET: ${MOD_TARGET}_init
|
||||
% modprobe $MOD_LIVEPATCH
|
||||
% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
$MOD_LIVEPATCH: pre_patch_callback: vmlinux
|
||||
@ -177,7 +177,7 @@ unload_mod $MOD_TARGET
|
||||
disable_lp $MOD_LIVEPATCH
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
|
||||
check_result "% modprobe $MOD_LIVEPATCH
|
||||
check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
$MOD_LIVEPATCH: pre_patch_callback: vmlinux
|
||||
@ -185,7 +185,7 @@ livepatch: '$MOD_LIVEPATCH': starting patching transition
|
||||
livepatch: '$MOD_LIVEPATCH': completing patching transition
|
||||
$MOD_LIVEPATCH: post_patch_callback: vmlinux
|
||||
livepatch: '$MOD_LIVEPATCH': patching complete
|
||||
% modprobe $MOD_TARGET
|
||||
% insmod test_modules/$MOD_TARGET.ko
|
||||
livepatch: applying patch '$MOD_LIVEPATCH' to loading module '$MOD_TARGET'
|
||||
$MOD_LIVEPATCH: pre_patch_callback: $MOD_TARGET -> [MODULE_STATE_COMING] Full formed, running module_init
|
||||
$MOD_LIVEPATCH: post_patch_callback: $MOD_TARGET -> [MODULE_STATE_COMING] Full formed, running module_init
|
||||
@ -219,7 +219,7 @@ load_lp $MOD_LIVEPATCH
|
||||
disable_lp $MOD_LIVEPATCH
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
|
||||
check_result "% modprobe $MOD_LIVEPATCH
|
||||
check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
$MOD_LIVEPATCH: pre_patch_callback: vmlinux
|
||||
@ -254,9 +254,9 @@ load_mod $MOD_TARGET
|
||||
load_failing_mod $MOD_LIVEPATCH pre_patch_ret=-19
|
||||
unload_mod $MOD_TARGET
|
||||
|
||||
check_result "% modprobe $MOD_TARGET
|
||||
check_result "% insmod test_modules/$MOD_TARGET.ko
|
||||
$MOD_TARGET: ${MOD_TARGET}_init
|
||||
% modprobe $MOD_LIVEPATCH pre_patch_ret=-19
|
||||
% insmod test_modules/$MOD_LIVEPATCH.ko pre_patch_ret=-19
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
test_klp_callbacks_demo: pre_patch_callback: vmlinux
|
||||
@ -265,7 +265,7 @@ livepatch: failed to enable patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': canceling patching transition, going to unpatch
|
||||
livepatch: '$MOD_LIVEPATCH': completing unpatching transition
|
||||
livepatch: '$MOD_LIVEPATCH': unpatching complete
|
||||
modprobe: ERROR: could not insert '$MOD_LIVEPATCH': No such device
|
||||
insmod: ERROR: could not insert module test_modules/$MOD_LIVEPATCH.ko: No such device
|
||||
% rmmod $MOD_TARGET
|
||||
$MOD_TARGET: ${MOD_TARGET}_exit"
|
||||
|
||||
@ -295,7 +295,7 @@ load_failing_mod $MOD_TARGET
|
||||
disable_lp $MOD_LIVEPATCH
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
|
||||
check_result "% modprobe $MOD_LIVEPATCH
|
||||
check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
$MOD_LIVEPATCH: pre_patch_callback: vmlinux
|
||||
@ -304,12 +304,12 @@ livepatch: '$MOD_LIVEPATCH': completing patching transition
|
||||
$MOD_LIVEPATCH: post_patch_callback: vmlinux
|
||||
livepatch: '$MOD_LIVEPATCH': patching complete
|
||||
% echo -19 > /sys/module/$MOD_LIVEPATCH/parameters/pre_patch_ret
|
||||
% modprobe $MOD_TARGET
|
||||
% insmod test_modules/$MOD_TARGET.ko
|
||||
livepatch: applying patch '$MOD_LIVEPATCH' to loading module '$MOD_TARGET'
|
||||
$MOD_LIVEPATCH: pre_patch_callback: $MOD_TARGET -> [MODULE_STATE_COMING] Full formed, running module_init
|
||||
livepatch: pre-patch callback failed for object '$MOD_TARGET'
|
||||
livepatch: patch '$MOD_LIVEPATCH' failed for module '$MOD_TARGET', refusing to load module '$MOD_TARGET'
|
||||
modprobe: ERROR: could not insert '$MOD_TARGET': No such device
|
||||
insmod: ERROR: could not insert module test_modules/$MOD_TARGET.ko: No such device
|
||||
% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
|
||||
livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
|
||||
$MOD_LIVEPATCH: pre_unpatch_callback: vmlinux
|
||||
@ -340,11 +340,11 @@ disable_lp $MOD_LIVEPATCH
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
unload_mod $MOD_TARGET_BUSY
|
||||
|
||||
check_result "% modprobe $MOD_TARGET_BUSY block_transition=N
|
||||
check_result "% insmod test_modules/$MOD_TARGET_BUSY.ko block_transition=N
|
||||
$MOD_TARGET_BUSY: ${MOD_TARGET_BUSY}_init
|
||||
$MOD_TARGET_BUSY: busymod_work_func enter
|
||||
$MOD_TARGET_BUSY: busymod_work_func exit
|
||||
% modprobe $MOD_LIVEPATCH
|
||||
% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
$MOD_LIVEPATCH: pre_patch_callback: vmlinux
|
||||
@ -354,7 +354,7 @@ livepatch: '$MOD_LIVEPATCH': completing patching transition
|
||||
$MOD_LIVEPATCH: post_patch_callback: vmlinux
|
||||
$MOD_LIVEPATCH: post_patch_callback: $MOD_TARGET_BUSY -> [MODULE_STATE_LIVE] Normal state
|
||||
livepatch: '$MOD_LIVEPATCH': patching complete
|
||||
% modprobe $MOD_TARGET
|
||||
% insmod test_modules/$MOD_TARGET.ko
|
||||
livepatch: applying patch '$MOD_LIVEPATCH' to loading module '$MOD_TARGET'
|
||||
$MOD_LIVEPATCH: pre_patch_callback: $MOD_TARGET -> [MODULE_STATE_COMING] Full formed, running module_init
|
||||
$MOD_LIVEPATCH: post_patch_callback: $MOD_TARGET -> [MODULE_STATE_COMING] Full formed, running module_init
|
||||
@ -421,16 +421,16 @@ disable_lp $MOD_LIVEPATCH
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
unload_mod $MOD_TARGET_BUSY
|
||||
|
||||
check_result "% modprobe $MOD_TARGET_BUSY block_transition=Y
|
||||
check_result "% insmod test_modules/$MOD_TARGET_BUSY.ko block_transition=Y
|
||||
$MOD_TARGET_BUSY: ${MOD_TARGET_BUSY}_init
|
||||
$MOD_TARGET_BUSY: busymod_work_func enter
|
||||
% modprobe $MOD_LIVEPATCH
|
||||
% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
$MOD_LIVEPATCH: pre_patch_callback: vmlinux
|
||||
$MOD_LIVEPATCH: pre_patch_callback: $MOD_TARGET_BUSY -> [MODULE_STATE_LIVE] Normal state
|
||||
livepatch: '$MOD_LIVEPATCH': starting patching transition
|
||||
% modprobe $MOD_TARGET
|
||||
% insmod test_modules/$MOD_TARGET.ko
|
||||
livepatch: applying patch '$MOD_LIVEPATCH' to loading module '$MOD_TARGET'
|
||||
$MOD_LIVEPATCH: pre_patch_callback: $MOD_TARGET -> [MODULE_STATE_COMING] Full formed, running module_init
|
||||
$MOD_TARGET: ${MOD_TARGET}_init
|
||||
@ -467,7 +467,7 @@ disable_lp $MOD_LIVEPATCH
|
||||
unload_lp $MOD_LIVEPATCH2
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
|
||||
check_result "% modprobe $MOD_LIVEPATCH
|
||||
check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
$MOD_LIVEPATCH: pre_patch_callback: vmlinux
|
||||
@ -475,7 +475,7 @@ livepatch: '$MOD_LIVEPATCH': starting patching transition
|
||||
livepatch: '$MOD_LIVEPATCH': completing patching transition
|
||||
$MOD_LIVEPATCH: post_patch_callback: vmlinux
|
||||
livepatch: '$MOD_LIVEPATCH': patching complete
|
||||
% modprobe $MOD_LIVEPATCH2
|
||||
% insmod test_modules/$MOD_LIVEPATCH2.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH2'
|
||||
livepatch: '$MOD_LIVEPATCH2': initializing patching transition
|
||||
$MOD_LIVEPATCH2: pre_patch_callback: vmlinux
|
||||
@ -523,7 +523,7 @@ disable_lp $MOD_LIVEPATCH2
|
||||
unload_lp $MOD_LIVEPATCH2
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
|
||||
check_result "% modprobe $MOD_LIVEPATCH
|
||||
check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
$MOD_LIVEPATCH: pre_patch_callback: vmlinux
|
||||
@ -531,7 +531,7 @@ livepatch: '$MOD_LIVEPATCH': starting patching transition
|
||||
livepatch: '$MOD_LIVEPATCH': completing patching transition
|
||||
$MOD_LIVEPATCH: post_patch_callback: vmlinux
|
||||
livepatch: '$MOD_LIVEPATCH': patching complete
|
||||
% modprobe $MOD_LIVEPATCH2 replace=1
|
||||
% insmod test_modules/$MOD_LIVEPATCH2.ko replace=1
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH2'
|
||||
livepatch: '$MOD_LIVEPATCH2': initializing patching transition
|
||||
$MOD_LIVEPATCH2: pre_patch_callback: vmlinux
|
||||
|
@ -35,7 +35,7 @@ disable_lp $MOD_LIVEPATCH
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
|
||||
check_result "livepatch: kernel.ftrace_enabled = 0
|
||||
% modprobe $MOD_LIVEPATCH
|
||||
% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16)
|
||||
@ -44,9 +44,9 @@ livepatch: failed to enable patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': canceling patching transition, going to unpatch
|
||||
livepatch: '$MOD_LIVEPATCH': completing unpatching transition
|
||||
livepatch: '$MOD_LIVEPATCH': unpatching complete
|
||||
modprobe: ERROR: could not insert '$MOD_LIVEPATCH': Device or resource busy
|
||||
insmod: ERROR: could not insert module test_modules/$MOD_LIVEPATCH.ko: Device or resource busy
|
||||
livepatch: kernel.ftrace_enabled = 1
|
||||
% modprobe $MOD_LIVEPATCH
|
||||
% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
livepatch: '$MOD_LIVEPATCH': starting patching transition
|
||||
|
@ -31,7 +31,7 @@ if [[ "$(cat /proc/cmdline)" == "$MOD_LIVEPATCH: this has been live patched" ]]
|
||||
die "livepatch kselftest(s) failed"
|
||||
fi
|
||||
|
||||
check_result "% modprobe $MOD_LIVEPATCH
|
||||
check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
livepatch: '$MOD_LIVEPATCH': starting patching transition
|
||||
@ -75,14 +75,14 @@ unload_lp $MOD_LIVEPATCH
|
||||
grep 'live patched' /proc/cmdline > /dev/kmsg
|
||||
grep 'live patched' /proc/meminfo > /dev/kmsg
|
||||
|
||||
check_result "% modprobe $MOD_LIVEPATCH
|
||||
check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
livepatch: '$MOD_LIVEPATCH': starting patching transition
|
||||
livepatch: '$MOD_LIVEPATCH': completing patching transition
|
||||
livepatch: '$MOD_LIVEPATCH': patching complete
|
||||
$MOD_LIVEPATCH: this has been live patched
|
||||
% modprobe $MOD_REPLACE replace=0
|
||||
% insmod test_modules/$MOD_REPLACE.ko replace=0
|
||||
livepatch: enabling patch '$MOD_REPLACE'
|
||||
livepatch: '$MOD_REPLACE': initializing patching transition
|
||||
livepatch: '$MOD_REPLACE': starting patching transition
|
||||
@ -135,14 +135,14 @@ unload_lp $MOD_REPLACE
|
||||
grep 'live patched' /proc/cmdline > /dev/kmsg
|
||||
grep 'live patched' /proc/meminfo > /dev/kmsg
|
||||
|
||||
check_result "% modprobe $MOD_LIVEPATCH
|
||||
check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
livepatch: '$MOD_LIVEPATCH': starting patching transition
|
||||
livepatch: '$MOD_LIVEPATCH': completing patching transition
|
||||
livepatch: '$MOD_LIVEPATCH': patching complete
|
||||
$MOD_LIVEPATCH: this has been live patched
|
||||
% modprobe $MOD_REPLACE replace=1
|
||||
% insmod test_modules/$MOD_REPLACE.ko replace=1
|
||||
livepatch: enabling patch '$MOD_REPLACE'
|
||||
livepatch: '$MOD_REPLACE': initializing patching transition
|
||||
livepatch: '$MOD_REPLACE': starting patching transition
|
||||
|
@ -16,7 +16,7 @@ start_test "basic shadow variable API"
|
||||
load_mod $MOD_TEST
|
||||
unload_mod $MOD_TEST
|
||||
|
||||
check_result "% modprobe $MOD_TEST
|
||||
check_result "% insmod test_modules/$MOD_TEST.ko
|
||||
$MOD_TEST: klp_shadow_get(obj=PTR1, id=0x1234) = PTR0
|
||||
$MOD_TEST: got expected NULL result
|
||||
$MOD_TEST: shadow_ctor: PTR3 -> PTR2
|
||||
|
@ -19,7 +19,7 @@ load_lp $MOD_LIVEPATCH
|
||||
disable_lp $MOD_LIVEPATCH
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
|
||||
check_result "% modprobe $MOD_LIVEPATCH
|
||||
check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
$MOD_LIVEPATCH: pre_patch_callback: vmlinux
|
||||
@ -51,7 +51,7 @@ unload_lp $MOD_LIVEPATCH
|
||||
disable_lp $MOD_LIVEPATCH2
|
||||
unload_lp $MOD_LIVEPATCH2
|
||||
|
||||
check_result "% modprobe $MOD_LIVEPATCH
|
||||
check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
$MOD_LIVEPATCH: pre_patch_callback: vmlinux
|
||||
@ -61,7 +61,7 @@ livepatch: '$MOD_LIVEPATCH': completing patching transition
|
||||
$MOD_LIVEPATCH: post_patch_callback: vmlinux
|
||||
$MOD_LIVEPATCH: fix_console_loglevel: fixing console_loglevel
|
||||
livepatch: '$MOD_LIVEPATCH': patching complete
|
||||
% modprobe $MOD_LIVEPATCH2
|
||||
% insmod test_modules/$MOD_LIVEPATCH2.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH2'
|
||||
livepatch: '$MOD_LIVEPATCH2': initializing patching transition
|
||||
$MOD_LIVEPATCH2: pre_patch_callback: vmlinux
|
||||
@ -96,7 +96,7 @@ disable_lp $MOD_LIVEPATCH2
|
||||
unload_lp $MOD_LIVEPATCH2
|
||||
unload_lp $MOD_LIVEPATCH3
|
||||
|
||||
check_result "% modprobe $MOD_LIVEPATCH2
|
||||
check_result "% insmod test_modules/$MOD_LIVEPATCH2.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH2'
|
||||
livepatch: '$MOD_LIVEPATCH2': initializing patching transition
|
||||
$MOD_LIVEPATCH2: pre_patch_callback: vmlinux
|
||||
@ -106,7 +106,7 @@ livepatch: '$MOD_LIVEPATCH2': completing patching transition
|
||||
$MOD_LIVEPATCH2: post_patch_callback: vmlinux
|
||||
$MOD_LIVEPATCH2: fix_console_loglevel: fixing console_loglevel
|
||||
livepatch: '$MOD_LIVEPATCH2': patching complete
|
||||
% modprobe $MOD_LIVEPATCH3
|
||||
% insmod test_modules/$MOD_LIVEPATCH3.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH3'
|
||||
livepatch: '$MOD_LIVEPATCH3': initializing patching transition
|
||||
$MOD_LIVEPATCH3: pre_patch_callback: vmlinux
|
||||
@ -117,7 +117,7 @@ $MOD_LIVEPATCH3: post_patch_callback: vmlinux
|
||||
$MOD_LIVEPATCH3: fix_console_loglevel: taking over the console_loglevel change
|
||||
livepatch: '$MOD_LIVEPATCH3': patching complete
|
||||
% rmmod $MOD_LIVEPATCH2
|
||||
% modprobe $MOD_LIVEPATCH2
|
||||
% insmod test_modules/$MOD_LIVEPATCH2.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH2'
|
||||
livepatch: '$MOD_LIVEPATCH2': initializing patching transition
|
||||
$MOD_LIVEPATCH2: pre_patch_callback: vmlinux
|
||||
@ -149,7 +149,7 @@ load_failing_mod $MOD_LIVEPATCH
|
||||
disable_lp $MOD_LIVEPATCH2
|
||||
unload_lp $MOD_LIVEPATCH2
|
||||
|
||||
check_result "% modprobe $MOD_LIVEPATCH2
|
||||
check_result "% insmod test_modules/$MOD_LIVEPATCH2.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH2'
|
||||
livepatch: '$MOD_LIVEPATCH2': initializing patching transition
|
||||
$MOD_LIVEPATCH2: pre_patch_callback: vmlinux
|
||||
@ -159,9 +159,9 @@ livepatch: '$MOD_LIVEPATCH2': completing patching transition
|
||||
$MOD_LIVEPATCH2: post_patch_callback: vmlinux
|
||||
$MOD_LIVEPATCH2: fix_console_loglevel: fixing console_loglevel
|
||||
livepatch: '$MOD_LIVEPATCH2': patching complete
|
||||
% modprobe $MOD_LIVEPATCH
|
||||
% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: Livepatch patch ($MOD_LIVEPATCH) is not compatible with the already installed livepatches.
|
||||
modprobe: ERROR: could not insert '$MOD_LIVEPATCH': Invalid argument
|
||||
insmod: ERROR: could not insert module test_modules/$MOD_LIVEPATCH.ko: Invalid parameters
|
||||
% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled
|
||||
livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
|
||||
$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
|
||||
|
@ -27,7 +27,7 @@ disable_lp $MOD_LIVEPATCH
|
||||
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
|
||||
check_result "% modprobe $MOD_LIVEPATCH
|
||||
check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
livepatch: '$MOD_LIVEPATCH': starting patching transition
|
||||
@ -56,7 +56,7 @@ check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0"
|
||||
disable_lp $MOD_LIVEPATCH
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
|
||||
check_result "% modprobe test_klp_callbacks_demo
|
||||
check_result "% insmod test_modules/test_klp_callbacks_demo.ko
|
||||
livepatch: enabling patch 'test_klp_callbacks_demo'
|
||||
livepatch: 'test_klp_callbacks_demo': initializing patching transition
|
||||
test_klp_callbacks_demo: pre_patch_callback: vmlinux
|
||||
@ -64,7 +64,7 @@ livepatch: 'test_klp_callbacks_demo': starting patching transition
|
||||
livepatch: 'test_klp_callbacks_demo': completing patching transition
|
||||
test_klp_callbacks_demo: post_patch_callback: vmlinux
|
||||
livepatch: 'test_klp_callbacks_demo': patching complete
|
||||
% modprobe test_klp_callbacks_mod
|
||||
% insmod test_modules/test_klp_callbacks_mod.ko
|
||||
livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod'
|
||||
test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init
|
||||
test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init
|
||||
|
19
tools/testing/selftests/livepatch/test_modules/Makefile
Normal file
19
tools/testing/selftests/livepatch/test_modules/Makefile
Normal file
@ -0,0 +1,19 @@
|
||||
TESTMODS_DIR := $(realpath $(dir $(abspath $(lastword $(MAKEFILE_LIST)))))
|
||||
KDIR ?= /lib/modules/$(shell uname -r)/build
|
||||
|
||||
obj-m += test_klp_atomic_replace.o \
|
||||
test_klp_callbacks_busy.o \
|
||||
test_klp_callbacks_demo.o \
|
||||
test_klp_callbacks_demo2.o \
|
||||
test_klp_callbacks_mod.o \
|
||||
test_klp_livepatch.o \
|
||||
test_klp_state.o \
|
||||
test_klp_state2.o \
|
||||
test_klp_state3.o \
|
||||
test_klp_shadow_vars.o
|
||||
|
||||
modules:
|
||||
$(Q)$(MAKE) -C $(KDIR) modules KBUILD_EXTMOD=$(TESTMODS_DIR)
|
||||
|
||||
clean:
|
||||
$(Q)$(MAKE) -C $(KDIR) clean KBUILD_EXTMOD=$(TESTMODS_DIR)
|
Loading…
Reference in New Issue
Block a user