1ff1b80ecSSong Liu#!/bin/bash
2ff1b80ecSSong Liu# SPDX-License-Identifier: GPL-2.0
3ff1b80ecSSong Liu# Copyright (C) 2022 Song Liu <[email protected]>
4ff1b80ecSSong Liu
5ff1b80ecSSong Liu. $(dirname $0)/functions.sh
6ff1b80ecSSong Liu
7ff1b80ecSSong LiuMOD_LIVEPATCH=test_klp_livepatch
8*ed2ec63dSWardenjohnMOD_LIVEPATCH2=test_klp_callbacks_demo
9*ed2ec63dSWardenjohnMOD_LIVEPATCH3=test_klp_syscall
10ff1b80ecSSong Liu
11ff1b80ecSSong Liusetup_config
12ff1b80ecSSong Liu
13ff1b80ecSSong Liu# - load a livepatch and verifies the sysfs entries work as expected
14ff1b80ecSSong Liu
15ff1b80ecSSong Liustart_test "sysfs test"
16ff1b80ecSSong Liu
17ff1b80ecSSong Liuload_lp $MOD_LIVEPATCH
18ff1b80ecSSong Liu
19ff1b80ecSSong Liucheck_sysfs_rights "$MOD_LIVEPATCH" "" "drwxr-xr-x"
20ff1b80ecSSong Liucheck_sysfs_rights "$MOD_LIVEPATCH" "enabled" "-rw-r--r--"
21ff1b80ecSSong Liucheck_sysfs_value  "$MOD_LIVEPATCH" "enabled" "1"
22ff1b80ecSSong Liucheck_sysfs_rights "$MOD_LIVEPATCH" "force" "--w-------"
2340f9caa7SYafang Shaocheck_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
24*ed2ec63dSWardenjohncheck_sysfs_rights "$MOD_LIVEPATCH" "stack_order" "-r--r--r--"
25*ed2ec63dSWardenjohncheck_sysfs_value  "$MOD_LIVEPATCH" "stack_order" "1"
26ff1b80ecSSong Liucheck_sysfs_rights "$MOD_LIVEPATCH" "transition" "-r--r--r--"
27ff1b80ecSSong Liucheck_sysfs_value  "$MOD_LIVEPATCH" "transition" "0"
28ff1b80ecSSong Liucheck_sysfs_rights "$MOD_LIVEPATCH" "vmlinux/patched" "-r--r--r--"
29ff1b80ecSSong Liucheck_sysfs_value  "$MOD_LIVEPATCH" "vmlinux/patched" "1"
30ff1b80ecSSong Liu
31ff1b80ecSSong Liudisable_lp $MOD_LIVEPATCH
32ff1b80ecSSong Liu
33ff1b80ecSSong Liuunload_lp $MOD_LIVEPATCH
34ff1b80ecSSong Liu
35c4bbe83dSMarcos Paulo de Souzacheck_result "% insmod test_modules/$MOD_LIVEPATCH.ko
36ff1b80ecSSong Liulivepatch: enabling patch '$MOD_LIVEPATCH'
37ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': initializing patching transition
38ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': starting patching transition
39ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': completing patching transition
40ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': patching complete
41637c7309SMichael Vetter% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled
42ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': initializing unpatching transition
43ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': starting unpatching transition
44ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': completing unpatching transition
45ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': unpatching complete
46ff1b80ecSSong Liu% rmmod $MOD_LIVEPATCH"
47ff1b80ecSSong Liu
48ff1b80ecSSong Liustart_test "sysfs test object/patched"
49ff1b80ecSSong Liu
50ff1b80ecSSong LiuMOD_LIVEPATCH=test_klp_callbacks_demo
51ff1b80ecSSong LiuMOD_TARGET=test_klp_callbacks_mod
52ff1b80ecSSong Liuload_lp $MOD_LIVEPATCH
53ff1b80ecSSong Liu
54ff1b80ecSSong Liu# check the "patch" file changes as target module loads/unloads
55ff1b80ecSSong Liucheck_sysfs_value  "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0"
56ff1b80ecSSong Liuload_mod $MOD_TARGET
57ff1b80ecSSong Liucheck_sysfs_value  "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "1"
58ff1b80ecSSong Liuunload_mod $MOD_TARGET
59ff1b80ecSSong Liucheck_sysfs_value  "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0"
60ff1b80ecSSong Liu
61ff1b80ecSSong Liudisable_lp $MOD_LIVEPATCH
62ff1b80ecSSong Liuunload_lp $MOD_LIVEPATCH
63ff1b80ecSSong Liu
64c4bbe83dSMarcos Paulo de Souzacheck_result "% insmod test_modules/test_klp_callbacks_demo.ko
65ff1b80ecSSong Liulivepatch: enabling patch 'test_klp_callbacks_demo'
66ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': initializing patching transition
67ff1b80ecSSong Liutest_klp_callbacks_demo: pre_patch_callback: vmlinux
68ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': starting patching transition
69ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': completing patching transition
70ff1b80ecSSong Liutest_klp_callbacks_demo: post_patch_callback: vmlinux
71ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': patching complete
72c4bbe83dSMarcos Paulo de Souza% insmod test_modules/test_klp_callbacks_mod.ko
73ff1b80ecSSong Liulivepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod'
74ff1b80ecSSong Liutest_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init
75ff1b80ecSSong Liutest_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init
76ff1b80ecSSong Liutest_klp_callbacks_mod: test_klp_callbacks_mod_init
77ff1b80ecSSong Liu% rmmod test_klp_callbacks_mod
78ff1b80ecSSong Liutest_klp_callbacks_mod: test_klp_callbacks_mod_exit
79ff1b80ecSSong Liutest_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away
80ff1b80ecSSong Liulivepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod'
81ff1b80ecSSong Liutest_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away
82637c7309SMichael Vetter% echo 0 > $SYSFS_KLP_DIR/test_klp_callbacks_demo/enabled
83ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': initializing unpatching transition
84ff1b80ecSSong Liutest_klp_callbacks_demo: pre_unpatch_callback: vmlinux
85ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': starting unpatching transition
86ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': completing unpatching transition
87ff1b80ecSSong Liutest_klp_callbacks_demo: post_unpatch_callback: vmlinux
88ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': unpatching complete
89ff1b80ecSSong Liu% rmmod test_klp_callbacks_demo"
90ff1b80ecSSong Liu
9140f9caa7SYafang Shaostart_test "sysfs test replace enabled"
9240f9caa7SYafang Shao
9340f9caa7SYafang ShaoMOD_LIVEPATCH=test_klp_atomic_replace
9440f9caa7SYafang Shaoload_lp $MOD_LIVEPATCH replace=1
9540f9caa7SYafang Shao
9640f9caa7SYafang Shaocheck_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
9740f9caa7SYafang Shaocheck_sysfs_value  "$MOD_LIVEPATCH" "replace" "1"
9840f9caa7SYafang Shao
9940f9caa7SYafang Shaodisable_lp $MOD_LIVEPATCH
10040f9caa7SYafang Shaounload_lp $MOD_LIVEPATCH
10140f9caa7SYafang Shao
10240f9caa7SYafang Shaocheck_result "% insmod test_modules/$MOD_LIVEPATCH.ko replace=1
10340f9caa7SYafang Shaolivepatch: enabling patch '$MOD_LIVEPATCH'
10440f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': initializing patching transition
10540f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': starting patching transition
10640f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': completing patching transition
10740f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': patching complete
108637c7309SMichael Vetter% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled
10940f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': initializing unpatching transition
11040f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': starting unpatching transition
11140f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': completing unpatching transition
11240f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': unpatching complete
11340f9caa7SYafang Shao% rmmod $MOD_LIVEPATCH"
11440f9caa7SYafang Shao
11540f9caa7SYafang Shaostart_test "sysfs test replace disabled"
11640f9caa7SYafang Shao
11740f9caa7SYafang Shaoload_lp $MOD_LIVEPATCH replace=0
11840f9caa7SYafang Shao
11940f9caa7SYafang Shaocheck_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
12040f9caa7SYafang Shaocheck_sysfs_value  "$MOD_LIVEPATCH" "replace" "0"
12140f9caa7SYafang Shao
12240f9caa7SYafang Shaodisable_lp $MOD_LIVEPATCH
12340f9caa7SYafang Shaounload_lp $MOD_LIVEPATCH
12440f9caa7SYafang Shao
12540f9caa7SYafang Shaocheck_result "% insmod test_modules/$MOD_LIVEPATCH.ko replace=0
12640f9caa7SYafang Shaolivepatch: enabling patch '$MOD_LIVEPATCH'
12740f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': initializing patching transition
12840f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': starting patching transition
12940f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': completing patching transition
13040f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': patching complete
131637c7309SMichael Vetter% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled
13240f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': initializing unpatching transition
13340f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': starting unpatching transition
13440f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': completing unpatching transition
13540f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': unpatching complete
13640f9caa7SYafang Shao% rmmod $MOD_LIVEPATCH"
13740f9caa7SYafang Shao
138*ed2ec63dSWardenjohnstart_test "sysfs test stack_order value"
139*ed2ec63dSWardenjohn
140*ed2ec63dSWardenjohnload_lp $MOD_LIVEPATCH
141*ed2ec63dSWardenjohn
142*ed2ec63dSWardenjohncheck_sysfs_value  "$MOD_LIVEPATCH" "stack_order" "1"
143*ed2ec63dSWardenjohn
144*ed2ec63dSWardenjohnload_lp $MOD_LIVEPATCH2
145*ed2ec63dSWardenjohn
146*ed2ec63dSWardenjohncheck_sysfs_value  "$MOD_LIVEPATCH2" "stack_order" "2"
147*ed2ec63dSWardenjohn
148*ed2ec63dSWardenjohnload_lp $MOD_LIVEPATCH3
149*ed2ec63dSWardenjohn
150*ed2ec63dSWardenjohncheck_sysfs_value  "$MOD_LIVEPATCH3" "stack_order" "3"
151*ed2ec63dSWardenjohn
152*ed2ec63dSWardenjohndisable_lp $MOD_LIVEPATCH2
153*ed2ec63dSWardenjohnunload_lp $MOD_LIVEPATCH2
154*ed2ec63dSWardenjohn
155*ed2ec63dSWardenjohncheck_sysfs_value  "$MOD_LIVEPATCH" "stack_order" "1"
156*ed2ec63dSWardenjohncheck_sysfs_value  "$MOD_LIVEPATCH3" "stack_order" "2"
157*ed2ec63dSWardenjohn
158*ed2ec63dSWardenjohndisable_lp $MOD_LIVEPATCH3
159*ed2ec63dSWardenjohnunload_lp $MOD_LIVEPATCH3
160*ed2ec63dSWardenjohn
161*ed2ec63dSWardenjohndisable_lp $MOD_LIVEPATCH
162*ed2ec63dSWardenjohnunload_lp $MOD_LIVEPATCH
163*ed2ec63dSWardenjohn
164*ed2ec63dSWardenjohncheck_result "% insmod test_modules/$MOD_LIVEPATCH.ko
165*ed2ec63dSWardenjohnlivepatch: enabling patch '$MOD_LIVEPATCH'
166*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': initializing patching transition
167*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': starting patching transition
168*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': completing patching transition
169*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': patching complete
170*ed2ec63dSWardenjohn% insmod test_modules/$MOD_LIVEPATCH2.ko
171*ed2ec63dSWardenjohnlivepatch: enabling patch '$MOD_LIVEPATCH2'
172*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': initializing patching transition
173*ed2ec63dSWardenjohn$MOD_LIVEPATCH2: pre_patch_callback: vmlinux
174*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': starting patching transition
175*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': completing patching transition
176*ed2ec63dSWardenjohn$MOD_LIVEPATCH2: post_patch_callback: vmlinux
177*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': patching complete
178*ed2ec63dSWardenjohn% insmod test_modules/$MOD_LIVEPATCH3.ko
179*ed2ec63dSWardenjohnlivepatch: enabling patch '$MOD_LIVEPATCH3'
180*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': initializing patching transition
181*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': starting patching transition
182*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': completing patching transition
183*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': patching complete
184*ed2ec63dSWardenjohn% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH2/enabled
185*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
186*ed2ec63dSWardenjohn$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
187*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': starting unpatching transition
188*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': completing unpatching transition
189*ed2ec63dSWardenjohn$MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
190*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': unpatching complete
191*ed2ec63dSWardenjohn% rmmod $MOD_LIVEPATCH2
192*ed2ec63dSWardenjohn% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH3/enabled
193*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': initializing unpatching transition
194*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': starting unpatching transition
195*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': completing unpatching transition
196*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': unpatching complete
197*ed2ec63dSWardenjohn% rmmod $MOD_LIVEPATCH3
198*ed2ec63dSWardenjohn% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled
199*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': initializing unpatching transition
200*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': starting unpatching transition
201*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': completing unpatching transition
202*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': unpatching complete
203*ed2ec63dSWardenjohn% rmmod $MOD_LIVEPATCH"
204*ed2ec63dSWardenjohn
205ff1b80ecSSong Liuexit 0
206