44
55. $( dirname $0 ) /functions.sh
66
7- MOD_LIVEPATCH=test_klp_livepatch
7+ MOD_LIVEPATCH1=test_klp_livepatch
8+ MOD_LIVEPATCH2=test_klp_syscall
9+ MOD_LIVEPATCH3=test_klp_callbacks_demo
810MOD_REPLACE=test_klp_atomic_replace
911
1012setup_config
@@ -16,33 +18,33 @@ setup_config
1618
1719start_test " basic function patching"
1820
19- load_lp $MOD_LIVEPATCH
21+ load_lp $MOD_LIVEPATCH1
2022
21- if [[ " $( cat /proc/cmdline) " != " $MOD_LIVEPATCH : this has been live patched" ]] ; then
23+ if [[ " $( cat /proc/cmdline) " != " $MOD_LIVEPATCH1 : this has been live patched" ]] ; then
2224 echo -e " FAIL\n\n"
2325 die " livepatch kselftest(s) failed"
2426fi
2527
26- disable_lp $MOD_LIVEPATCH
27- unload_lp $MOD_LIVEPATCH
28+ disable_lp $MOD_LIVEPATCH1
29+ unload_lp $MOD_LIVEPATCH1
2830
29- if [[ " $( cat /proc/cmdline) " == " $MOD_LIVEPATCH : this has been live patched" ]] ; then
31+ if [[ " $( cat /proc/cmdline) " == " $MOD_LIVEPATCH1 : this has been live patched" ]] ; then
3032 echo -e " FAIL\n\n"
3133 die " livepatch kselftest(s) failed"
3234fi
3335
34- check_result " % insmod test_modules/$MOD_LIVEPATCH .ko
35- livepatch: enabling patch '$MOD_LIVEPATCH '
36- livepatch: '$MOD_LIVEPATCH ': initializing patching transition
37- livepatch: '$MOD_LIVEPATCH ': starting patching transition
38- livepatch: '$MOD_LIVEPATCH ': completing patching transition
39- livepatch: '$MOD_LIVEPATCH ': patching complete
40- % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH /enabled
41- livepatch: '$MOD_LIVEPATCH ': initializing unpatching transition
42- livepatch: '$MOD_LIVEPATCH ': starting unpatching transition
43- livepatch: '$MOD_LIVEPATCH ': completing unpatching transition
44- livepatch: '$MOD_LIVEPATCH ': unpatching complete
45- % rmmod $MOD_LIVEPATCH "
36+ check_result " % insmod test_modules/$MOD_LIVEPATCH1 .ko
37+ livepatch: enabling patch '$MOD_LIVEPATCH1 '
38+ livepatch: '$MOD_LIVEPATCH1 ': initializing patching transition
39+ livepatch: '$MOD_LIVEPATCH1 ': starting patching transition
40+ livepatch: '$MOD_LIVEPATCH1 ': completing patching transition
41+ livepatch: '$MOD_LIVEPATCH1 ': patching complete
42+ % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH1 /enabled
43+ livepatch: '$MOD_LIVEPATCH1 ': initializing unpatching transition
44+ livepatch: '$MOD_LIVEPATCH1 ': starting unpatching transition
45+ livepatch: '$MOD_LIVEPATCH1 ': completing unpatching transition
46+ livepatch: '$MOD_LIVEPATCH1 ': unpatching complete
47+ % rmmod $MOD_LIVEPATCH1 "
4648
4749
4850# - load a livepatch that modifies the output from /proc/cmdline and
@@ -53,7 +55,7 @@ livepatch: '$MOD_LIVEPATCH': unpatching complete
5355
5456start_test " multiple livepatches"
5557
56- load_lp $MOD_LIVEPATCH
58+ load_lp $MOD_LIVEPATCH1
5759
5860grep ' live patched' /proc/cmdline > /dev/kmsg
5961grep ' live patched' /proc/meminfo > /dev/kmsg
@@ -69,62 +71,84 @@ unload_lp $MOD_REPLACE
6971grep ' live patched' /proc/cmdline > /dev/kmsg
7072grep ' live patched' /proc/meminfo > /dev/kmsg
7173
72- disable_lp $MOD_LIVEPATCH
73- unload_lp $MOD_LIVEPATCH
74+ disable_lp $MOD_LIVEPATCH1
75+ unload_lp $MOD_LIVEPATCH1
7476
7577grep ' live patched' /proc/cmdline > /dev/kmsg
7678grep ' live patched' /proc/meminfo > /dev/kmsg
7779
78- check_result " % insmod test_modules/$MOD_LIVEPATCH .ko
79- livepatch: enabling patch '$MOD_LIVEPATCH '
80- livepatch: '$MOD_LIVEPATCH ': initializing patching transition
81- livepatch: '$MOD_LIVEPATCH ': starting patching transition
82- livepatch: '$MOD_LIVEPATCH ': completing patching transition
83- livepatch: '$MOD_LIVEPATCH ': patching complete
84- $MOD_LIVEPATCH : this has been live patched
80+ check_result " % insmod test_modules/$MOD_LIVEPATCH1 .ko
81+ livepatch: enabling patch '$MOD_LIVEPATCH1 '
82+ livepatch: '$MOD_LIVEPATCH1 ': initializing patching transition
83+ livepatch: '$MOD_LIVEPATCH1 ': starting patching transition
84+ livepatch: '$MOD_LIVEPATCH1 ': completing patching transition
85+ livepatch: '$MOD_LIVEPATCH1 ': patching complete
86+ $MOD_LIVEPATCH1 : this has been live patched
8587% insmod test_modules/$MOD_REPLACE .ko replace=0
8688livepatch: enabling patch '$MOD_REPLACE '
8789livepatch: '$MOD_REPLACE ': initializing patching transition
8890livepatch: '$MOD_REPLACE ': starting patching transition
8991livepatch: '$MOD_REPLACE ': completing patching transition
9092livepatch: '$MOD_REPLACE ': patching complete
91- $MOD_LIVEPATCH : this has been live patched
93+ $MOD_LIVEPATCH1 : this has been live patched
9294$MOD_REPLACE : this has been live patched
9395% echo 0 > /sys/kernel/livepatch/$MOD_REPLACE /enabled
9496livepatch: '$MOD_REPLACE ': initializing unpatching transition
9597livepatch: '$MOD_REPLACE ': starting unpatching transition
9698livepatch: '$MOD_REPLACE ': completing unpatching transition
9799livepatch: '$MOD_REPLACE ': unpatching complete
98100% rmmod $MOD_REPLACE
99- $MOD_LIVEPATCH : this has been live patched
100- % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH /enabled
101- livepatch: '$MOD_LIVEPATCH ': initializing unpatching transition
102- livepatch: '$MOD_LIVEPATCH ': starting unpatching transition
103- livepatch: '$MOD_LIVEPATCH ': completing unpatching transition
104- livepatch: '$MOD_LIVEPATCH ': unpatching complete
105- % rmmod $MOD_LIVEPATCH "
101+ $MOD_LIVEPATCH1 : this has been live patched
102+ % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH1 /enabled
103+ livepatch: '$MOD_LIVEPATCH1 ': initializing unpatching transition
104+ livepatch: '$MOD_LIVEPATCH1 ': starting unpatching transition
105+ livepatch: '$MOD_LIVEPATCH1 ': completing unpatching transition
106+ livepatch: '$MOD_LIVEPATCH1 ': unpatching complete
107+ % rmmod $MOD_LIVEPATCH1 "
106108
107109
108110# - load a livepatch that modifies the output from /proc/cmdline and
109111# verify correct behavior
110- # - load an atomic replace livepatch and verify that only the second is active
111- # - remove the first livepatch and verify that the atomic replace livepatch
112- # is still active
112+ # - load two additional livepatches and check the number of livepatch modules
113+ # applied
114+ # - load an atomic replace livepatch and check that the other three modules were
115+ # disabled
116+ # - remove all livepatches besides the atomic replace one and verify that the
117+ # atomic replace livepatch is still active
113118# - remove the atomic replace livepatch and verify that none are active
114119
115120start_test " atomic replace livepatch"
116121
117- load_lp $MOD_LIVEPATCH
122+ load_lp $MOD_LIVEPATCH1
118123
119124grep ' live patched' /proc/cmdline > /dev/kmsg
120125grep ' live patched' /proc/meminfo > /dev/kmsg
121126
127+ for mod in $MOD_LIVEPATCH2 $MOD_LIVEPATCH3 ; do
128+ load_lp " $mod "
129+ done
130+
131+ mods=(/sys/kernel/livepatch/* )
132+ nmods=${# mods[@]}
133+ if [ " $nmods " -ne 3 ]; then
134+ die " Expecting three modules listed, found $nmods "
135+ fi
136+
122137load_lp $MOD_REPLACE replace=1
123138
124139grep ' live patched' /proc/cmdline > /dev/kmsg
125140grep ' live patched' /proc/meminfo > /dev/kmsg
126141
127- unload_lp $MOD_LIVEPATCH
142+ mods=(/sys/kernel/livepatch/* )
143+ nmods=${# mods[@]}
144+ if [ " $nmods " -ne 1 ]; then
145+ die " Expecting only one moduled listed, found $nmods "
146+ fi
147+
148+ # These modules were disabled by the atomic replace
149+ for mod in $MOD_LIVEPATCH3 $MOD_LIVEPATCH2 $MOD_LIVEPATCH1 ; do
150+ unload_lp " $mod "
151+ done
128152
129153grep ' live patched' /proc/cmdline > /dev/kmsg
130154grep ' live patched' /proc/meminfo > /dev/kmsg
@@ -135,21 +159,37 @@ unload_lp $MOD_REPLACE
135159grep ' live patched' /proc/cmdline > /dev/kmsg
136160grep ' live patched' /proc/meminfo > /dev/kmsg
137161
138- check_result " % insmod test_modules/$MOD_LIVEPATCH .ko
139- livepatch: enabling patch '$MOD_LIVEPATCH '
140- livepatch: '$MOD_LIVEPATCH ': initializing patching transition
141- livepatch: '$MOD_LIVEPATCH ': starting patching transition
142- livepatch: '$MOD_LIVEPATCH ': completing patching transition
143- livepatch: '$MOD_LIVEPATCH ': patching complete
144- $MOD_LIVEPATCH : this has been live patched
162+ check_result " % insmod test_modules/$MOD_LIVEPATCH1 .ko
163+ livepatch: enabling patch '$MOD_LIVEPATCH1 '
164+ livepatch: '$MOD_LIVEPATCH1 ': initializing patching transition
165+ livepatch: '$MOD_LIVEPATCH1 ': starting patching transition
166+ livepatch: '$MOD_LIVEPATCH1 ': completing patching transition
167+ livepatch: '$MOD_LIVEPATCH1 ': patching complete
168+ $MOD_LIVEPATCH1 : this has been live patched
169+ % insmod test_modules/$MOD_LIVEPATCH2 .ko
170+ livepatch: enabling patch '$MOD_LIVEPATCH2 '
171+ livepatch: '$MOD_LIVEPATCH2 ': initializing patching transition
172+ livepatch: '$MOD_LIVEPATCH2 ': starting patching transition
173+ livepatch: '$MOD_LIVEPATCH2 ': completing patching transition
174+ livepatch: '$MOD_LIVEPATCH2 ': patching complete
175+ % insmod test_modules/$MOD_LIVEPATCH3 .ko
176+ livepatch: enabling patch '$MOD_LIVEPATCH3 '
177+ livepatch: '$MOD_LIVEPATCH3 ': initializing patching transition
178+ $MOD_LIVEPATCH3 : pre_patch_callback: vmlinux
179+ livepatch: '$MOD_LIVEPATCH3 ': starting patching transition
180+ livepatch: '$MOD_LIVEPATCH3 ': completing patching transition
181+ $MOD_LIVEPATCH3 : post_patch_callback: vmlinux
182+ livepatch: '$MOD_LIVEPATCH3 ': patching complete
145183% insmod test_modules/$MOD_REPLACE .ko replace=1
146184livepatch: enabling patch '$MOD_REPLACE '
147185livepatch: '$MOD_REPLACE ': initializing patching transition
148186livepatch: '$MOD_REPLACE ': starting patching transition
149187livepatch: '$MOD_REPLACE ': completing patching transition
150188livepatch: '$MOD_REPLACE ': patching complete
151189$MOD_REPLACE : this has been live patched
152- % rmmod $MOD_LIVEPATCH
190+ % rmmod $MOD_LIVEPATCH3
191+ % rmmod $MOD_LIVEPATCH2
192+ % rmmod $MOD_LIVEPATCH1
153193$MOD_REPLACE : this has been live patched
154194% echo 0 > /sys/kernel/livepatch/$MOD_REPLACE /enabled
155195livepatch: '$MOD_REPLACE ': initializing unpatching transition
0 commit comments