^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) 2019 SUSE
^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_state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) MOD_LIVEPATCH2=test_klp_state2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) MOD_LIVEPATCH3=test_klp_state3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) setup_config
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) # Load and remove a module that modifies the system state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) start_test "system state modification"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) load_lp $MOD_LIVEPATCH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) disable_lp $MOD_LIVEPATCH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) unload_lp $MOD_LIVEPATCH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) check_result "% modprobe $MOD_LIVEPATCH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) livepatch: enabling patch '$MOD_LIVEPATCH'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) livepatch: '$MOD_LIVEPATCH': initializing patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) $MOD_LIVEPATCH: pre_patch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) $MOD_LIVEPATCH: allocate_loglevel_state: allocating space to store console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) livepatch: '$MOD_LIVEPATCH': starting patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) livepatch: '$MOD_LIVEPATCH': completing patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) $MOD_LIVEPATCH: post_patch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) $MOD_LIVEPATCH: fix_console_loglevel: fixing console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) livepatch: '$MOD_LIVEPATCH': patching complete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) $MOD_LIVEPATCH: pre_unpatch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) $MOD_LIVEPATCH: restore_console_loglevel: restoring console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) livepatch: '$MOD_LIVEPATCH': starting unpatching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) livepatch: '$MOD_LIVEPATCH': completing unpatching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) $MOD_LIVEPATCH: post_unpatch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) $MOD_LIVEPATCH: free_loglevel_state: freeing space for the stored console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) livepatch: '$MOD_LIVEPATCH': unpatching complete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) % rmmod $MOD_LIVEPATCH"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) # Take over system state change by a cumulative patch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) start_test "taking over system state modification"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) load_lp $MOD_LIVEPATCH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) load_lp $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) unload_lp $MOD_LIVEPATCH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) disable_lp $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) unload_lp $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) check_result "% modprobe $MOD_LIVEPATCH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) livepatch: enabling patch '$MOD_LIVEPATCH'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) livepatch: '$MOD_LIVEPATCH': initializing patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) $MOD_LIVEPATCH: pre_patch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) $MOD_LIVEPATCH: allocate_loglevel_state: allocating space to store console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) livepatch: '$MOD_LIVEPATCH': starting patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) livepatch: '$MOD_LIVEPATCH': completing patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) $MOD_LIVEPATCH: post_patch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) $MOD_LIVEPATCH: fix_console_loglevel: fixing console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) livepatch: '$MOD_LIVEPATCH': patching complete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) % modprobe $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) livepatch: enabling patch '$MOD_LIVEPATCH2'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) livepatch: '$MOD_LIVEPATCH2': initializing patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) $MOD_LIVEPATCH2: allocate_loglevel_state: space to store console_loglevel already allocated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) livepatch: '$MOD_LIVEPATCH2': starting patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) livepatch: '$MOD_LIVEPATCH2': completing patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) $MOD_LIVEPATCH2: post_patch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) $MOD_LIVEPATCH2: fix_console_loglevel: taking over the console_loglevel change
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) livepatch: '$MOD_LIVEPATCH2': patching complete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) % rmmod $MOD_LIVEPATCH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) $MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) $MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) $MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) $MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) livepatch: '$MOD_LIVEPATCH2': unpatching complete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) % rmmod $MOD_LIVEPATCH2"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) # Take over system state change by a cumulative patch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) start_test "compatible cumulative livepatches"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) load_lp $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) load_lp $MOD_LIVEPATCH3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) unload_lp $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) load_lp $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) disable_lp $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) unload_lp $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) unload_lp $MOD_LIVEPATCH3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) check_result "% modprobe $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) livepatch: enabling patch '$MOD_LIVEPATCH2'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) livepatch: '$MOD_LIVEPATCH2': initializing patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) $MOD_LIVEPATCH2: allocate_loglevel_state: allocating space to store console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) livepatch: '$MOD_LIVEPATCH2': starting patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) livepatch: '$MOD_LIVEPATCH2': completing patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) $MOD_LIVEPATCH2: post_patch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) $MOD_LIVEPATCH2: fix_console_loglevel: fixing console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) livepatch: '$MOD_LIVEPATCH2': patching complete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) % modprobe $MOD_LIVEPATCH3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) livepatch: enabling patch '$MOD_LIVEPATCH3'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) livepatch: '$MOD_LIVEPATCH3': initializing patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) $MOD_LIVEPATCH3: pre_patch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) $MOD_LIVEPATCH3: allocate_loglevel_state: space to store console_loglevel already allocated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) livepatch: '$MOD_LIVEPATCH3': starting patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) livepatch: '$MOD_LIVEPATCH3': completing patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) $MOD_LIVEPATCH3: post_patch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) $MOD_LIVEPATCH3: fix_console_loglevel: taking over the console_loglevel change
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) livepatch: '$MOD_LIVEPATCH3': patching complete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) % rmmod $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) % modprobe $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) livepatch: enabling patch '$MOD_LIVEPATCH2'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) livepatch: '$MOD_LIVEPATCH2': initializing patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) $MOD_LIVEPATCH2: allocate_loglevel_state: space to store console_loglevel already allocated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) livepatch: '$MOD_LIVEPATCH2': starting patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) livepatch: '$MOD_LIVEPATCH2': completing patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) $MOD_LIVEPATCH2: post_patch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) $MOD_LIVEPATCH2: fix_console_loglevel: taking over the console_loglevel change
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) livepatch: '$MOD_LIVEPATCH2': patching complete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) $MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) $MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) $MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) $MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) livepatch: '$MOD_LIVEPATCH2': unpatching complete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) % rmmod $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) % rmmod $MOD_LIVEPATCH3"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) # Failure caused by incompatible cumulative livepatches
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) start_test "incompatible cumulative livepatches"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) load_lp $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) load_failing_mod $MOD_LIVEPATCH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) disable_lp $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) unload_lp $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) check_result "% modprobe $MOD_LIVEPATCH2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) livepatch: enabling patch '$MOD_LIVEPATCH2'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) livepatch: '$MOD_LIVEPATCH2': initializing patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) $MOD_LIVEPATCH2: pre_patch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) $MOD_LIVEPATCH2: allocate_loglevel_state: allocating space to store console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) livepatch: '$MOD_LIVEPATCH2': starting patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) livepatch: '$MOD_LIVEPATCH2': completing patching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) $MOD_LIVEPATCH2: post_patch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) $MOD_LIVEPATCH2: fix_console_loglevel: fixing console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) livepatch: '$MOD_LIVEPATCH2': patching complete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) % modprobe $MOD_LIVEPATCH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) livepatch: Livepatch patch ($MOD_LIVEPATCH) is not compatible with the already installed livepatches.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) modprobe: ERROR: could not insert '$MOD_LIVEPATCH': Invalid argument
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) % echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH2/enabled
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) $MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) $MOD_LIVEPATCH2: restore_console_loglevel: restoring console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) livepatch: '$MOD_LIVEPATCH2': starting unpatching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) livepatch: '$MOD_LIVEPATCH2': completing unpatching transition
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) $MOD_LIVEPATCH2: post_unpatch_callback: vmlinux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) $MOD_LIVEPATCH2: free_loglevel_state: freeing space for the stored console_loglevel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) livepatch: '$MOD_LIVEPATCH2': unpatching complete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) % rmmod $MOD_LIVEPATCH2"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) exit 0