| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- #!/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
- 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" "replace" "-r--r--r--"
- check_sysfs_rights "$MOD_LIVEPATCH" "stack_order" "-r--r--r--"
- check_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1"
- check_sysfs_rights "$MOD_LIVEPATCH" "transition" "-r--r--r--"
- check_sysfs_value "$MOD_LIVEPATCH" "transition" "0"
- check_sysfs_rights "$MOD_LIVEPATCH" "vmlinux/patched" "-r--r--r--"
- check_sysfs_value "$MOD_LIVEPATCH" "vmlinux/patched" "1"
- 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"
- start_test "sysfs test object/patched"
- MOD_LIVEPATCH=test_klp_callbacks_demo
- MOD_TARGET=test_klp_callbacks_mod
- load_lp $MOD_LIVEPATCH
- # check the "patch" file changes as target module loads/unloads
- check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0"
- load_mod $MOD_TARGET
- check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "1"
- unload_mod $MOD_TARGET
- check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0"
- disable_lp $MOD_LIVEPATCH
- unload_lp $MOD_LIVEPATCH
- 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
- 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
- % 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
- test_klp_callbacks_mod: test_klp_callbacks_mod_init
- % rmmod test_klp_callbacks_mod
- test_klp_callbacks_mod: test_klp_callbacks_mod_exit
- test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away
- livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod'
- test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away
- % echo 0 > $SYSFS_KLP_DIR/test_klp_callbacks_demo/enabled
- livepatch: 'test_klp_callbacks_demo': initializing unpatching transition
- test_klp_callbacks_demo: pre_unpatch_callback: vmlinux
- livepatch: 'test_klp_callbacks_demo': starting unpatching transition
- livepatch: 'test_klp_callbacks_demo': completing unpatching transition
- test_klp_callbacks_demo: post_unpatch_callback: vmlinux
- livepatch: 'test_klp_callbacks_demo': unpatching complete
- % rmmod test_klp_callbacks_demo"
- start_test "sysfs test replace enabled"
- MOD_LIVEPATCH=test_klp_atomic_replace
- load_lp $MOD_LIVEPATCH replace=1
- check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
- check_sysfs_value "$MOD_LIVEPATCH" "replace" "1"
- disable_lp $MOD_LIVEPATCH
- unload_lp $MOD_LIVEPATCH
- check_result "% insmod test_modules/$MOD_LIVEPATCH.ko replace=1
- 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"
- start_test "sysfs test replace disabled"
- load_lp $MOD_LIVEPATCH replace=0
- check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
- check_sysfs_value "$MOD_LIVEPATCH" "replace" "0"
- disable_lp $MOD_LIVEPATCH
- unload_lp $MOD_LIVEPATCH
- check_result "% insmod test_modules/$MOD_LIVEPATCH.ko replace=0
- 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"
- 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"
- exit 0
|