226 lines · 8.5 KB · Shell
RawDownload
#!/bin/bash# SPDX-License-Identifier: GPL-2.0# Copyright (C) 2022 Song Liu <song@kernel.org> . $(dirname $0)/functions.sh MOD_LIVEPATCH=test_klp_livepatchMOD_LIVEPATCH2=test_klp_callbacks_demoMOD_LIVEPATCH3=test_klp_syscall HAS_PATCH_ATTR=0HAS_REPLACE_ATTR=0HAS_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=1fi if does_sysfs_exist "$MOD_LIVEPATCH" "replace"; then	check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"	HAS_REPLACE_ATTR=1fi 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=1fi disable_lp $MOD_LIVEPATCH unload_lp $MOD_LIVEPATCH check_result "% insmod test_modules/$MOD_LIVEPATCH.kolivepatch: enabling patch '$MOD_LIVEPATCH'livepatch: '$MOD_LIVEPATCH': initializing patching transitionlivepatch: '$MOD_LIVEPATCH': starting patching transitionlivepatch: '$MOD_LIVEPATCH': completing patching transitionlivepatch: '$MOD_LIVEPATCH': patching complete% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabledlivepatch: '$MOD_LIVEPATCH': initializing unpatching transitionlivepatch: '$MOD_LIVEPATCH': starting unpatching transitionlivepatch: '$MOD_LIVEPATCH': completing unpatching transitionlivepatch: '$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.kolivepatch: enabling patch '$MOD_LIVEPATCH2'livepatch: '$MOD_LIVEPATCH2': initializing patching transition$MOD_LIVEPATCH2: pre_patch_callback: vmlinuxlivepatch: '$MOD_LIVEPATCH2': starting patching transitionlivepatch: '$MOD_LIVEPATCH2': completing patching transition$MOD_LIVEPATCH2: post_patch_callback: vmlinuxlivepatch: '$MOD_LIVEPATCH2': patching complete% insmod test_modules/$MOD_TARGET.kolivepatch: 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 awaylivepatch: 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/enabledlivepatch: '$MOD_LIVEPATCH2': initializing unpatching transition$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinuxlivepatch: '$MOD_LIVEPATCH2': starting unpatching transitionlivepatch: '$MOD_LIVEPATCH2': completing unpatching transition$MOD_LIVEPATCH2: post_unpatch_callback: vmlinuxlivepatch: '$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=1livepatch: enabling patch '$MOD_ATOMIC_REPLACE'livepatch: '$MOD_ATOMIC_REPLACE': initializing patching transitionlivepatch: '$MOD_ATOMIC_REPLACE': starting patching transitionlivepatch: '$MOD_ATOMIC_REPLACE': completing patching transitionlivepatch: '$MOD_ATOMIC_REPLACE': patching complete% echo 0 > $SYSFS_KLP_DIR/$MOD_ATOMIC_REPLACE/enabledlivepatch: '$MOD_ATOMIC_REPLACE': initializing unpatching transitionlivepatch: '$MOD_ATOMIC_REPLACE': starting unpatching transitionlivepatch: '$MOD_ATOMIC_REPLACE': completing unpatching transitionlivepatch: '$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=0livepatch: enabling patch '$MOD_ATOMIC_REPLACE'livepatch: '$MOD_ATOMIC_REPLACE': initializing patching transitionlivepatch: '$MOD_ATOMIC_REPLACE': starting patching transitionlivepatch: '$MOD_ATOMIC_REPLACE': completing patching transitionlivepatch: '$MOD_ATOMIC_REPLACE': patching complete% echo 0 > $SYSFS_KLP_DIR/$MOD_ATOMIC_REPLACE/enabledlivepatch: '$MOD_ATOMIC_REPLACE': initializing unpatching transitionlivepatch: '$MOD_ATOMIC_REPLACE': starting unpatching transitionlivepatch: '$MOD_ATOMIC_REPLACE': completing unpatching transitionlivepatch: '$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.kolivepatch: enabling patch '$MOD_LIVEPATCH'livepatch: '$MOD_LIVEPATCH': initializing patching transitionlivepatch: '$MOD_LIVEPATCH': starting patching transitionlivepatch: '$MOD_LIVEPATCH': completing patching transitionlivepatch: '$MOD_LIVEPATCH': patching complete% insmod test_modules/$MOD_LIVEPATCH2.kolivepatch: enabling patch '$MOD_LIVEPATCH2'livepatch: '$MOD_LIVEPATCH2': initializing patching transition$MOD_LIVEPATCH2: pre_patch_callback: vmlinuxlivepatch: '$MOD_LIVEPATCH2': starting patching transitionlivepatch: '$MOD_LIVEPATCH2': completing patching transition$MOD_LIVEPATCH2: post_patch_callback: vmlinuxlivepatch: '$MOD_LIVEPATCH2': patching complete% insmod test_modules/$MOD_LIVEPATCH3.kolivepatch: enabling patch '$MOD_LIVEPATCH3'livepatch: '$MOD_LIVEPATCH3': initializing patching transitionlivepatch: '$MOD_LIVEPATCH3': starting patching transitionlivepatch: '$MOD_LIVEPATCH3': completing patching transitionlivepatch: '$MOD_LIVEPATCH3': patching complete% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH2/enabledlivepatch: '$MOD_LIVEPATCH2': initializing unpatching transition$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinuxlivepatch: '$MOD_LIVEPATCH2': starting unpatching transitionlivepatch: '$MOD_LIVEPATCH2': completing unpatching transition$MOD_LIVEPATCH2: post_unpatch_callback: vmlinuxlivepatch: '$MOD_LIVEPATCH2': unpatching complete% rmmod $MOD_LIVEPATCH2% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH3/enabledlivepatch: '$MOD_LIVEPATCH3': initializing unpatching transitionlivepatch: '$MOD_LIVEPATCH3': starting unpatching transitionlivepatch: '$MOD_LIVEPATCH3': completing unpatching transitionlivepatch: '$MOD_LIVEPATCH3': unpatching complete% rmmod $MOD_LIVEPATCH3% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabledlivepatch: '$MOD_LIVEPATCH': initializing unpatching transitionlivepatch: '$MOD_LIVEPATCH': starting unpatching transitionlivepatch: '$MOD_LIVEPATCH': completing unpatching transitionlivepatch: '$MOD_LIVEPATCH': unpatching complete% rmmod $MOD_LIVEPATCH"fi exit 0