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