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