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