35c9e74cff
Livepatch selftests currently save the current dynamic debug config and tweak it for the selftests. The config is restored at the end. Make the infrastructure generic, so that more variables can be saved and restored. Link: http://lkml.kernel.org/r/20191016113316.13415-3-mbenes@suse.cz Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com> Signed-off-by: Miroslav Benes <mbenes@suse.cz> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
169 lines
5.6 KiB
Bash
Executable File
169 lines
5.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (C) 2018 Joe Lawrence <joe.lawrence@redhat.com>
|
|
|
|
. $(dirname $0)/functions.sh
|
|
|
|
MOD_LIVEPATCH=test_klp_livepatch
|
|
MOD_REPLACE=test_klp_atomic_replace
|
|
|
|
setup_config
|
|
|
|
|
|
# TEST: basic function patching
|
|
# - load a livepatch that modifies the output from /proc/cmdline and
|
|
# verify correct behavior
|
|
# - unload the livepatch and make sure the patch was removed
|
|
|
|
echo -n "TEST: basic function patching ... "
|
|
dmesg -C
|
|
|
|
load_lp $MOD_LIVEPATCH
|
|
|
|
if [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH: this has been live patched" ]] ; then
|
|
echo -e "FAIL\n\n"
|
|
die "livepatch kselftest(s) failed"
|
|
fi
|
|
|
|
disable_lp $MOD_LIVEPATCH
|
|
unload_lp $MOD_LIVEPATCH
|
|
|
|
if [[ "$(cat /proc/cmdline)" == "$MOD_LIVEPATCH: this has been live patched" ]] ; then
|
|
echo -e "FAIL\n\n"
|
|
die "livepatch kselftest(s) failed"
|
|
fi
|
|
|
|
check_result "% modprobe $MOD_LIVEPATCH
|
|
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
|
|
% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
|
|
livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH': starting unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH': completing unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH': unpatching complete
|
|
% rmmod $MOD_LIVEPATCH"
|
|
|
|
|
|
# TEST: multiple livepatches
|
|
# - load a livepatch that modifies the output from /proc/cmdline and
|
|
# verify correct behavior
|
|
# - load another livepatch and verify that both livepatches are active
|
|
# - unload the second livepatch and verify that the first is still active
|
|
# - unload the first livepatch and verify none are active
|
|
|
|
echo -n "TEST: multiple livepatches ... "
|
|
dmesg -C
|
|
|
|
load_lp $MOD_LIVEPATCH
|
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg
|
|
grep 'live patched' /proc/meminfo > /dev/kmsg
|
|
|
|
load_lp $MOD_REPLACE replace=0
|
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg
|
|
grep 'live patched' /proc/meminfo > /dev/kmsg
|
|
|
|
disable_lp $MOD_REPLACE
|
|
unload_lp $MOD_REPLACE
|
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg
|
|
grep 'live patched' /proc/meminfo > /dev/kmsg
|
|
|
|
disable_lp $MOD_LIVEPATCH
|
|
unload_lp $MOD_LIVEPATCH
|
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg
|
|
grep 'live patched' /proc/meminfo > /dev/kmsg
|
|
|
|
check_result "% modprobe $MOD_LIVEPATCH
|
|
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
|
|
livepatch: enabling patch '$MOD_REPLACE'
|
|
livepatch: '$MOD_REPLACE': initializing patching transition
|
|
livepatch: '$MOD_REPLACE': starting patching transition
|
|
livepatch: '$MOD_REPLACE': completing patching transition
|
|
livepatch: '$MOD_REPLACE': patching complete
|
|
$MOD_LIVEPATCH: this has been live patched
|
|
$MOD_REPLACE: this has been live patched
|
|
% echo 0 > /sys/kernel/livepatch/$MOD_REPLACE/enabled
|
|
livepatch: '$MOD_REPLACE': initializing unpatching transition
|
|
livepatch: '$MOD_REPLACE': starting unpatching transition
|
|
livepatch: '$MOD_REPLACE': completing unpatching transition
|
|
livepatch: '$MOD_REPLACE': unpatching complete
|
|
% rmmod $MOD_REPLACE
|
|
$MOD_LIVEPATCH: this has been live patched
|
|
% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
|
|
livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH': starting unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH': completing unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH': unpatching complete
|
|
% rmmod $MOD_LIVEPATCH"
|
|
|
|
|
|
# TEST: atomic replace livepatch
|
|
# - load a livepatch that modifies the output from /proc/cmdline and
|
|
# verify correct behavior
|
|
# - load an atomic replace livepatch and verify that only the second is active
|
|
# - remove the first livepatch and verify that the atomic replace livepatch
|
|
# is still active
|
|
# - remove the atomic replace livepatch and verify that none are active
|
|
|
|
echo -n "TEST: atomic replace livepatch ... "
|
|
dmesg -C
|
|
|
|
load_lp $MOD_LIVEPATCH
|
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg
|
|
grep 'live patched' /proc/meminfo > /dev/kmsg
|
|
|
|
load_lp $MOD_REPLACE replace=1
|
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg
|
|
grep 'live patched' /proc/meminfo > /dev/kmsg
|
|
|
|
unload_lp $MOD_LIVEPATCH
|
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg
|
|
grep 'live patched' /proc/meminfo > /dev/kmsg
|
|
|
|
disable_lp $MOD_REPLACE
|
|
unload_lp $MOD_REPLACE
|
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg
|
|
grep 'live patched' /proc/meminfo > /dev/kmsg
|
|
|
|
check_result "% modprobe $MOD_LIVEPATCH
|
|
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
|
|
livepatch: enabling patch '$MOD_REPLACE'
|
|
livepatch: '$MOD_REPLACE': initializing patching transition
|
|
livepatch: '$MOD_REPLACE': starting patching transition
|
|
livepatch: '$MOD_REPLACE': completing patching transition
|
|
livepatch: '$MOD_REPLACE': patching complete
|
|
$MOD_REPLACE: this has been live patched
|
|
% rmmod $MOD_LIVEPATCH
|
|
$MOD_REPLACE: this has been live patched
|
|
% echo 0 > /sys/kernel/livepatch/$MOD_REPLACE/enabled
|
|
livepatch: '$MOD_REPLACE': initializing unpatching transition
|
|
livepatch: '$MOD_REPLACE': starting unpatching transition
|
|
livepatch: '$MOD_REPLACE': completing unpatching transition
|
|
livepatch: '$MOD_REPLACE': unpatching complete
|
|
% rmmod $MOD_REPLACE"
|
|
|
|
|
|
exit 0
|