mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
5.5 KiB
162 lines
5.5 KiB
#!/bin/bash |
|
# SPDX-License-Identifier: GPL-2.0 |
|
# Copyright (C) 2018 Joe Lawrence <[email protected]> |
|
|
|
. $(dirname $0)/functions.sh |
|
|
|
MOD_LIVEPATCH=test_klp_livepatch |
|
MOD_REPLACE=test_klp_atomic_replace |
|
|
|
setup_config |
|
|
|
|
|
# - load a livepatch that modifies the output from /proc/cmdline and |
|
# verify correct behavior |
|
# - unload the livepatch and make sure the patch was removed |
|
|
|
start_test "basic function patching" |
|
|
|
load_lp $MOD_LIVEPATCH |
|
|
|
if [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH: this has been live patched" ]] ; then |
|
echo -e "FAIL\n\n" |
|
die "livepatch kselftest(s) failed" |
|
fi |
|
|
|
disable_lp $MOD_LIVEPATCH |
|
unload_lp $MOD_LIVEPATCH |
|
|
|
if [[ "$(cat /proc/cmdline)" == "$MOD_LIVEPATCH: this has been live patched" ]] ; then |
|
echo -e "FAIL\n\n" |
|
die "livepatch kselftest(s) failed" |
|
fi |
|
|
|
check_result "% modprobe $MOD_LIVEPATCH |
|
livepatch: enabling patch '$MOD_LIVEPATCH' |
|
livepatch: '$MOD_LIVEPATCH': initializing patching transition |
|
livepatch: '$MOD_LIVEPATCH': starting patching transition |
|
livepatch: '$MOD_LIVEPATCH': completing patching transition |
|
livepatch: '$MOD_LIVEPATCH': patching complete |
|
% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled |
|
livepatch: '$MOD_LIVEPATCH': initializing unpatching transition |
|
livepatch: '$MOD_LIVEPATCH': starting unpatching transition |
|
livepatch: '$MOD_LIVEPATCH': completing unpatching transition |
|
livepatch: '$MOD_LIVEPATCH': unpatching complete |
|
% rmmod $MOD_LIVEPATCH" |
|
|
|
|
|
# - load a livepatch that modifies the output from /proc/cmdline and |
|
# verify correct behavior |
|
# - load another livepatch and verify that both livepatches are active |
|
# - unload the second livepatch and verify that the first is still active |
|
# - unload the first livepatch and verify none are active |
|
|
|
start_test "multiple livepatches" |
|
|
|
load_lp $MOD_LIVEPATCH |
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg |
|
grep 'live patched' /proc/meminfo > /dev/kmsg |
|
|
|
load_lp $MOD_REPLACE replace=0 |
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg |
|
grep 'live patched' /proc/meminfo > /dev/kmsg |
|
|
|
disable_lp $MOD_REPLACE |
|
unload_lp $MOD_REPLACE |
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg |
|
grep 'live patched' /proc/meminfo > /dev/kmsg |
|
|
|
disable_lp $MOD_LIVEPATCH |
|
unload_lp $MOD_LIVEPATCH |
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg |
|
grep 'live patched' /proc/meminfo > /dev/kmsg |
|
|
|
check_result "% modprobe $MOD_LIVEPATCH |
|
livepatch: enabling patch '$MOD_LIVEPATCH' |
|
livepatch: '$MOD_LIVEPATCH': initializing patching transition |
|
livepatch: '$MOD_LIVEPATCH': starting patching transition |
|
livepatch: '$MOD_LIVEPATCH': completing patching transition |
|
livepatch: '$MOD_LIVEPATCH': patching complete |
|
$MOD_LIVEPATCH: this has been live patched |
|
% modprobe $MOD_REPLACE replace=0 |
|
livepatch: enabling patch '$MOD_REPLACE' |
|
livepatch: '$MOD_REPLACE': initializing patching transition |
|
livepatch: '$MOD_REPLACE': starting patching transition |
|
livepatch: '$MOD_REPLACE': completing patching transition |
|
livepatch: '$MOD_REPLACE': patching complete |
|
$MOD_LIVEPATCH: this has been live patched |
|
$MOD_REPLACE: this has been live patched |
|
% echo 0 > /sys/kernel/livepatch/$MOD_REPLACE/enabled |
|
livepatch: '$MOD_REPLACE': initializing unpatching transition |
|
livepatch: '$MOD_REPLACE': starting unpatching transition |
|
livepatch: '$MOD_REPLACE': completing unpatching transition |
|
livepatch: '$MOD_REPLACE': unpatching complete |
|
% rmmod $MOD_REPLACE |
|
$MOD_LIVEPATCH: this has been live patched |
|
% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled |
|
livepatch: '$MOD_LIVEPATCH': initializing unpatching transition |
|
livepatch: '$MOD_LIVEPATCH': starting unpatching transition |
|
livepatch: '$MOD_LIVEPATCH': completing unpatching transition |
|
livepatch: '$MOD_LIVEPATCH': unpatching complete |
|
% rmmod $MOD_LIVEPATCH" |
|
|
|
|
|
# - load a livepatch that modifies the output from /proc/cmdline and |
|
# verify correct behavior |
|
# - load an atomic replace livepatch and verify that only the second is active |
|
# - remove the first livepatch and verify that the atomic replace livepatch |
|
# is still active |
|
# - remove the atomic replace livepatch and verify that none are active |
|
|
|
start_test "atomic replace livepatch" |
|
|
|
load_lp $MOD_LIVEPATCH |
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg |
|
grep 'live patched' /proc/meminfo > /dev/kmsg |
|
|
|
load_lp $MOD_REPLACE replace=1 |
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg |
|
grep 'live patched' /proc/meminfo > /dev/kmsg |
|
|
|
unload_lp $MOD_LIVEPATCH |
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg |
|
grep 'live patched' /proc/meminfo > /dev/kmsg |
|
|
|
disable_lp $MOD_REPLACE |
|
unload_lp $MOD_REPLACE |
|
|
|
grep 'live patched' /proc/cmdline > /dev/kmsg |
|
grep 'live patched' /proc/meminfo > /dev/kmsg |
|
|
|
check_result "% modprobe $MOD_LIVEPATCH |
|
livepatch: enabling patch '$MOD_LIVEPATCH' |
|
livepatch: '$MOD_LIVEPATCH': initializing patching transition |
|
livepatch: '$MOD_LIVEPATCH': starting patching transition |
|
livepatch: '$MOD_LIVEPATCH': completing patching transition |
|
livepatch: '$MOD_LIVEPATCH': patching complete |
|
$MOD_LIVEPATCH: this has been live patched |
|
% modprobe $MOD_REPLACE replace=1 |
|
livepatch: enabling patch '$MOD_REPLACE' |
|
livepatch: '$MOD_REPLACE': initializing patching transition |
|
livepatch: '$MOD_REPLACE': starting patching transition |
|
livepatch: '$MOD_REPLACE': completing patching transition |
|
livepatch: '$MOD_REPLACE': patching complete |
|
$MOD_REPLACE: this has been live patched |
|
% rmmod $MOD_LIVEPATCH |
|
$MOD_REPLACE: this has been live patched |
|
% echo 0 > /sys/kernel/livepatch/$MOD_REPLACE/enabled |
|
livepatch: '$MOD_REPLACE': initializing unpatching transition |
|
livepatch: '$MOD_REPLACE': starting unpatching transition |
|
livepatch: '$MOD_REPLACE': completing unpatching transition |
|
livepatch: '$MOD_REPLACE': unpatching complete |
|
% rmmod $MOD_REPLACE" |
|
|
|
|
|
exit 0
|
|
|