4
4
5
5
. $( dirname $0 ) /functions.sh
6
6
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
8
10
MOD_REPLACE=test_klp_atomic_replace
9
11
10
12
setup_config
@@ -16,33 +18,33 @@ setup_config
16
18
17
19
start_test " basic function patching"
18
20
19
- load_lp $MOD_LIVEPATCH
21
+ load_lp $MOD_LIVEPATCH1
20
22
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
22
24
echo -e " FAIL\n\n"
23
25
die " livepatch kselftest(s) failed"
24
26
fi
25
27
26
- disable_lp $MOD_LIVEPATCH
27
- unload_lp $MOD_LIVEPATCH
28
+ disable_lp $MOD_LIVEPATCH1
29
+ unload_lp $MOD_LIVEPATCH1
28
30
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
30
32
echo -e " FAIL\n\n"
31
33
die " livepatch kselftest(s) failed"
32
34
fi
33
35
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 "
46
48
47
49
48
50
# - load a livepatch that modifies the output from /proc/cmdline and
@@ -53,7 +55,7 @@ livepatch: '$MOD_LIVEPATCH': unpatching complete
53
55
54
56
start_test " multiple livepatches"
55
57
56
- load_lp $MOD_LIVEPATCH
58
+ load_lp $MOD_LIVEPATCH1
57
59
58
60
grep ' live patched' /proc/cmdline > /dev/kmsg
59
61
grep ' live patched' /proc/meminfo > /dev/kmsg
@@ -69,62 +71,84 @@ unload_lp $MOD_REPLACE
69
71
grep ' live patched' /proc/cmdline > /dev/kmsg
70
72
grep ' live patched' /proc/meminfo > /dev/kmsg
71
73
72
- disable_lp $MOD_LIVEPATCH
73
- unload_lp $MOD_LIVEPATCH
74
+ disable_lp $MOD_LIVEPATCH1
75
+ unload_lp $MOD_LIVEPATCH1
74
76
75
77
grep ' live patched' /proc/cmdline > /dev/kmsg
76
78
grep ' live patched' /proc/meminfo > /dev/kmsg
77
79
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
85
87
% insmod test_modules/$MOD_REPLACE .ko replace=0
86
88
livepatch: enabling patch '$MOD_REPLACE '
87
89
livepatch: '$MOD_REPLACE ': initializing patching transition
88
90
livepatch: '$MOD_REPLACE ': starting patching transition
89
91
livepatch: '$MOD_REPLACE ': completing patching transition
90
92
livepatch: '$MOD_REPLACE ': patching complete
91
- $MOD_LIVEPATCH : this has been live patched
93
+ $MOD_LIVEPATCH1 : this has been live patched
92
94
$MOD_REPLACE : this has been live patched
93
95
% echo 0 > /sys/kernel/livepatch/$MOD_REPLACE /enabled
94
96
livepatch: '$MOD_REPLACE ': initializing unpatching transition
95
97
livepatch: '$MOD_REPLACE ': starting unpatching transition
96
98
livepatch: '$MOD_REPLACE ': completing unpatching transition
97
99
livepatch: '$MOD_REPLACE ': unpatching complete
98
100
% 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 "
106
108
107
109
108
110
# - load a livepatch that modifies the output from /proc/cmdline and
109
111
# 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
113
118
# - remove the atomic replace livepatch and verify that none are active
114
119
115
120
start_test " atomic replace livepatch"
116
121
117
- load_lp $MOD_LIVEPATCH
122
+ load_lp $MOD_LIVEPATCH1
118
123
119
124
grep ' live patched' /proc/cmdline > /dev/kmsg
120
125
grep ' live patched' /proc/meminfo > /dev/kmsg
121
126
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
+
122
137
load_lp $MOD_REPLACE replace=1
123
138
124
139
grep ' live patched' /proc/cmdline > /dev/kmsg
125
140
grep ' live patched' /proc/meminfo > /dev/kmsg
126
141
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
128
152
129
153
grep ' live patched' /proc/cmdline > /dev/kmsg
130
154
grep ' live patched' /proc/meminfo > /dev/kmsg
@@ -135,21 +159,37 @@ unload_lp $MOD_REPLACE
135
159
grep ' live patched' /proc/cmdline > /dev/kmsg
136
160
grep ' live patched' /proc/meminfo > /dev/kmsg
137
161
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
145
183
% insmod test_modules/$MOD_REPLACE .ko replace=1
146
184
livepatch: enabling patch '$MOD_REPLACE '
147
185
livepatch: '$MOD_REPLACE ': initializing patching transition
148
186
livepatch: '$MOD_REPLACE ': starting patching transition
149
187
livepatch: '$MOD_REPLACE ': completing patching transition
150
188
livepatch: '$MOD_REPLACE ': patching complete
151
189
$MOD_REPLACE : this has been live patched
152
- % rmmod $MOD_LIVEPATCH
190
+ % rmmod $MOD_LIVEPATCH3
191
+ % rmmod $MOD_LIVEPATCH2
192
+ % rmmod $MOD_LIVEPATCH1
153
193
$MOD_REPLACE : this has been live patched
154
194
% echo 0 > /sys/kernel/livepatch/$MOD_REPLACE /enabled
155
195
livepatch: '$MOD_REPLACE ': initializing unpatching transition
0 commit comments