Merge tag 'x86_sev_for_v6.9_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / tools / testing / selftests / livepatch / test-state.sh
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 # Copyright (C) 2019 SUSE
4
5 . $(dirname $0)/functions.sh
6
7 MOD_LIVEPATCH=test_klp_state
8 MOD_LIVEPATCH2=test_klp_state2
9 MOD_LIVEPATCH3=test_klp_state3
10
11 setup_config
12
13
14 # Load and remove a module that modifies the system state
15
16 start_test "system state modification"
17
18 load_lp $MOD_LIVEPATCH
19 disable_lp $MOD_LIVEPATCH
20 unload_lp $MOD_LIVEPATCH
21
22 check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
23 livepatch: enabling patch '$MOD_LIVEPATCH'
24 livepatch: '$MOD_LIVEPATCH': initializing patching transition
25 $MOD_LIVEPATCH: pre_patch_callback: vmlinux
26 $MOD_LIVEPATCH: allocate_loglevel_state: allocating space to store console_loglevel
27 livepatch: '$MOD_LIVEPATCH': starting patching transition
28 livepatch: '$MOD_LIVEPATCH': completing patching transition
29 $MOD_LIVEPATCH: post_patch_callback: vmlinux
30 $MOD_LIVEPATCH: fix_console_loglevel: fixing console_loglevel
31 livepatch: '$MOD_LIVEPATCH': patching complete
32 % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
33 livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
34 $MOD_LIVEPATCH: pre_unpatch_callback: vmlinux
35 $MOD_LIVEPATCH: restore_console_loglevel: restoring console_loglevel
36 livepatch: '$MOD_LIVEPATCH': starting unpatching transition
37 livepatch: '$MOD_LIVEPATCH': completing unpatching transition
38 $MOD_LIVEPATCH: post_unpatch_callback: vmlinux
39 $MOD_LIVEPATCH: free_loglevel_state: freeing space for the stored console_loglevel
40 livepatch: '$MOD_LIVEPATCH': unpatching complete
41 % rmmod $MOD_LIVEPATCH"
42
43
44 # Take over system state change by a cumulative patch
45
46 start_test "taking over system state modification"
47
48 load_lp $MOD_LIVEPATCH
49 load_lp $MOD_LIVEPATCH2
50 unload_lp $MOD_LIVEPATCH
51 disable_lp $MOD_LIVEPATCH2
52 unload_lp $MOD_LIVEPATCH2
53
54 check_result "% insmod test_modules/$MOD_LIVEPATCH.ko
55 livepatch: enabling patch '$MOD_LIVEPATCH'
56 livepatch: '$MOD_LIVEPATCH': initializing patching transition
57 $MOD_LIVEPATCH: pre_patch_callback: vmlinux
58 $MOD_LIVEPATCH: allocate_loglevel_state: allocating space to store console_loglevel
59 livepatch: '$MOD_LIVEPATCH': starting patching transition
60 livepatch: '$MOD_LIVEPATCH': completing patching transition
61 $MOD_LIVEPATCH: post_patch_callback: vmlinux
62 $MOD_LIVEPATCH: fix_console_loglevel: fixing console_loglevel
63 livepatch: '$MOD_LIVEPATCH': patching complete
64 % insmod test_modules/$MOD_LIVEPATCH2.ko
65 livepatch: enabling patch '$MOD_LIVEPATCH2'
66 livepatch: '$MOD_LIVEPATCH2': initializing patching transition
67 $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
68 $MOD_LIVEPATCH2: allocate_loglevel_state: space to store console_loglevel already allocated
69 livepatch: '$MOD_LIVEPATCH2': starting patching transition
70 livepatch: '$MOD_LIVEPATCH2': completing patching transition
71 $MOD_LIVEPATCH2: post_patch_callback: vmlinux
72 $MOD_LIVEPATCH2: fix_console_loglevel: taking over the console_loglevel change
73 livepatch: '$MOD_LIVEPATCH2': patching complete
74 % rmmod $MOD_LIVEPATCH
75 % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled
76 livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
77 $MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
78 $MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel
79 livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
80 livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
81 $MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
82 $MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel
83 livepatch: '$MOD_LIVEPATCH2': unpatching complete
84 % rmmod $MOD_LIVEPATCH2"
85
86
87 # Take over system state change by a cumulative patch
88
89 start_test "compatible cumulative livepatches"
90
91 load_lp $MOD_LIVEPATCH2
92 load_lp $MOD_LIVEPATCH3
93 unload_lp $MOD_LIVEPATCH2
94 load_lp $MOD_LIVEPATCH2
95 disable_lp $MOD_LIVEPATCH2
96 unload_lp $MOD_LIVEPATCH2
97 unload_lp $MOD_LIVEPATCH3
98
99 check_result "% insmod test_modules/$MOD_LIVEPATCH2.ko
100 livepatch: enabling patch '$MOD_LIVEPATCH2'
101 livepatch: '$MOD_LIVEPATCH2': initializing patching transition
102 $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
103 $MOD_LIVEPATCH2: allocate_loglevel_state: allocating space to store console_loglevel
104 livepatch: '$MOD_LIVEPATCH2': starting patching transition
105 livepatch: '$MOD_LIVEPATCH2': completing patching transition
106 $MOD_LIVEPATCH2: post_patch_callback: vmlinux
107 $MOD_LIVEPATCH2: fix_console_loglevel: fixing console_loglevel
108 livepatch: '$MOD_LIVEPATCH2': patching complete
109 % insmod test_modules/$MOD_LIVEPATCH3.ko
110 livepatch: enabling patch '$MOD_LIVEPATCH3'
111 livepatch: '$MOD_LIVEPATCH3': initializing patching transition
112 $MOD_LIVEPATCH3: pre_patch_callback: vmlinux
113 $MOD_LIVEPATCH3: allocate_loglevel_state: space to store console_loglevel already allocated
114 livepatch: '$MOD_LIVEPATCH3': starting patching transition
115 livepatch: '$MOD_LIVEPATCH3': completing patching transition
116 $MOD_LIVEPATCH3: post_patch_callback: vmlinux
117 $MOD_LIVEPATCH3: fix_console_loglevel: taking over the console_loglevel change
118 livepatch: '$MOD_LIVEPATCH3': patching complete
119 % rmmod $MOD_LIVEPATCH2
120 % insmod test_modules/$MOD_LIVEPATCH2.ko
121 livepatch: enabling patch '$MOD_LIVEPATCH2'
122 livepatch: '$MOD_LIVEPATCH2': initializing patching transition
123 $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
124 $MOD_LIVEPATCH2: allocate_loglevel_state: space to store console_loglevel already allocated
125 livepatch: '$MOD_LIVEPATCH2': starting patching transition
126 livepatch: '$MOD_LIVEPATCH2': completing patching transition
127 $MOD_LIVEPATCH2: post_patch_callback: vmlinux
128 $MOD_LIVEPATCH2: fix_console_loglevel: taking over the console_loglevel change
129 livepatch: '$MOD_LIVEPATCH2': patching complete
130 % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled
131 livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
132 $MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
133 $MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel
134 livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
135 livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
136 $MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
137 $MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel
138 livepatch: '$MOD_LIVEPATCH2': unpatching complete
139 % rmmod $MOD_LIVEPATCH2
140 % rmmod $MOD_LIVEPATCH3"
141
142
143 # Failure caused by incompatible cumulative livepatches
144
145 start_test "incompatible cumulative livepatches"
146
147 load_lp $MOD_LIVEPATCH2
148 load_failing_mod $MOD_LIVEPATCH
149 disable_lp $MOD_LIVEPATCH2
150 unload_lp $MOD_LIVEPATCH2
151
152 check_result "% insmod test_modules/$MOD_LIVEPATCH2.ko
153 livepatch: enabling patch '$MOD_LIVEPATCH2'
154 livepatch: '$MOD_LIVEPATCH2': initializing patching transition
155 $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
156 $MOD_LIVEPATCH2: allocate_loglevel_state: allocating space to store console_loglevel
157 livepatch: '$MOD_LIVEPATCH2': starting patching transition
158 livepatch: '$MOD_LIVEPATCH2': completing patching transition
159 $MOD_LIVEPATCH2: post_patch_callback: vmlinux
160 $MOD_LIVEPATCH2: fix_console_loglevel: fixing console_loglevel
161 livepatch: '$MOD_LIVEPATCH2': patching complete
162 % insmod test_modules/$MOD_LIVEPATCH.ko
163 livepatch: Livepatch patch ($MOD_LIVEPATCH) is not compatible with the already installed livepatches.
164 insmod: ERROR: could not insert module test_modules/$MOD_LIVEPATCH.ko: Invalid parameters
165 % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled
166 livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
167 $MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
168 $MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel
169 livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
170 livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
171 $MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
172 $MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel
173 livepatch: '$MOD_LIVEPATCH2': unpatching complete
174 % rmmod $MOD_LIVEPATCH2"
175
176 exit 0