Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  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
  7MOD_LIVEPATCH1=test_klp_livepatch
  8MOD_LIVEPATCH2=test_klp_syscall
  9MOD_LIVEPATCH3=test_klp_callbacks_demo
 10MOD_REPLACE=test_klp_atomic_replace
 11
 12setup_config
 13
 14
 15# - load a livepatch that modifies the output from /proc/cmdline and
 16#   verify correct behavior
 17# - unload the livepatch and make sure the patch was removed
 18
 19start_test "basic function patching"
 20
 21load_lp $MOD_LIVEPATCH1
 22
 23if [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH1: this has been live patched" ]] ; then
 24	echo -e "FAIL\n\n"
 25	die "livepatch kselftest(s) failed"
 26fi
 27
 28disable_lp $MOD_LIVEPATCH1
 29unload_lp $MOD_LIVEPATCH1
 30
 31if [[ "$(cat /proc/cmdline)" == "$MOD_LIVEPATCH1: this has been live patched" ]] ; then
 32	echo -e "FAIL\n\n"
 33	die "livepatch kselftest(s) failed"
 34fi
 35
 36check_result "% insmod test_modules/$MOD_LIVEPATCH1.ko
 37livepatch: enabling patch '$MOD_LIVEPATCH1'
 38livepatch: '$MOD_LIVEPATCH1': initializing patching transition
 39livepatch: '$MOD_LIVEPATCH1': starting patching transition
 40livepatch: '$MOD_LIVEPATCH1': completing patching transition
 41livepatch: '$MOD_LIVEPATCH1': patching complete
 42% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH1/enabled
 43livepatch: '$MOD_LIVEPATCH1': initializing unpatching transition
 44livepatch: '$MOD_LIVEPATCH1': starting unpatching transition
 45livepatch: '$MOD_LIVEPATCH1': completing unpatching transition
 46livepatch: '$MOD_LIVEPATCH1': unpatching complete
 47% rmmod $MOD_LIVEPATCH1"
 48
 49
 50# - load a livepatch that modifies the output from /proc/cmdline and
 51#   verify correct behavior
 52# - load another livepatch and verify that both livepatches are active
 53# - unload the second livepatch and verify that the first is still active
 54# - unload the first livepatch and verify none are active
 55
 56start_test "multiple livepatches"
 57
 58load_lp $MOD_LIVEPATCH1
 59
 60grep 'live patched' /proc/cmdline > /dev/kmsg
 61grep 'live patched' /proc/meminfo > /dev/kmsg
 62
 63load_lp $MOD_REPLACE replace=0
 64
 65grep 'live patched' /proc/cmdline > /dev/kmsg
 66grep 'live patched' /proc/meminfo > /dev/kmsg
 67
 68disable_lp $MOD_REPLACE
 69unload_lp $MOD_REPLACE
 70
 71grep 'live patched' /proc/cmdline > /dev/kmsg
 72grep 'live patched' /proc/meminfo > /dev/kmsg
 73
 74disable_lp $MOD_LIVEPATCH1
 75unload_lp $MOD_LIVEPATCH1
 76
 77grep 'live patched' /proc/cmdline > /dev/kmsg
 78grep 'live patched' /proc/meminfo > /dev/kmsg
 79
 80check_result "% insmod test_modules/$MOD_LIVEPATCH1.ko
 81livepatch: enabling patch '$MOD_LIVEPATCH1'
 82livepatch: '$MOD_LIVEPATCH1': initializing patching transition
 83livepatch: '$MOD_LIVEPATCH1': starting patching transition
 84livepatch: '$MOD_LIVEPATCH1': completing patching transition
 85livepatch: '$MOD_LIVEPATCH1': patching complete
 86$MOD_LIVEPATCH1: this has been live patched
 87% insmod test_modules/$MOD_REPLACE.ko replace=0
 88livepatch: enabling patch '$MOD_REPLACE'
 89livepatch: '$MOD_REPLACE': initializing patching transition
 90livepatch: '$MOD_REPLACE': starting patching transition
 91livepatch: '$MOD_REPLACE': completing patching transition
 92livepatch: '$MOD_REPLACE': patching complete
 93$MOD_LIVEPATCH1: this has been live patched
 94$MOD_REPLACE: this has been live patched
 95% echo 0 > $SYSFS_KLP_DIR/$MOD_REPLACE/enabled
 96livepatch: '$MOD_REPLACE': initializing unpatching transition
 97livepatch: '$MOD_REPLACE': starting unpatching transition
 98livepatch: '$MOD_REPLACE': completing unpatching transition
 99livepatch: '$MOD_REPLACE': unpatching complete
100% rmmod $MOD_REPLACE
101$MOD_LIVEPATCH1: this has been live patched
102% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH1/enabled
103livepatch: '$MOD_LIVEPATCH1': initializing unpatching transition
104livepatch: '$MOD_LIVEPATCH1': starting unpatching transition
105livepatch: '$MOD_LIVEPATCH1': completing unpatching transition
106livepatch: '$MOD_LIVEPATCH1': unpatching complete
107% rmmod $MOD_LIVEPATCH1"
108
109
110# - load a livepatch that modifies the output from /proc/cmdline and
111#   verify correct behavior
112# - load two additional livepatches and check the number of livepatch modules
113#   applied
114# - load an atomic replace livepatch and check that the other three modules were
115#   disabled
116# - remove all livepatches besides the atomic replace one and verify that the
117#   atomic replace livepatch is still active
118# - remove the atomic replace livepatch and verify that none are active
119
120start_test "atomic replace livepatch"
121
122load_lp $MOD_LIVEPATCH1
123
124grep 'live patched' /proc/cmdline > /dev/kmsg
125grep 'live patched' /proc/meminfo > /dev/kmsg
126
127for mod in $MOD_LIVEPATCH2 $MOD_LIVEPATCH3; do
128	load_lp "$mod"
129done
130
131mods=($SYSFS_KLP_DIR/*)
132nmods=${#mods[@]}
133if [ "$nmods" -ne 3 ]; then
134	die "Expecting three modules listed, found $nmods"
135fi
136
137load_lp $MOD_REPLACE replace=1
138
139grep 'live patched' /proc/cmdline > /dev/kmsg
140grep 'live patched' /proc/meminfo > /dev/kmsg
141
142loop_until 'mods=($SYSFS_KLP_DIR/*); nmods=${#mods[@]}; [[ "$nmods" -eq 1 ]]' ||
143        die "Expecting only one moduled listed, found $nmods"
144
145# These modules were disabled by the atomic replace
146for mod in $MOD_LIVEPATCH3 $MOD_LIVEPATCH2 $MOD_LIVEPATCH1; do
147	unload_lp "$mod"
148done
149
150grep 'live patched' /proc/cmdline > /dev/kmsg
151grep 'live patched' /proc/meminfo > /dev/kmsg
152
153disable_lp $MOD_REPLACE
154unload_lp $MOD_REPLACE
155
156grep 'live patched' /proc/cmdline > /dev/kmsg
157grep 'live patched' /proc/meminfo > /dev/kmsg
158
159check_result "% insmod test_modules/$MOD_LIVEPATCH1.ko
160livepatch: enabling patch '$MOD_LIVEPATCH1'
161livepatch: '$MOD_LIVEPATCH1': initializing patching transition
162livepatch: '$MOD_LIVEPATCH1': starting patching transition
163livepatch: '$MOD_LIVEPATCH1': completing patching transition
164livepatch: '$MOD_LIVEPATCH1': patching complete
165$MOD_LIVEPATCH1: this has been live patched
166% insmod test_modules/$MOD_LIVEPATCH2.ko
167livepatch: enabling patch '$MOD_LIVEPATCH2'
168livepatch: '$MOD_LIVEPATCH2': initializing patching transition
169livepatch: '$MOD_LIVEPATCH2': starting patching transition
170livepatch: '$MOD_LIVEPATCH2': completing patching transition
171livepatch: '$MOD_LIVEPATCH2': patching complete
172% insmod test_modules/$MOD_LIVEPATCH3.ko
173livepatch: enabling patch '$MOD_LIVEPATCH3'
174livepatch: '$MOD_LIVEPATCH3': initializing patching transition
175$MOD_LIVEPATCH3: pre_patch_callback: vmlinux
176livepatch: '$MOD_LIVEPATCH3': starting patching transition
177livepatch: '$MOD_LIVEPATCH3': completing patching transition
178$MOD_LIVEPATCH3: post_patch_callback: vmlinux
179livepatch: '$MOD_LIVEPATCH3': patching complete
180% insmod test_modules/$MOD_REPLACE.ko replace=1
181livepatch: enabling patch '$MOD_REPLACE'
182livepatch: '$MOD_REPLACE': initializing patching transition
183livepatch: '$MOD_REPLACE': starting patching transition
184livepatch: '$MOD_REPLACE': completing patching transition
185livepatch: '$MOD_REPLACE': patching complete
186$MOD_REPLACE: this has been live patched
187% rmmod $MOD_LIVEPATCH3
188% rmmod $MOD_LIVEPATCH2
189% rmmod $MOD_LIVEPATCH1
190$MOD_REPLACE: this has been live patched
191% echo 0 > $SYSFS_KLP_DIR/$MOD_REPLACE/enabled
192livepatch: '$MOD_REPLACE': initializing unpatching transition
193livepatch: '$MOD_REPLACE': starting unpatching transition
194livepatch: '$MOD_REPLACE': completing unpatching transition
195livepatch: '$MOD_REPLACE': unpatching complete
196% rmmod $MOD_REPLACE"
197
198
199exit 0