|
| 1 | +#!/bin/bash |
| 2 | +# SPDX-License-Identifier: GPL-2.0 |
| 3 | +# Copyright (C) 2022 Song Liu <[email protected]> |
| 4 | + |
| 5 | +. $(dirname $0)/functions.sh |
| 6 | + |
| 7 | +MOD_LIVEPATCH=test_klp_livepatch |
| 8 | + |
| 9 | +setup_config |
| 10 | + |
| 11 | +# - load a livepatch and verifies the sysfs entries work as expected |
| 12 | + |
| 13 | +start_test "sysfs test" |
| 14 | + |
| 15 | +load_lp $MOD_LIVEPATCH |
| 16 | + |
| 17 | +check_sysfs_rights "$MOD_LIVEPATCH" "" "drwxr-xr-x" |
| 18 | +check_sysfs_rights "$MOD_LIVEPATCH" "enabled" "-rw-r--r--" |
| 19 | +check_sysfs_value "$MOD_LIVEPATCH" "enabled" "1" |
| 20 | +check_sysfs_rights "$MOD_LIVEPATCH" "force" "--w-------" |
| 21 | +check_sysfs_rights "$MOD_LIVEPATCH" "transition" "-r--r--r--" |
| 22 | +check_sysfs_value "$MOD_LIVEPATCH" "transition" "0" |
| 23 | +check_sysfs_rights "$MOD_LIVEPATCH" "vmlinux/patched" "-r--r--r--" |
| 24 | +check_sysfs_value "$MOD_LIVEPATCH" "vmlinux/patched" "1" |
| 25 | + |
| 26 | +disable_lp $MOD_LIVEPATCH |
| 27 | + |
| 28 | +unload_lp $MOD_LIVEPATCH |
| 29 | + |
| 30 | +check_result "% modprobe $MOD_LIVEPATCH |
| 31 | +livepatch: enabling patch '$MOD_LIVEPATCH' |
| 32 | +livepatch: '$MOD_LIVEPATCH': initializing patching transition |
| 33 | +livepatch: '$MOD_LIVEPATCH': starting patching transition |
| 34 | +livepatch: '$MOD_LIVEPATCH': completing patching transition |
| 35 | +livepatch: '$MOD_LIVEPATCH': patching complete |
| 36 | +% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled |
| 37 | +livepatch: '$MOD_LIVEPATCH': initializing unpatching transition |
| 38 | +livepatch: '$MOD_LIVEPATCH': starting unpatching transition |
| 39 | +livepatch: '$MOD_LIVEPATCH': completing unpatching transition |
| 40 | +livepatch: '$MOD_LIVEPATCH': unpatching complete |
| 41 | +% rmmod $MOD_LIVEPATCH" |
| 42 | + |
| 43 | +start_test "sysfs test object/patched" |
| 44 | + |
| 45 | +MOD_LIVEPATCH=test_klp_callbacks_demo |
| 46 | +MOD_TARGET=test_klp_callbacks_mod |
| 47 | +load_lp $MOD_LIVEPATCH |
| 48 | + |
| 49 | +# check the "patch" file changes as target module loads/unloads |
| 50 | +check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0" |
| 51 | +load_mod $MOD_TARGET |
| 52 | +check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "1" |
| 53 | +unload_mod $MOD_TARGET |
| 54 | +check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0" |
| 55 | + |
| 56 | +disable_lp $MOD_LIVEPATCH |
| 57 | +unload_lp $MOD_LIVEPATCH |
| 58 | + |
| 59 | +check_result "% modprobe test_klp_callbacks_demo |
| 60 | +livepatch: enabling patch 'test_klp_callbacks_demo' |
| 61 | +livepatch: 'test_klp_callbacks_demo': initializing patching transition |
| 62 | +test_klp_callbacks_demo: pre_patch_callback: vmlinux |
| 63 | +livepatch: 'test_klp_callbacks_demo': starting patching transition |
| 64 | +livepatch: 'test_klp_callbacks_demo': completing patching transition |
| 65 | +test_klp_callbacks_demo: post_patch_callback: vmlinux |
| 66 | +livepatch: 'test_klp_callbacks_demo': patching complete |
| 67 | +% modprobe test_klp_callbacks_mod |
| 68 | +livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' |
| 69 | +test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init |
| 70 | +test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init |
| 71 | +test_klp_callbacks_mod: test_klp_callbacks_mod_init |
| 72 | +% rmmod test_klp_callbacks_mod |
| 73 | +test_klp_callbacks_mod: test_klp_callbacks_mod_exit |
| 74 | +test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away |
| 75 | +livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' |
| 76 | +test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away |
| 77 | +% echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled |
| 78 | +livepatch: 'test_klp_callbacks_demo': initializing unpatching transition |
| 79 | +test_klp_callbacks_demo: pre_unpatch_callback: vmlinux |
| 80 | +livepatch: 'test_klp_callbacks_demo': starting unpatching transition |
| 81 | +livepatch: 'test_klp_callbacks_demo': completing unpatching transition |
| 82 | +test_klp_callbacks_demo: post_unpatch_callback: vmlinux |
| 83 | +livepatch: 'test_klp_callbacks_demo': unpatching complete |
| 84 | +% rmmod test_klp_callbacks_demo" |
| 85 | + |
| 86 | +exit 0 |
0 commit comments