2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (C) 2018 Joe Lawrence <joe.lawrence@redhat.com>
5 . $
(dirname $0)/functions.sh
7 MOD_LIVEPATCH
=test_klp_livepatch
8 MOD_REPLACE
=test_klp_atomic_replace
13 # - load a livepatch that modifies the output from /proc/cmdline and
14 # verify correct behavior
15 # - unload the livepatch and make sure the patch was removed
17 start_test
"basic function patching"
19 load_lp
$MOD_LIVEPATCH
21 if [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH: this has been live patched" ]] ; then
23 die
"livepatch kselftest(s) failed"
26 disable_lp
$MOD_LIVEPATCH
27 unload_lp
$MOD_LIVEPATCH
29 if [[ "$(cat /proc/cmdline)" == "$MOD_LIVEPATCH: this has been live patched" ]] ; then
31 die
"livepatch kselftest(s) failed"
34 check_result
"% modprobe $MOD_LIVEPATCH
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"
48 # - load a livepatch that modifies the output from /proc/cmdline and
49 # verify correct behavior
50 # - load another livepatch and verify that both livepatches are active
51 # - unload the second livepatch and verify that the first is still active
52 # - unload the first livepatch and verify none are active
54 start_test
"multiple livepatches"
56 load_lp
$MOD_LIVEPATCH
58 grep 'live patched' /proc
/cmdline
> /dev
/kmsg
59 grep 'live patched' /proc
/meminfo
> /dev
/kmsg
61 load_lp
$MOD_REPLACE replace
=0
63 grep 'live patched' /proc
/cmdline
> /dev
/kmsg
64 grep 'live patched' /proc
/meminfo
> /dev
/kmsg
66 disable_lp
$MOD_REPLACE
67 unload_lp
$MOD_REPLACE
69 grep 'live patched' /proc
/cmdline
> /dev
/kmsg
70 grep 'live patched' /proc
/meminfo
> /dev
/kmsg
72 disable_lp
$MOD_LIVEPATCH
73 unload_lp
$MOD_LIVEPATCH
75 grep 'live patched' /proc
/cmdline
> /dev
/kmsg
76 grep 'live patched' /proc
/meminfo
> /dev
/kmsg
78 check_result
"% modprobe $MOD_LIVEPATCH
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
85 % modprobe $MOD_REPLACE replace=0
86 livepatch: enabling patch '$MOD_REPLACE'
87 livepatch: '$MOD_REPLACE': initializing patching transition
88 livepatch: '$MOD_REPLACE': starting patching transition
89 livepatch: '$MOD_REPLACE': completing patching transition
90 livepatch: '$MOD_REPLACE': patching complete
91 $MOD_LIVEPATCH: this has been live patched
92 $MOD_REPLACE: this has been live patched
93 % echo 0 > /sys/kernel/livepatch/$MOD_REPLACE/enabled
94 livepatch: '$MOD_REPLACE': initializing unpatching transition
95 livepatch: '$MOD_REPLACE': starting unpatching transition
96 livepatch: '$MOD_REPLACE': completing unpatching transition
97 livepatch: '$MOD_REPLACE': unpatching complete
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"
108 # - load a livepatch that modifies the output from /proc/cmdline and
109 # 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
113 # - remove the atomic replace livepatch and verify that none are active
115 start_test
"atomic replace livepatch"
117 load_lp
$MOD_LIVEPATCH
119 grep 'live patched' /proc
/cmdline
> /dev
/kmsg
120 grep 'live patched' /proc
/meminfo
> /dev
/kmsg
122 load_lp
$MOD_REPLACE replace
=1
124 grep 'live patched' /proc
/cmdline
> /dev
/kmsg
125 grep 'live patched' /proc
/meminfo
> /dev
/kmsg
127 unload_lp
$MOD_LIVEPATCH
129 grep 'live patched' /proc
/cmdline
> /dev
/kmsg
130 grep 'live patched' /proc
/meminfo
> /dev
/kmsg
132 disable_lp
$MOD_REPLACE
133 unload_lp
$MOD_REPLACE
135 grep 'live patched' /proc
/cmdline
> /dev
/kmsg
136 grep 'live patched' /proc
/meminfo
> /dev
/kmsg
138 check_result
"% modprobe $MOD_LIVEPATCH
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
145 % modprobe $MOD_REPLACE replace=1
146 livepatch: enabling patch '$MOD_REPLACE'
147 livepatch: '$MOD_REPLACE': initializing patching transition
148 livepatch: '$MOD_REPLACE': starting patching transition
149 livepatch: '$MOD_REPLACE': completing patching transition
150 livepatch: '$MOD_REPLACE': patching complete
151 $MOD_REPLACE: this has been live patched
152 % rmmod $MOD_LIVEPATCH
153 $MOD_REPLACE: this has been live patched
154 % echo 0 > /sys/kernel/livepatch/$MOD_REPLACE/enabled
155 livepatch: '$MOD_REPLACE': initializing unpatching transition
156 livepatch: '$MOD_REPLACE': starting unpatching transition
157 livepatch: '$MOD_REPLACE': completing unpatching transition
158 livepatch: '$MOD_REPLACE': unpatching complete
159 % rmmod $MOD_REPLACE"