mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-08-09 06:14:34 +02:00
The commit 3dae09de40 ("livepatch: Add stack_order sysfs attribute"),
merged in v6.14, introduced a new sysfs attribute.
In order to run the selftests on older kernels, check if given kernel
has support for the attribute. If the attribute is not supported, skip
the checks.
Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Acked-by: Joe Lawrence <joe.lawrence@redhat.com>
Link: https://patch.msgid.link/20260504-lp-tests-old-fixes-v5-6-0be26d94ab9a@suse.com
Signed-off-by: Petr Mladek <pmladek@suse.com>
227 lines
8.5 KiB
Bash
Executable File
227 lines
8.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (C) 2022 Song Liu <song@kernel.org>
|
|
|
|
. $(dirname $0)/functions.sh
|
|
|
|
MOD_LIVEPATCH=test_klp_livepatch
|
|
MOD_LIVEPATCH2=test_klp_callbacks_demo
|
|
MOD_LIVEPATCH3=test_klp_syscall
|
|
|
|
HAS_PATCH_ATTR=0
|
|
HAS_REPLACE_ATTR=0
|
|
HAS_STACK_ORDER_ATTR=0
|
|
|
|
setup_config
|
|
|
|
# - load a livepatch and verifies the sysfs entries work as expected
|
|
|
|
start_test "sysfs test"
|
|
|
|
load_lp $MOD_LIVEPATCH
|
|
|
|
check_sysfs_rights "$MOD_LIVEPATCH" "" "drwxr-xr-x"
|
|
check_sysfs_rights "$MOD_LIVEPATCH" "enabled" "-rw-r--r--"
|
|
check_sysfs_value "$MOD_LIVEPATCH" "enabled" "1"
|
|
check_sysfs_rights "$MOD_LIVEPATCH" "force" "--w-------"
|
|
check_sysfs_rights "$MOD_LIVEPATCH" "transition" "-r--r--r--"
|
|
check_sysfs_value "$MOD_LIVEPATCH" "transition" "0"
|
|
|
|
if does_sysfs_exist "$MOD_LIVEPATCH/vmlinux" "patched"; then
|
|
check_sysfs_rights "$MOD_LIVEPATCH" "vmlinux/patched" "-r--r--r--"
|
|
check_sysfs_value "$MOD_LIVEPATCH" "vmlinux/patched" "1"
|
|
HAS_PATCH_ATTR=1
|
|
fi
|
|
|
|
if does_sysfs_exist "$MOD_LIVEPATCH" "replace"; then
|
|
check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
|
|
HAS_REPLACE_ATTR=1
|
|
fi
|
|
|
|
if does_sysfs_exist "$MOD_LIVEPATCH" "stack_order"; then
|
|
check_sysfs_rights "$MOD_LIVEPATCH" "stack_order" "-r--r--r--"
|
|
check_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1"
|
|
HAS_STACK_ORDER_ATTR=1
|
|
fi
|
|
|
|
disable_lp $MOD_LIVEPATCH
|
|
|
|
unload_lp $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
|
|
% echo 0 > $SYSFS_KLP_DIR/$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"
|
|
|
|
if [[ "$HAS_PATCH_ATTR" == "1" ]]; then
|
|
start_test "sysfs test object/patched"
|
|
|
|
MOD_TARGET=test_klp_callbacks_mod
|
|
load_lp $MOD_LIVEPATCH2
|
|
|
|
# check the "patch" file changes as target module loads/unloads
|
|
check_sysfs_value "$MOD_LIVEPATCH2" "$MOD_TARGET/patched" "0"
|
|
load_mod $MOD_TARGET
|
|
check_sysfs_value "$MOD_LIVEPATCH2" "$MOD_TARGET/patched" "1"
|
|
unload_mod $MOD_TARGET
|
|
check_sysfs_value "$MOD_LIVEPATCH2" "$MOD_TARGET/patched" "0"
|
|
|
|
disable_lp $MOD_LIVEPATCH2
|
|
unload_lp $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
|
|
livepatch: '$MOD_LIVEPATCH2': starting patching transition
|
|
livepatch: '$MOD_LIVEPATCH2': completing patching transition
|
|
$MOD_LIVEPATCH2: post_patch_callback: vmlinux
|
|
livepatch: '$MOD_LIVEPATCH2': patching complete
|
|
% insmod test_modules/$MOD_TARGET.ko
|
|
livepatch: applying patch '$MOD_LIVEPATCH2' to loading module '$MOD_TARGET'
|
|
$MOD_LIVEPATCH2: pre_patch_callback: $MOD_TARGET -> [MODULE_STATE_COMING] Full formed, running module_init
|
|
$MOD_LIVEPATCH2: post_patch_callback: $MOD_TARGET -> [MODULE_STATE_COMING] Full formed, running module_init
|
|
$MOD_TARGET: test_klp_callbacks_mod_init
|
|
% rmmod $MOD_TARGET
|
|
$MOD_TARGET: test_klp_callbacks_mod_exit
|
|
$MOD_LIVEPATCH2: pre_unpatch_callback: $MOD_TARGET -> [MODULE_STATE_GOING] Going away
|
|
livepatch: reverting patch '$MOD_LIVEPATCH2' on unloading module '$MOD_TARGET'
|
|
$MOD_LIVEPATCH2: post_unpatch_callback: $MOD_TARGET -> [MODULE_STATE_GOING] Going away
|
|
% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH2/enabled
|
|
livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
|
|
$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
|
|
livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
|
|
$MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
|
|
livepatch: '$MOD_LIVEPATCH2': unpatching complete
|
|
% rmmod $MOD_LIVEPATCH2"
|
|
fi
|
|
|
|
if [[ "$HAS_REPLACE_ATTR" == "1" ]]; then
|
|
start_test "sysfs test replace enabled"
|
|
|
|
MOD_ATOMIC_REPLACE=test_klp_atomic_replace
|
|
load_lp $MOD_ATOMIC_REPLACE replace=1
|
|
|
|
check_sysfs_rights "$MOD_ATOMIC_REPLACE" "replace" "-r--r--r--"
|
|
check_sysfs_value "$MOD_ATOMIC_REPLACE" "replace" "1"
|
|
|
|
disable_lp $MOD_ATOMIC_REPLACE
|
|
unload_lp $MOD_ATOMIC_REPLACE
|
|
|
|
check_result "% insmod test_modules/$MOD_ATOMIC_REPLACE.ko replace=1
|
|
livepatch: enabling patch '$MOD_ATOMIC_REPLACE'
|
|
livepatch: '$MOD_ATOMIC_REPLACE': initializing patching transition
|
|
livepatch: '$MOD_ATOMIC_REPLACE': starting patching transition
|
|
livepatch: '$MOD_ATOMIC_REPLACE': completing patching transition
|
|
livepatch: '$MOD_ATOMIC_REPLACE': patching complete
|
|
% echo 0 > $SYSFS_KLP_DIR/$MOD_ATOMIC_REPLACE/enabled
|
|
livepatch: '$MOD_ATOMIC_REPLACE': initializing unpatching transition
|
|
livepatch: '$MOD_ATOMIC_REPLACE': starting unpatching transition
|
|
livepatch: '$MOD_ATOMIC_REPLACE': completing unpatching transition
|
|
livepatch: '$MOD_ATOMIC_REPLACE': unpatching complete
|
|
% rmmod $MOD_ATOMIC_REPLACE"
|
|
|
|
start_test "sysfs test replace disabled"
|
|
|
|
load_lp $MOD_ATOMIC_REPLACE replace=0
|
|
|
|
check_sysfs_rights "$MOD_ATOMIC_REPLACE" "replace" "-r--r--r--"
|
|
check_sysfs_value "$MOD_ATOMIC_REPLACE" "replace" "0"
|
|
|
|
disable_lp $MOD_ATOMIC_REPLACE
|
|
unload_lp $MOD_ATOMIC_REPLACE
|
|
|
|
check_result "% insmod test_modules/$MOD_ATOMIC_REPLACE.ko replace=0
|
|
livepatch: enabling patch '$MOD_ATOMIC_REPLACE'
|
|
livepatch: '$MOD_ATOMIC_REPLACE': initializing patching transition
|
|
livepatch: '$MOD_ATOMIC_REPLACE': starting patching transition
|
|
livepatch: '$MOD_ATOMIC_REPLACE': completing patching transition
|
|
livepatch: '$MOD_ATOMIC_REPLACE': patching complete
|
|
% echo 0 > $SYSFS_KLP_DIR/$MOD_ATOMIC_REPLACE/enabled
|
|
livepatch: '$MOD_ATOMIC_REPLACE': initializing unpatching transition
|
|
livepatch: '$MOD_ATOMIC_REPLACE': starting unpatching transition
|
|
livepatch: '$MOD_ATOMIC_REPLACE': completing unpatching transition
|
|
livepatch: '$MOD_ATOMIC_REPLACE': unpatching complete
|
|
% rmmod $MOD_ATOMIC_REPLACE"
|
|
fi
|
|
|
|
if [[ "$HAS_STACK_ORDER_ATTR" == "1" ]]; then
|
|
start_test "sysfs test stack_order value"
|
|
|
|
load_lp $MOD_LIVEPATCH
|
|
|
|
check_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1"
|
|
|
|
load_lp $MOD_LIVEPATCH2
|
|
|
|
check_sysfs_value "$MOD_LIVEPATCH2" "stack_order" "2"
|
|
|
|
load_lp $MOD_LIVEPATCH3
|
|
|
|
check_sysfs_value "$MOD_LIVEPATCH3" "stack_order" "3"
|
|
|
|
disable_lp $MOD_LIVEPATCH2
|
|
unload_lp $MOD_LIVEPATCH2
|
|
|
|
check_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1"
|
|
check_sysfs_value "$MOD_LIVEPATCH3" "stack_order" "2"
|
|
|
|
disable_lp $MOD_LIVEPATCH3
|
|
unload_lp $MOD_LIVEPATCH3
|
|
|
|
disable_lp $MOD_LIVEPATCH
|
|
unload_lp $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
|
|
% insmod test_modules/$MOD_LIVEPATCH2.ko
|
|
livepatch: enabling patch '$MOD_LIVEPATCH2'
|
|
livepatch: '$MOD_LIVEPATCH2': initializing patching transition
|
|
$MOD_LIVEPATCH2: pre_patch_callback: vmlinux
|
|
livepatch: '$MOD_LIVEPATCH2': starting patching transition
|
|
livepatch: '$MOD_LIVEPATCH2': completing patching transition
|
|
$MOD_LIVEPATCH2: post_patch_callback: vmlinux
|
|
livepatch: '$MOD_LIVEPATCH2': patching complete
|
|
% insmod test_modules/$MOD_LIVEPATCH3.ko
|
|
livepatch: enabling patch '$MOD_LIVEPATCH3'
|
|
livepatch: '$MOD_LIVEPATCH3': initializing patching transition
|
|
livepatch: '$MOD_LIVEPATCH3': starting patching transition
|
|
livepatch: '$MOD_LIVEPATCH3': completing patching transition
|
|
livepatch: '$MOD_LIVEPATCH3': patching complete
|
|
% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH2/enabled
|
|
livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
|
|
$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
|
|
livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
|
|
$MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
|
|
livepatch: '$MOD_LIVEPATCH2': unpatching complete
|
|
% rmmod $MOD_LIVEPATCH2
|
|
% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH3/enabled
|
|
livepatch: '$MOD_LIVEPATCH3': initializing unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH3': starting unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH3': completing unpatching transition
|
|
livepatch: '$MOD_LIVEPATCH3': unpatching complete
|
|
% rmmod $MOD_LIVEPATCH3
|
|
% echo 0 > $SYSFS_KLP_DIR/$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"
|
|
fi
|
|
|
|
exit 0
|