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