Merge tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm
[linux-block.git] / tools / testing / selftests / livepatch / test-sysfs.sh
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (C) 2022 Song Liu <song@kernel.org>
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