1ff1b80ecSSong Liu#!/bin/bash 2ff1b80ecSSong Liu# SPDX-License-Identifier: GPL-2.0 3ff1b80ecSSong Liu# Copyright (C) 2022 Song Liu <[email protected]> 4ff1b80ecSSong Liu 5ff1b80ecSSong Liu. $(dirname $0)/functions.sh 6ff1b80ecSSong Liu 7ff1b80ecSSong LiuMOD_LIVEPATCH=test_klp_livepatch 8*ed2ec63dSWardenjohnMOD_LIVEPATCH2=test_klp_callbacks_demo 9*ed2ec63dSWardenjohnMOD_LIVEPATCH3=test_klp_syscall 10ff1b80ecSSong Liu 11ff1b80ecSSong Liusetup_config 12ff1b80ecSSong Liu 13ff1b80ecSSong Liu# - load a livepatch and verifies the sysfs entries work as expected 14ff1b80ecSSong Liu 15ff1b80ecSSong Liustart_test "sysfs test" 16ff1b80ecSSong Liu 17ff1b80ecSSong Liuload_lp $MOD_LIVEPATCH 18ff1b80ecSSong Liu 19ff1b80ecSSong Liucheck_sysfs_rights "$MOD_LIVEPATCH" "" "drwxr-xr-x" 20ff1b80ecSSong Liucheck_sysfs_rights "$MOD_LIVEPATCH" "enabled" "-rw-r--r--" 21ff1b80ecSSong Liucheck_sysfs_value "$MOD_LIVEPATCH" "enabled" "1" 22ff1b80ecSSong Liucheck_sysfs_rights "$MOD_LIVEPATCH" "force" "--w-------" 2340f9caa7SYafang Shaocheck_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--" 24*ed2ec63dSWardenjohncheck_sysfs_rights "$MOD_LIVEPATCH" "stack_order" "-r--r--r--" 25*ed2ec63dSWardenjohncheck_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1" 26ff1b80ecSSong Liucheck_sysfs_rights "$MOD_LIVEPATCH" "transition" "-r--r--r--" 27ff1b80ecSSong Liucheck_sysfs_value "$MOD_LIVEPATCH" "transition" "0" 28ff1b80ecSSong Liucheck_sysfs_rights "$MOD_LIVEPATCH" "vmlinux/patched" "-r--r--r--" 29ff1b80ecSSong Liucheck_sysfs_value "$MOD_LIVEPATCH" "vmlinux/patched" "1" 30ff1b80ecSSong Liu 31ff1b80ecSSong Liudisable_lp $MOD_LIVEPATCH 32ff1b80ecSSong Liu 33ff1b80ecSSong Liuunload_lp $MOD_LIVEPATCH 34ff1b80ecSSong Liu 35c4bbe83dSMarcos Paulo de Souzacheck_result "% insmod test_modules/$MOD_LIVEPATCH.ko 36ff1b80ecSSong Liulivepatch: enabling patch '$MOD_LIVEPATCH' 37ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': initializing patching transition 38ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': starting patching transition 39ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': completing patching transition 40ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': patching complete 41637c7309SMichael Vetter% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled 42ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': initializing unpatching transition 43ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': starting unpatching transition 44ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': completing unpatching transition 45ff1b80ecSSong Liulivepatch: '$MOD_LIVEPATCH': unpatching complete 46ff1b80ecSSong Liu% rmmod $MOD_LIVEPATCH" 47ff1b80ecSSong Liu 48ff1b80ecSSong Liustart_test "sysfs test object/patched" 49ff1b80ecSSong Liu 50ff1b80ecSSong LiuMOD_LIVEPATCH=test_klp_callbacks_demo 51ff1b80ecSSong LiuMOD_TARGET=test_klp_callbacks_mod 52ff1b80ecSSong Liuload_lp $MOD_LIVEPATCH 53ff1b80ecSSong Liu 54ff1b80ecSSong Liu# check the "patch" file changes as target module loads/unloads 55ff1b80ecSSong Liucheck_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0" 56ff1b80ecSSong Liuload_mod $MOD_TARGET 57ff1b80ecSSong Liucheck_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "1" 58ff1b80ecSSong Liuunload_mod $MOD_TARGET 59ff1b80ecSSong Liucheck_sysfs_value "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0" 60ff1b80ecSSong Liu 61ff1b80ecSSong Liudisable_lp $MOD_LIVEPATCH 62ff1b80ecSSong Liuunload_lp $MOD_LIVEPATCH 63ff1b80ecSSong Liu 64c4bbe83dSMarcos Paulo de Souzacheck_result "% insmod test_modules/test_klp_callbacks_demo.ko 65ff1b80ecSSong Liulivepatch: enabling patch 'test_klp_callbacks_demo' 66ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': initializing patching transition 67ff1b80ecSSong Liutest_klp_callbacks_demo: pre_patch_callback: vmlinux 68ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': starting patching transition 69ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': completing patching transition 70ff1b80ecSSong Liutest_klp_callbacks_demo: post_patch_callback: vmlinux 71ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': patching complete 72c4bbe83dSMarcos Paulo de Souza% insmod test_modules/test_klp_callbacks_mod.ko 73ff1b80ecSSong Liulivepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod' 74ff1b80ecSSong Liutest_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init 75ff1b80ecSSong Liutest_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init 76ff1b80ecSSong Liutest_klp_callbacks_mod: test_klp_callbacks_mod_init 77ff1b80ecSSong Liu% rmmod test_klp_callbacks_mod 78ff1b80ecSSong Liutest_klp_callbacks_mod: test_klp_callbacks_mod_exit 79ff1b80ecSSong Liutest_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away 80ff1b80ecSSong Liulivepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod' 81ff1b80ecSSong Liutest_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away 82637c7309SMichael Vetter% echo 0 > $SYSFS_KLP_DIR/test_klp_callbacks_demo/enabled 83ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': initializing unpatching transition 84ff1b80ecSSong Liutest_klp_callbacks_demo: pre_unpatch_callback: vmlinux 85ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': starting unpatching transition 86ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': completing unpatching transition 87ff1b80ecSSong Liutest_klp_callbacks_demo: post_unpatch_callback: vmlinux 88ff1b80ecSSong Liulivepatch: 'test_klp_callbacks_demo': unpatching complete 89ff1b80ecSSong Liu% rmmod test_klp_callbacks_demo" 90ff1b80ecSSong Liu 9140f9caa7SYafang Shaostart_test "sysfs test replace enabled" 9240f9caa7SYafang Shao 9340f9caa7SYafang ShaoMOD_LIVEPATCH=test_klp_atomic_replace 9440f9caa7SYafang Shaoload_lp $MOD_LIVEPATCH replace=1 9540f9caa7SYafang Shao 9640f9caa7SYafang Shaocheck_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--" 9740f9caa7SYafang Shaocheck_sysfs_value "$MOD_LIVEPATCH" "replace" "1" 9840f9caa7SYafang Shao 9940f9caa7SYafang Shaodisable_lp $MOD_LIVEPATCH 10040f9caa7SYafang Shaounload_lp $MOD_LIVEPATCH 10140f9caa7SYafang Shao 10240f9caa7SYafang Shaocheck_result "% insmod test_modules/$MOD_LIVEPATCH.ko replace=1 10340f9caa7SYafang Shaolivepatch: enabling patch '$MOD_LIVEPATCH' 10440f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': initializing patching transition 10540f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': starting patching transition 10640f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': completing patching transition 10740f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': patching complete 108637c7309SMichael Vetter% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled 10940f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': initializing unpatching transition 11040f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': starting unpatching transition 11140f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': completing unpatching transition 11240f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': unpatching complete 11340f9caa7SYafang Shao% rmmod $MOD_LIVEPATCH" 11440f9caa7SYafang Shao 11540f9caa7SYafang Shaostart_test "sysfs test replace disabled" 11640f9caa7SYafang Shao 11740f9caa7SYafang Shaoload_lp $MOD_LIVEPATCH replace=0 11840f9caa7SYafang Shao 11940f9caa7SYafang Shaocheck_sysfs_rights "$MOD_LIVEPATCH" "replace" "-r--r--r--" 12040f9caa7SYafang Shaocheck_sysfs_value "$MOD_LIVEPATCH" "replace" "0" 12140f9caa7SYafang Shao 12240f9caa7SYafang Shaodisable_lp $MOD_LIVEPATCH 12340f9caa7SYafang Shaounload_lp $MOD_LIVEPATCH 12440f9caa7SYafang Shao 12540f9caa7SYafang Shaocheck_result "% insmod test_modules/$MOD_LIVEPATCH.ko replace=0 12640f9caa7SYafang Shaolivepatch: enabling patch '$MOD_LIVEPATCH' 12740f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': initializing patching transition 12840f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': starting patching transition 12940f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': completing patching transition 13040f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': patching complete 131637c7309SMichael Vetter% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled 13240f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': initializing unpatching transition 13340f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': starting unpatching transition 13440f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': completing unpatching transition 13540f9caa7SYafang Shaolivepatch: '$MOD_LIVEPATCH': unpatching complete 13640f9caa7SYafang Shao% rmmod $MOD_LIVEPATCH" 13740f9caa7SYafang Shao 138*ed2ec63dSWardenjohnstart_test "sysfs test stack_order value" 139*ed2ec63dSWardenjohn 140*ed2ec63dSWardenjohnload_lp $MOD_LIVEPATCH 141*ed2ec63dSWardenjohn 142*ed2ec63dSWardenjohncheck_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1" 143*ed2ec63dSWardenjohn 144*ed2ec63dSWardenjohnload_lp $MOD_LIVEPATCH2 145*ed2ec63dSWardenjohn 146*ed2ec63dSWardenjohncheck_sysfs_value "$MOD_LIVEPATCH2" "stack_order" "2" 147*ed2ec63dSWardenjohn 148*ed2ec63dSWardenjohnload_lp $MOD_LIVEPATCH3 149*ed2ec63dSWardenjohn 150*ed2ec63dSWardenjohncheck_sysfs_value "$MOD_LIVEPATCH3" "stack_order" "3" 151*ed2ec63dSWardenjohn 152*ed2ec63dSWardenjohndisable_lp $MOD_LIVEPATCH2 153*ed2ec63dSWardenjohnunload_lp $MOD_LIVEPATCH2 154*ed2ec63dSWardenjohn 155*ed2ec63dSWardenjohncheck_sysfs_value "$MOD_LIVEPATCH" "stack_order" "1" 156*ed2ec63dSWardenjohncheck_sysfs_value "$MOD_LIVEPATCH3" "stack_order" "2" 157*ed2ec63dSWardenjohn 158*ed2ec63dSWardenjohndisable_lp $MOD_LIVEPATCH3 159*ed2ec63dSWardenjohnunload_lp $MOD_LIVEPATCH3 160*ed2ec63dSWardenjohn 161*ed2ec63dSWardenjohndisable_lp $MOD_LIVEPATCH 162*ed2ec63dSWardenjohnunload_lp $MOD_LIVEPATCH 163*ed2ec63dSWardenjohn 164*ed2ec63dSWardenjohncheck_result "% insmod test_modules/$MOD_LIVEPATCH.ko 165*ed2ec63dSWardenjohnlivepatch: enabling patch '$MOD_LIVEPATCH' 166*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': initializing patching transition 167*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': starting patching transition 168*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': completing patching transition 169*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': patching complete 170*ed2ec63dSWardenjohn% insmod test_modules/$MOD_LIVEPATCH2.ko 171*ed2ec63dSWardenjohnlivepatch: enabling patch '$MOD_LIVEPATCH2' 172*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': initializing patching transition 173*ed2ec63dSWardenjohn$MOD_LIVEPATCH2: pre_patch_callback: vmlinux 174*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': starting patching transition 175*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': completing patching transition 176*ed2ec63dSWardenjohn$MOD_LIVEPATCH2: post_patch_callback: vmlinux 177*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': patching complete 178*ed2ec63dSWardenjohn% insmod test_modules/$MOD_LIVEPATCH3.ko 179*ed2ec63dSWardenjohnlivepatch: enabling patch '$MOD_LIVEPATCH3' 180*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': initializing patching transition 181*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': starting patching transition 182*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': completing patching transition 183*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': patching complete 184*ed2ec63dSWardenjohn% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH2/enabled 185*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': initializing unpatching transition 186*ed2ec63dSWardenjohn$MOD_LIVEPATCH2: pre_unpatch_callback: vmlinux 187*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': starting unpatching transition 188*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': completing unpatching transition 189*ed2ec63dSWardenjohn$MOD_LIVEPATCH2: post_unpatch_callback: vmlinux 190*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH2': unpatching complete 191*ed2ec63dSWardenjohn% rmmod $MOD_LIVEPATCH2 192*ed2ec63dSWardenjohn% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH3/enabled 193*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': initializing unpatching transition 194*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': starting unpatching transition 195*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': completing unpatching transition 196*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH3': unpatching complete 197*ed2ec63dSWardenjohn% rmmod $MOD_LIVEPATCH3 198*ed2ec63dSWardenjohn% echo 0 > $SYSFS_KLP_DIR/$MOD_LIVEPATCH/enabled 199*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': initializing unpatching transition 200*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': starting unpatching transition 201*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': completing unpatching transition 202*ed2ec63dSWardenjohnlivepatch: '$MOD_LIVEPATCH': unpatching complete 203*ed2ec63dSWardenjohn% rmmod $MOD_LIVEPATCH" 204*ed2ec63dSWardenjohn 205ff1b80ecSSong Liuexit 0 206