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