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
7MOD_LIVEPATCH=test_klp_livepatch
8MOD_LIVEPATCH2=test_klp_callbacks_demo
9MOD_LIVEPATCH3=test_klp_syscall
10
11setup_config
12
13# - load a livepatch and verifies the sysfs entries work as expected
14
15start_test "sysfs test"
16
17load_lp $MOD_LIVEPATCH
18
19check_sysfs_rights "$MOD_LIVEPATCH" "" "drwxr-xr-x"
20check_sysfs_rights "$MOD_LIVEPATCH" "enabled" "-rw-r--r--"
21check_sysfs_value  "$MOD_LIVEPATCH" "enabled" "1"
22check_sysfs_rights "$MOD_LIVEPATCH" "force" "--w-------"
23check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
24check_sysfs_rights "$MOD_LIVEPATCH" "stack_order" "-r--r--r--"
25check_sysfs_value  "$MOD_LIVEPATCH" "stack_order" "1"
26check_sysfs_rights "$MOD_LIVEPATCH" "transition" "-r--r--r--"
27check_sysfs_value  "$MOD_LIVEPATCH" "transition" "0"
28check_sysfs_rights "$MOD_LIVEPATCH" "vmlinux/patched" "-r--r--r--"
29check_sysfs_value  "$MOD_LIVEPATCH" "vmlinux/patched" "1"
30
31disable_lp $MOD_LIVEPATCH
32
33unload_lp $MOD_LIVEPATCH
34
35check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
36livepatch: enabling patch '$MOD_LIVEPATCH'
37livepatch: '$MOD_LIVEPATCH': initializing patching transition
38livepatch: '$MOD_LIVEPATCH': starting patching transition
39livepatch: '$MOD_LIVEPATCH': completing patching transition
40livepatch: '$MOD_LIVEPATCH': patching complete
41% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled
42livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
43livepatch: '$MOD_LIVEPATCH': starting unpatching transition
44livepatch: '$MOD_LIVEPATCH': completing unpatching transition
45livepatch: '$MOD_LIVEPATCH': unpatching complete
46% rmmod $MOD_LIVEPATCH"
47
48start_test "sysfs test object/patched"
49
50MOD_LIVEPATCH=test_klp_callbacks_demo
51MOD_TARGET=test_klp_callbacks_mod
52load_lp $MOD_LIVEPATCH
53
54# check the "patch" file changes as target module loads/unloads
55check_sysfs_value  "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0"
56load_mod $MOD_TARGET
57check_sysfs_value  "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "1"
58unload_mod $MOD_TARGET
59check_sysfs_value  "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0"
60
61disable_lp $MOD_LIVEPATCH
62unload_lp $MOD_LIVEPATCH
63
64check_result "% insmod test_modules/test_klp_callbacks_demo.ko
65livepatch: enabling patch 'test_klp_callbacks_demo'
66livepatch: 'test_klp_callbacks_demo': initializing patching transition
67test_klp_callbacks_demo: pre_patch_callback: vmlinux
68livepatch: 'test_klp_callbacks_demo': starting patching transition
69livepatch: 'test_klp_callbacks_demo': completing patching transition
70test_klp_callbacks_demo: post_patch_callback: vmlinux
71livepatch: 'test_klp_callbacks_demo': patching complete
72% insmod test_modules/test_klp_callbacks_mod.ko
73livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod'
74test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init
75test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init
76test_klp_callbacks_mod: test_klp_callbacks_mod_init
77% rmmod test_klp_callbacks_mod
78test_klp_callbacks_mod: test_klp_callbacks_mod_exit
79test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away
80livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod'
81test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away
82% echo 0 > $SYSFS_KLP_DIR/test_klp_callbacks_demo/enabled
83livepatch: 'test_klp_callbacks_demo': initializing unpatching transition
84test_klp_callbacks_demo: pre_unpatch_callback: vmlinux
85livepatch: 'test_klp_callbacks_demo': starting unpatching transition
86livepatch: 'test_klp_callbacks_demo': completing unpatching transition
87test_klp_callbacks_demo: post_unpatch_callback: vmlinux
88livepatch: 'test_klp_callbacks_demo': unpatching complete
89% rmmod test_klp_callbacks_demo"
90
91start_test "sysfs test replace enabled"
92
93MOD_LIVEPATCH=test_klp_atomic_replace
94load_lp $MOD_LIVEPATCH replace=1
95
96check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
97check_sysfs_value  "$MOD_LIVEPATCH" "replace" "1"
98
99disable_lp $MOD_LIVEPATCH
100unload_lp $MOD_LIVEPATCH
101
102check_result "% insmod test_modules/$MOD_LIVEPATCH.ko replace=1
103livepatch: enabling patch '$MOD_LIVEPATCH'
104livepatch: '$MOD_LIVEPATCH': initializing patching transition
105livepatch: '$MOD_LIVEPATCH': starting patching transition
106livepatch: '$MOD_LIVEPATCH': completing patching transition
107livepatch: '$MOD_LIVEPATCH': patching complete
108% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled
109livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
110livepatch: '$MOD_LIVEPATCH': starting unpatching transition
111livepatch: '$MOD_LIVEPATCH': completing unpatching transition
112livepatch: '$MOD_LIVEPATCH': unpatching complete
113% rmmod $MOD_LIVEPATCH"
114
115start_test "sysfs test replace disabled"
116
117load_lp $MOD_LIVEPATCH replace=0
118
119check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--"
120check_sysfs_value  "$MOD_LIVEPATCH" "replace" "0"
121
122disable_lp $MOD_LIVEPATCH
123unload_lp $MOD_LIVEPATCH
124
125check_result "% insmod test_modules/$MOD_LIVEPATCH.ko replace=0
126livepatch: enabling patch '$MOD_LIVEPATCH'
127livepatch: '$MOD_LIVEPATCH': initializing patching transition
128livepatch: '$MOD_LIVEPATCH': starting patching transition
129livepatch: '$MOD_LIVEPATCH': completing patching transition
130livepatch: '$MOD_LIVEPATCH': patching complete
131% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled
132livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
133livepatch: '$MOD_LIVEPATCH': starting unpatching transition
134livepatch: '$MOD_LIVEPATCH': completing unpatching transition
135livepatch: '$MOD_LIVEPATCH': unpatching complete
136% rmmod $MOD_LIVEPATCH"
137
138start_test "sysfs test stack_order value"
139
140load_lp $MOD_LIVEPATCH
141
142check_sysfs_value  "$MOD_LIVEPATCH" "stack_order" "1"
143
144load_lp $MOD_LIVEPATCH2
145
146check_sysfs_value  "$MOD_LIVEPATCH2" "stack_order" "2"
147
148load_lp $MOD_LIVEPATCH3
149
150check_sysfs_value  "$MOD_LIVEPATCH3" "stack_order" "3"
151
152disable_lp $MOD_LIVEPATCH2
153unload_lp $MOD_LIVEPATCH2
154
155check_sysfs_value  "$MOD_LIVEPATCH" "stack_order" "1"
156check_sysfs_value  "$MOD_LIVEPATCH3" "stack_order" "2"
157
158disable_lp $MOD_LIVEPATCH3
159unload_lp $MOD_LIVEPATCH3
160
161disable_lp $MOD_LIVEPATCH
162unload_lp $MOD_LIVEPATCH
163
164check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
165livepatch: enabling patch '$MOD_LIVEPATCH'
166livepatch: '$MOD_LIVEPATCH': initializing patching transition
167livepatch: '$MOD_LIVEPATCH': starting patching transition
168livepatch: '$MOD_LIVEPATCH': completing patching transition
169livepatch: '$MOD_LIVEPATCH': patching complete
170% insmod test_modules/$MOD_LIVEPATCH2.ko
171livepatch: enabling patch '$MOD_LIVEPATCH2'
172livepatch: '$MOD_LIVEPATCH2': initializing patching transition
173$MOD_LIVEPATCH2: pre_patch_callback: vmlinux
174livepatch: '$MOD_LIVEPATCH2': starting patching transition
175livepatch: '$MOD_LIVEPATCH2': completing patching transition
176$MOD_LIVEPATCH2: post_patch_callback: vmlinux
177livepatch: '$MOD_LIVEPATCH2': patching complete
178% insmod test_modules/$MOD_LIVEPATCH3.ko
179livepatch: enabling patch '$MOD_LIVEPATCH3'
180livepatch: '$MOD_LIVEPATCH3': initializing patching transition
181livepatch: '$MOD_LIVEPATCH3': starting patching transition
182livepatch: '$MOD_LIVEPATCH3': completing patching transition
183livepatch: '$MOD_LIVEPATCH3': patching complete
184% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH2/enabled
185livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
186$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
187livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
188livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
189$MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
190livepatch: '$MOD_LIVEPATCH2': unpatching complete
191% rmmod $MOD_LIVEPATCH2
192% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH3/enabled
193livepatch: '$MOD_LIVEPATCH3': initializing unpatching transition
194livepatch: '$MOD_LIVEPATCH3': starting unpatching transition
195livepatch: '$MOD_LIVEPATCH3': completing unpatching transition
196livepatch: '$MOD_LIVEPATCH3': unpatching complete
197% rmmod $MOD_LIVEPATCH3
198% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled
199livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
200livepatch: '$MOD_LIVEPATCH': starting unpatching transition
201livepatch: '$MOD_LIVEPATCH': completing unpatching transition
202livepatch: '$MOD_LIVEPATCH': unpatching complete
203% rmmod $MOD_LIVEPATCH"
204
205exit 0
206