1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3# Copyright (C) 2022 Song Liu <[email protected]> 4 5. $(dirname $0)/functions.sh 6 7MOD_LIVEPATCH=test_klp_livepatch 8MOD_LIVEPATCH2=test_klp_callbacks_demo 9MOD_LIVEPATCH3=test_klp_syscall 10 11setup_config 12 13# - load a livepatch and verifies the sysfs entries work as expected 14 15start_test "sysfs test" 16 17load_lp $MOD_LIVEPATCH 18 19check_sysfs_rights "$MOD_LIVEPATCH" "" "drwxr-xr-x" 20check_sysfs_rights "$MOD_LIVEPATCH" "enabled" "-rw-r--r--" 21check_sysfs_value "$MOD_LIVEPATCH" "enabled" "1" 22check_sysfs_rights "$MOD_LIVEPATCH" "force" "--w-------" 23check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--" 24check_sysfs_rights "$MOD_LIVEPATCH" "stack_order" "-r--r--r--" 25check_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1" 26check_sysfs_rights "$MOD_LIVEPATCH" "transition" "-r--r--r--" 27check_sysfs_value "$MOD_LIVEPATCH" "transition" "0" 28check_sysfs_rights "$MOD_LIVEPATCH" "vmlinux/patched" "-r--r--r--" 29check_sysfs_value "$MOD_LIVEPATCH" "vmlinux/patched" "1" 30 31disable_lp $MOD_LIVEPATCH 32 33unload_lp $MOD_LIVEPATCH 34 35check_result "% insmod test_modules/$MOD_LIVEPATCH.ko 36livepatch: enabling patch '$MOD_LIVEPATCH' 37livepatch: '$MOD_LIVEPATCH': initializing patching transition 38livepatch: '$MOD_LIVEPATCH': starting patching transition 39livepatch: '$MOD_LIVEPATCH': completing patching transition 40livepatch: '$MOD_LIVEPATCH': patching complete 41% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled 42livepatch: '$MOD_LIVEPATCH': initializing unpatching transition 43livepatch: '$MOD_LIVEPATCH': starting unpatching transition 44livepatch: '$MOD_LIVEPATCH': completing unpatching transition 45livepatch: '$MOD_LIVEPATCH': unpatching complete 46% rmmod $MOD_LIVEPATCH" 47 48start_test "sysfs test object/patched" 49 50MOD_LIVEPATCH=test_klp_callbacks_demo 51MOD_TARGET=test_klp_callbacks_mod 52load_lp $MOD_LIVEPATCH 53 54# check the "patch" file changes as target module loads/unloads 55check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0" 56load_mod $MOD_TARGET 57check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "1" 58unload_mod $MOD_TARGET 59check_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0" 60 61disable_lp $MOD_LIVEPATCH 62unload_lp $MOD_LIVEPATCH 63 64check_result "% insmod test_modules/test_klp_callbacks_demo.ko 65livepatch: enabling patch 'test_klp_callbacks_demo' 66livepatch: 'test_klp_callbacks_demo': initializing patching transition 67test_klp_callbacks_demo: pre_patch_callback: vmlinux 68livepatch: 'test_klp_callbacks_demo': starting patching transition 69livepatch: 'test_klp_callbacks_demo': completing patching transition 70test_klp_callbacks_demo: post_patch_callback: vmlinux 71livepatch: 'test_klp_callbacks_demo': patching complete 72% insmod test_modules/test_klp_callbacks_mod.ko 73livepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' 74test_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init 75test_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init 76test_klp_callbacks_mod: test_klp_callbacks_mod_init 77% rmmod test_klp_callbacks_mod 78test_klp_callbacks_mod: test_klp_callbacks_mod_exit 79test_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away 80livepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' 81test_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away 82% echo 0 > $SYSFS_KLP_DIR/test_klp_callbacks_demo/enabled 83livepatch: 'test_klp_callbacks_demo': initializing unpatching transition 84test_klp_callbacks_demo: pre_unpatch_callback: vmlinux 85livepatch: 'test_klp_callbacks_demo': starting unpatching transition 86livepatch: 'test_klp_callbacks_demo': completing unpatching transition 87test_klp_callbacks_demo: post_unpatch_callback: vmlinux 88livepatch: 'test_klp_callbacks_demo': unpatching complete 89% rmmod test_klp_callbacks_demo" 90 91start_test "sysfs test replace enabled" 92 93MOD_LIVEPATCH=test_klp_atomic_replace 94load_lp $MOD_LIVEPATCH replace=1 95 96check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--" 97check_sysfs_value "$MOD_LIVEPATCH" "replace" "1" 98 99disable_lp $MOD_LIVEPATCH 100unload_lp $MOD_LIVEPATCH 101 102check_result "% insmod test_modules/$MOD_LIVEPATCH.ko replace=1 103livepatch: enabling patch '$MOD_LIVEPATCH' 104livepatch: '$MOD_LIVEPATCH': initializing patching transition 105livepatch: '$MOD_LIVEPATCH': starting patching transition 106livepatch: '$MOD_LIVEPATCH': completing patching transition 107livepatch: '$MOD_LIVEPATCH': patching complete 108% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled 109livepatch: '$MOD_LIVEPATCH': initializing unpatching transition 110livepatch: '$MOD_LIVEPATCH': starting unpatching transition 111livepatch: '$MOD_LIVEPATCH': completing unpatching transition 112livepatch: '$MOD_LIVEPATCH': unpatching complete 113% rmmod $MOD_LIVEPATCH" 114 115start_test "sysfs test replace disabled" 116 117load_lp $MOD_LIVEPATCH replace=0 118 119check_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--" 120check_sysfs_value "$MOD_LIVEPATCH" "replace" "0" 121 122disable_lp $MOD_LIVEPATCH 123unload_lp $MOD_LIVEPATCH 124 125check_result "% insmod test_modules/$MOD_LIVEPATCH.ko replace=0 126livepatch: enabling patch '$MOD_LIVEPATCH' 127livepatch: '$MOD_LIVEPATCH': initializing patching transition 128livepatch: '$MOD_LIVEPATCH': starting patching transition 129livepatch: '$MOD_LIVEPATCH': completing patching transition 130livepatch: '$MOD_LIVEPATCH': patching complete 131% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled 132livepatch: '$MOD_LIVEPATCH': initializing unpatching transition 133livepatch: '$MOD_LIVEPATCH': starting unpatching transition 134livepatch: '$MOD_LIVEPATCH': completing unpatching transition 135livepatch: '$MOD_LIVEPATCH': unpatching complete 136% rmmod $MOD_LIVEPATCH" 137 138start_test "sysfs test stack_order value" 139 140load_lp $MOD_LIVEPATCH 141 142check_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1" 143 144load_lp $MOD_LIVEPATCH2 145 146check_sysfs_value "$MOD_LIVEPATCH2" "stack_order" "2" 147 148load_lp $MOD_LIVEPATCH3 149 150check_sysfs_value "$MOD_LIVEPATCH3" "stack_order" "3" 151 152disable_lp $MOD_LIVEPATCH2 153unload_lp $MOD_LIVEPATCH2 154 155check_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1" 156check_sysfs_value "$MOD_LIVEPATCH3" "stack_order" "2" 157 158disable_lp $MOD_LIVEPATCH3 159unload_lp $MOD_LIVEPATCH3 160 161disable_lp $MOD_LIVEPATCH 162unload_lp $MOD_LIVEPATCH 163 164check_result "% insmod test_modules/$MOD_LIVEPATCH.ko 165livepatch: enabling patch '$MOD_LIVEPATCH' 166livepatch: '$MOD_LIVEPATCH': initializing patching transition 167livepatch: '$MOD_LIVEPATCH': starting patching transition 168livepatch: '$MOD_LIVEPATCH': completing patching transition 169livepatch: '$MOD_LIVEPATCH': patching complete 170% insmod test_modules/$MOD_LIVEPATCH2.ko 171livepatch: enabling patch '$MOD_LIVEPATCH2' 172livepatch: '$MOD_LIVEPATCH2': initializing patching transition 173$MOD_LIVEPATCH2: pre_patch_callback: vmlinux 174livepatch: '$MOD_LIVEPATCH2': starting patching transition 175livepatch: '$MOD_LIVEPATCH2': completing patching transition 176$MOD_LIVEPATCH2: post_patch_callback: vmlinux 177livepatch: '$MOD_LIVEPATCH2': patching complete 178% insmod test_modules/$MOD_LIVEPATCH3.ko 179livepatch: enabling patch '$MOD_LIVEPATCH3' 180livepatch: '$MOD_LIVEPATCH3': initializing patching transition 181livepatch: '$MOD_LIVEPATCH3': starting patching transition 182livepatch: '$MOD_LIVEPATCH3': completing patching transition 183livepatch: '$MOD_LIVEPATCH3': patching complete 184% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH2/enabled 185livepatch: '$MOD_LIVEPATCH2': initializing unpatching transition 186$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux 187livepatch: '$MOD_LIVEPATCH2': starting unpatching transition 188livepatch: '$MOD_LIVEPATCH2': completing unpatching transition 189$MOD_LIVEPATCH2: post_unpatch_callback: vmlinux 190livepatch: '$MOD_LIVEPATCH2': unpatching complete 191% rmmod $MOD_LIVEPATCH2 192% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH3/enabled 193livepatch: '$MOD_LIVEPATCH3': initializing unpatching transition 194livepatch: '$MOD_LIVEPATCH3': starting unpatching transition 195livepatch: '$MOD_LIVEPATCH3': completing unpatching transition 196livepatch: '$MOD_LIVEPATCH3': unpatching complete 197% rmmod $MOD_LIVEPATCH3 198% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled 199livepatch: '$MOD_LIVEPATCH': initializing unpatching transition 200livepatch: '$MOD_LIVEPATCH': starting unpatching transition 201livepatch: '$MOD_LIVEPATCH': completing unpatching transition 202livepatch: '$MOD_LIVEPATCH': unpatching complete 203% rmmod $MOD_LIVEPATCH" 204 205exit 0 206