livepatch: Skip livepatch tests if ftrace cannot be configured
[linux-2.6-microblaze.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 setup_config
11
12
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
16
17 start_test "basic function patching"
18
19 load_lp $MOD_LIVEPATCH
20
21 if [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH: this has been live patched" ]] ; then
22         echo -e "FAIL\n\n"
23         die "livepatch kselftest(s) failed"
24 fi
25
26 disable_lp $MOD_LIVEPATCH
27 unload_lp $MOD_LIVEPATCH
28
29 if [[ "$(cat /proc/cmdline)" == "$MOD_LIVEPATCH: this has been live patched" ]] ; then
30         echo -e "FAIL\n\n"
31         die "livepatch kselftest(s) failed"
32 fi
33
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"
46
47
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
53
54 start_test "multiple livepatches"
55
56 load_lp $MOD_LIVEPATCH
57
58 grep 'live patched' /proc/cmdline > /dev/kmsg
59 grep 'live patched' /proc/meminfo > /dev/kmsg
60
61 load_lp $MOD_REPLACE replace=0
62
63 grep 'live patched' /proc/cmdline > /dev/kmsg
64 grep 'live patched' /proc/meminfo > /dev/kmsg
65
66 disable_lp $MOD_REPLACE
67 unload_lp $MOD_REPLACE
68
69 grep 'live patched' /proc/cmdline > /dev/kmsg
70 grep 'live patched' /proc/meminfo > /dev/kmsg
71
72 disable_lp $MOD_LIVEPATCH
73 unload_lp $MOD_LIVEPATCH
74
75 grep 'live patched' /proc/cmdline > /dev/kmsg
76 grep 'live patched' /proc/meminfo > /dev/kmsg
77
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
98 % 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"
106
107
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
112 #   is still active
113 # - remove the atomic replace livepatch and verify that none are active
114
115 start_test "atomic replace livepatch"
116
117 load_lp $MOD_LIVEPATCH
118
119 grep 'live patched' /proc/cmdline > /dev/kmsg
120 grep 'live patched' /proc/meminfo > /dev/kmsg
121
122 load_lp $MOD_REPLACE replace=1
123
124 grep 'live patched' /proc/cmdline > /dev/kmsg
125 grep 'live patched' /proc/meminfo > /dev/kmsg
126
127 unload_lp $MOD_LIVEPATCH
128
129 grep 'live patched' /proc/cmdline > /dev/kmsg
130 grep 'live patched' /proc/meminfo > /dev/kmsg
131
132 disable_lp $MOD_REPLACE
133 unload_lp $MOD_REPLACE
134
135 grep 'live patched' /proc/cmdline > /dev/kmsg
136 grep 'live patched' /proc/meminfo > /dev/kmsg
137
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"
160
161
162 exit 0