Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / tools / testing / selftests / livepatch / test-livepatch.sh
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (C) 2018 Joe Lawrence <joe.lawrence@redhat.com>
4
5 . $(dirname $0)/functions.sh
6
7 MOD_LIVEPATCH=test_klp_livepatch
8 MOD_REPLACE=test_klp_atomic_replace
9
10 set_dynamic_debug
11
12
13 # TEST: basic function patching
14 # - load a livepatch that modifies the output from /proc/cmdline and
15 #   verify correct behavior
16 # - unload the livepatch and make sure the patch was removed
17
18 echo -n "TEST: basic function patching ... "
19 dmesg -C
20
21 load_lp $MOD_LIVEPATCH
22
23 if [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH: this has been live patched" ]] ; then
24         echo -e "FAIL\n\n"
25         die "livepatch kselftest(s) failed"
26 fi
27
28 disable_lp $MOD_LIVEPATCH
29 unload_lp $MOD_LIVEPATCH
30
31 if [[ "$(cat /proc/cmdline)" == "$MOD_LIVEPATCH: this has been live patched" ]] ; then
32         echo -e "FAIL\n\n"
33         die "livepatch kselftest(s) failed"
34 fi
35
36 check_result "% modprobe $MOD_LIVEPATCH
37 livepatch: enabling patch '$MOD_LIVEPATCH'
38 livepatch: '$MOD_LIVEPATCH': initializing patching transition
39 livepatch: '$MOD_LIVEPATCH': starting patching transition
40 livepatch: '$MOD_LIVEPATCH': completing patching transition
41 livepatch: '$MOD_LIVEPATCH': patching complete
42 % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
43 livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
44 livepatch: '$MOD_LIVEPATCH': starting unpatching transition
45 livepatch: '$MOD_LIVEPATCH': completing unpatching transition
46 livepatch: '$MOD_LIVEPATCH': unpatching complete
47 % rmmod $MOD_LIVEPATCH"
48
49
50 # TEST: multiple livepatches
51 # - load a livepatch that modifies the output from /proc/cmdline and
52 #   verify correct behavior
53 # - load another livepatch and verify that both livepatches are active
54 # - unload the second livepatch and verify that the first is still active
55 # - unload the first livepatch and verify none are active
56
57 echo -n "TEST: multiple livepatches ... "
58 dmesg -C
59
60 load_lp $MOD_LIVEPATCH
61
62 grep 'live patched' /proc/cmdline > /dev/kmsg
63 grep 'live patched' /proc/meminfo > /dev/kmsg
64
65 load_lp $MOD_REPLACE replace=0
66
67 grep 'live patched' /proc/cmdline > /dev/kmsg
68 grep 'live patched' /proc/meminfo > /dev/kmsg
69
70 disable_lp $MOD_REPLACE
71 unload_lp $MOD_REPLACE
72
73 grep 'live patched' /proc/cmdline > /dev/kmsg
74 grep 'live patched' /proc/meminfo > /dev/kmsg
75
76 disable_lp $MOD_LIVEPATCH
77 unload_lp $MOD_LIVEPATCH
78
79 grep 'live patched' /proc/cmdline > /dev/kmsg
80 grep 'live patched' /proc/meminfo > /dev/kmsg
81
82 check_result "% modprobe $MOD_LIVEPATCH
83 livepatch: enabling patch '$MOD_LIVEPATCH'
84 livepatch: '$MOD_LIVEPATCH': initializing patching transition
85 livepatch: '$MOD_LIVEPATCH': starting patching transition
86 livepatch: '$MOD_LIVEPATCH': completing patching transition
87 livepatch: '$MOD_LIVEPATCH': patching complete
88 $MOD_LIVEPATCH: this has been live patched
89 % modprobe $MOD_REPLACE replace=0
90 livepatch: enabling patch '$MOD_REPLACE'
91 livepatch: '$MOD_REPLACE': initializing patching transition
92 livepatch: '$MOD_REPLACE': starting patching transition
93 livepatch: '$MOD_REPLACE': completing patching transition
94 livepatch: '$MOD_REPLACE': patching complete
95 $MOD_LIVEPATCH: this has been live patched
96 $MOD_REPLACE: this has been live patched
97 % echo 0 > /sys/kernel/livepatch/$MOD_REPLACE/enabled
98 livepatch: '$MOD_REPLACE': initializing unpatching transition
99 livepatch: '$MOD_REPLACE': starting unpatching transition
100 livepatch: '$MOD_REPLACE': completing unpatching transition
101 livepatch: '$MOD_REPLACE': unpatching complete
102 % rmmod $MOD_REPLACE
103 $MOD_LIVEPATCH: this has been live patched
104 % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
105 livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
106 livepatch: '$MOD_LIVEPATCH': starting unpatching transition
107 livepatch: '$MOD_LIVEPATCH': completing unpatching transition
108 livepatch: '$MOD_LIVEPATCH': unpatching complete
109 % rmmod $MOD_LIVEPATCH"
110
111
112 # TEST: atomic replace livepatch
113 # - load a livepatch that modifies the output from /proc/cmdline and
114 #   verify correct behavior
115 # - load an atomic replace livepatch and verify that only the second is active
116 # - remove the first livepatch and verify that the atomic replace livepatch
117 #   is still active
118 # - remove the atomic replace livepatch and verify that none are active
119
120 echo -n "TEST: atomic replace livepatch ... "
121 dmesg -C
122
123 load_lp $MOD_LIVEPATCH
124
125 grep 'live patched' /proc/cmdline > /dev/kmsg
126 grep 'live patched' /proc/meminfo > /dev/kmsg
127
128 load_lp $MOD_REPLACE replace=1
129
130 grep 'live patched' /proc/cmdline > /dev/kmsg
131 grep 'live patched' /proc/meminfo > /dev/kmsg
132
133 unload_lp $MOD_LIVEPATCH
134
135 grep 'live patched' /proc/cmdline > /dev/kmsg
136 grep 'live patched' /proc/meminfo > /dev/kmsg
137
138 disable_lp $MOD_REPLACE
139 unload_lp $MOD_REPLACE
140
141 grep 'live patched' /proc/cmdline > /dev/kmsg
142 grep 'live patched' /proc/meminfo > /dev/kmsg
143
144 check_result "% modprobe $MOD_LIVEPATCH
145 livepatch: enabling patch '$MOD_LIVEPATCH'
146 livepatch: '$MOD_LIVEPATCH': initializing patching transition
147 livepatch: '$MOD_LIVEPATCH': starting patching transition
148 livepatch: '$MOD_LIVEPATCH': completing patching transition
149 livepatch: '$MOD_LIVEPATCH': patching complete
150 $MOD_LIVEPATCH: this has been live patched
151 % modprobe $MOD_REPLACE replace=1
152 livepatch: enabling patch '$MOD_REPLACE'
153 livepatch: '$MOD_REPLACE': initializing patching transition
154 livepatch: '$MOD_REPLACE': starting patching transition
155 livepatch: '$MOD_REPLACE': completing patching transition
156 livepatch: '$MOD_REPLACE': patching complete
157 $MOD_REPLACE: this has been live patched
158 % rmmod $MOD_LIVEPATCH
159 $MOD_REPLACE: this has been live patched
160 % echo 0 > /sys/kernel/livepatch/$MOD_REPLACE/enabled
161 livepatch: '$MOD_REPLACE': initializing unpatching transition
162 livepatch: '$MOD_REPLACE': starting unpatching transition
163 livepatch: '$MOD_REPLACE': completing unpatching transition
164 livepatch: '$MOD_REPLACE': unpatching complete
165 % rmmod $MOD_REPLACE"
166
167
168 exit 0