05564c29fc
livepatch test configures the system and debug environment to run tests. Some of these actions fail without root access and test dumps several permission denied messages before it exits. Fix test-state.sh to call setup_config instead of set_dynamic_debug as suggested by Petr Mladek <pmladek@suse.com> Fix it to check root uid and exit with skip code instead. Signed-off-by: Shuah Khan <skhan@linuxfoundation.org> Acked-by: Joe Lawrence <joe.lawrence@redhat.com> Reviewed-by: Petr Mladek <pmladek@suse.com> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
180 lines
7.5 KiB
Bash
Executable File
180 lines
7.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (C) 2019 SUSE
|
|
|
|
. $(dirname $0)/functions.sh
|
|
|
|
MOD_LIVEPATCH=test_klp_state
|
|
MOD_LIVEPATCH2=test_klp_state2
|
|
MOD_LIVEPATCH3=test_klp_state3
|
|
|
|
setup_config
|
|
|
|
# TEST: Loading and removing a module that modifies the system state
|
|
|
|
echo -n "TEST: system state modification ... "
|
|
dmesg -C
|
|
|
|
load_lp $MOD_LIVEPATCH
|
|
disable_lp $MOD_LIVEPATCH
|
|
unload_lp $MOD_LIVEPATCH
|
|
|
|
check_result "% modprobe $MOD_LIVEPATCH
|
|
livepatch: enabling patch '$MOD_LIVEPATCH'
|
|
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
|
$MOD_LIVEPATCH: pre_patch_callback: vmlinux
|
|
$MOD_LIVEPATCH: allocate_loglevel_state: allocating space to store console_loglevel
|
|
livepatch: '$MOD_LIVEPATCH': starting patching transition
|
|
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
|
|
% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
|
|
livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
|
|
$MOD_LIVEPATCH: pre_unpatch_callback: vmlinux
|
|
$MOD_LIVEPATCH: restore_console_loglevel: restoring console_loglevel
|
|
livepatch: '$MOD_LIVEPATCH': starting unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH': completing unpatching transition
|
|
$MOD_LIVEPATCH: post_unpatch_callback: vmlinux
|
|
$MOD_LIVEPATCH: free_loglevel_state: freeing space for the stored console_loglevel
|
|
livepatch: '$MOD_LIVEPATCH': unpatching complete
|
|
% rmmod $MOD_LIVEPATCH"
|
|
|
|
|
|
# TEST: Take over system state change by a cumulative patch
|
|
|
|
echo -n "TEST: taking over system state modification ... "
|
|
dmesg -C
|
|
|
|
load_lp $MOD_LIVEPATCH
|
|
load_lp $MOD_LIVEPATCH2
|
|
unload_lp $MOD_LIVEPATCH
|
|
disable_lp $MOD_LIVEPATCH2
|
|
unload_lp $MOD_LIVEPATCH2
|
|
|
|
check_result "% modprobe $MOD_LIVEPATCH
|
|
livepatch: enabling patch '$MOD_LIVEPATCH'
|
|
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
|
$MOD_LIVEPATCH: pre_patch_callback: vmlinux
|
|
$MOD_LIVEPATCH: allocate_loglevel_state: allocating space to store console_loglevel
|
|
livepatch: '$MOD_LIVEPATCH': starting patching transition
|
|
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
|
|
livepatch: enabling patch '$MOD_LIVEPATCH2'
|
|
livepatch: '$MOD_LIVEPATCH2': initializing patching transition
|
|
$MOD_LIVEPATCH2: pre_patch_callback: vmlinux
|
|
$MOD_LIVEPATCH2: allocate_loglevel_state: space to store console_loglevel already allocated
|
|
livepatch: '$MOD_LIVEPATCH2': starting patching transition
|
|
livepatch: '$MOD_LIVEPATCH2': completing patching transition
|
|
$MOD_LIVEPATCH2: post_patch_callback: vmlinux
|
|
$MOD_LIVEPATCH2: fix_console_loglevel: taking over the console_loglevel change
|
|
livepatch: '$MOD_LIVEPATCH2': patching complete
|
|
% rmmod $MOD_LIVEPATCH
|
|
% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled
|
|
livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
|
|
$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
|
|
$MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel
|
|
livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
|
|
$MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
|
|
$MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel
|
|
livepatch: '$MOD_LIVEPATCH2': unpatching complete
|
|
% rmmod $MOD_LIVEPATCH2"
|
|
|
|
|
|
# TEST: Take over system state change by a cumulative patch
|
|
|
|
echo -n "TEST: compatible cumulative livepatches ... "
|
|
dmesg -C
|
|
|
|
load_lp $MOD_LIVEPATCH2
|
|
load_lp $MOD_LIVEPATCH3
|
|
unload_lp $MOD_LIVEPATCH2
|
|
load_lp $MOD_LIVEPATCH2
|
|
disable_lp $MOD_LIVEPATCH2
|
|
unload_lp $MOD_LIVEPATCH2
|
|
unload_lp $MOD_LIVEPATCH3
|
|
|
|
check_result "% modprobe $MOD_LIVEPATCH2
|
|
livepatch: enabling patch '$MOD_LIVEPATCH2'
|
|
livepatch: '$MOD_LIVEPATCH2': initializing patching transition
|
|
$MOD_LIVEPATCH2: pre_patch_callback: vmlinux
|
|
$MOD_LIVEPATCH2: allocate_loglevel_state: allocating space to store console_loglevel
|
|
livepatch: '$MOD_LIVEPATCH2': starting patching transition
|
|
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
|
|
livepatch: enabling patch '$MOD_LIVEPATCH3'
|
|
livepatch: '$MOD_LIVEPATCH3': initializing patching transition
|
|
$MOD_LIVEPATCH3: pre_patch_callback: vmlinux
|
|
$MOD_LIVEPATCH3: allocate_loglevel_state: space to store console_loglevel already allocated
|
|
livepatch: '$MOD_LIVEPATCH3': starting patching transition
|
|
livepatch: '$MOD_LIVEPATCH3': completing patching transition
|
|
$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
|
|
livepatch: enabling patch '$MOD_LIVEPATCH2'
|
|
livepatch: '$MOD_LIVEPATCH2': initializing patching transition
|
|
$MOD_LIVEPATCH2: pre_patch_callback: vmlinux
|
|
$MOD_LIVEPATCH2: allocate_loglevel_state: space to store console_loglevel already allocated
|
|
livepatch: '$MOD_LIVEPATCH2': starting patching transition
|
|
livepatch: '$MOD_LIVEPATCH2': completing patching transition
|
|
$MOD_LIVEPATCH2: post_patch_callback: vmlinux
|
|
$MOD_LIVEPATCH2: fix_console_loglevel: taking over the console_loglevel change
|
|
livepatch: '$MOD_LIVEPATCH2': patching complete
|
|
% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled
|
|
livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
|
|
$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
|
|
$MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel
|
|
livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
|
|
$MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
|
|
$MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel
|
|
livepatch: '$MOD_LIVEPATCH2': unpatching complete
|
|
% rmmod $MOD_LIVEPATCH2
|
|
% rmmod $MOD_LIVEPATCH3"
|
|
|
|
|
|
# TEST: Failure caused by incompatible cumulative livepatches
|
|
|
|
echo -n "TEST: incompatible cumulative livepatches ... "
|
|
dmesg -C
|
|
|
|
load_lp $MOD_LIVEPATCH2
|
|
load_failing_mod $MOD_LIVEPATCH
|
|
disable_lp $MOD_LIVEPATCH2
|
|
unload_lp $MOD_LIVEPATCH2
|
|
|
|
check_result "% modprobe $MOD_LIVEPATCH2
|
|
livepatch: enabling patch '$MOD_LIVEPATCH2'
|
|
livepatch: '$MOD_LIVEPATCH2': initializing patching transition
|
|
$MOD_LIVEPATCH2: pre_patch_callback: vmlinux
|
|
$MOD_LIVEPATCH2: allocate_loglevel_state: allocating space to store console_loglevel
|
|
livepatch: '$MOD_LIVEPATCH2': starting patching transition
|
|
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
|
|
livepatch: Livepatch patch ($MOD_LIVEPATCH) is not compatible with the already installed livepatches.
|
|
modprobe: ERROR: could not insert '$MOD_LIVEPATCH': Invalid argument
|
|
% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled
|
|
livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
|
|
$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
|
|
$MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel
|
|
livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
|
|
$MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
|
|
$MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel
|
|
livepatch: '$MOD_LIVEPATCH2': unpatching complete
|
|
% rmmod $MOD_LIVEPATCH2"
|
|
|
|
exit 0
|