162306a36Sopenharmony_ci#!/bin/bash
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
362306a36Sopenharmony_ci# Copyright (C) 2022 Song Liu <song@kernel.org>
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci. $(dirname $0)/functions.sh
662306a36Sopenharmony_ci
762306a36Sopenharmony_ciMOD_LIVEPATCH=test_klp_livepatch
862306a36Sopenharmony_ci
962306a36Sopenharmony_cisetup_config
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci# - load a livepatch and verifies the sysfs entries work as expected
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cistart_test "sysfs test"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ciload_lp $MOD_LIVEPATCH
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cicheck_sysfs_rights "$MOD_LIVEPATCH" "" "drwxr-xr-x"
1862306a36Sopenharmony_cicheck_sysfs_rights "$MOD_LIVEPATCH" "enabled" "-rw-r--r--"
1962306a36Sopenharmony_cicheck_sysfs_value  "$MOD_LIVEPATCH" "enabled" "1"
2062306a36Sopenharmony_cicheck_sysfs_rights "$MOD_LIVEPATCH" "force" "--w-------"
2162306a36Sopenharmony_cicheck_sysfs_rights "$MOD_LIVEPATCH" "transition" "-r--r--r--"
2262306a36Sopenharmony_cicheck_sysfs_value  "$MOD_LIVEPATCH" "transition" "0"
2362306a36Sopenharmony_cicheck_sysfs_rights "$MOD_LIVEPATCH" "vmlinux/patched" "-r--r--r--"
2462306a36Sopenharmony_cicheck_sysfs_value  "$MOD_LIVEPATCH" "vmlinux/patched" "1"
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_cidisable_lp $MOD_LIVEPATCH
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ciunload_lp $MOD_LIVEPATCH
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_cicheck_result "% modprobe $MOD_LIVEPATCH
3162306a36Sopenharmony_cilivepatch: enabling patch '$MOD_LIVEPATCH'
3262306a36Sopenharmony_cilivepatch: '$MOD_LIVEPATCH': initializing patching transition
3362306a36Sopenharmony_cilivepatch: '$MOD_LIVEPATCH': starting patching transition
3462306a36Sopenharmony_cilivepatch: '$MOD_LIVEPATCH': completing patching transition
3562306a36Sopenharmony_cilivepatch: '$MOD_LIVEPATCH': patching complete
3662306a36Sopenharmony_ci% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
3762306a36Sopenharmony_cilivepatch: '$MOD_LIVEPATCH': initializing unpatching transition
3862306a36Sopenharmony_cilivepatch: '$MOD_LIVEPATCH': starting unpatching transition
3962306a36Sopenharmony_cilivepatch: '$MOD_LIVEPATCH': completing unpatching transition
4062306a36Sopenharmony_cilivepatch: '$MOD_LIVEPATCH': unpatching complete
4162306a36Sopenharmony_ci% rmmod $MOD_LIVEPATCH"
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_cistart_test "sysfs test object/patched"
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ciMOD_LIVEPATCH=test_klp_callbacks_demo
4662306a36Sopenharmony_ciMOD_TARGET=test_klp_callbacks_mod
4762306a36Sopenharmony_ciload_lp $MOD_LIVEPATCH
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci# check the "patch" file changes as target module loads/unloads
5062306a36Sopenharmony_cicheck_sysfs_value  "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0"
5162306a36Sopenharmony_ciload_mod $MOD_TARGET
5262306a36Sopenharmony_cicheck_sysfs_value  "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "1"
5362306a36Sopenharmony_ciunload_mod $MOD_TARGET
5462306a36Sopenharmony_cicheck_sysfs_value  "$MOD_LIVEPATCH" "$MOD_TARGET/patched" "0"
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_cidisable_lp $MOD_LIVEPATCH
5762306a36Sopenharmony_ciunload_lp $MOD_LIVEPATCH
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_cicheck_result "% modprobe test_klp_callbacks_demo
6062306a36Sopenharmony_cilivepatch: enabling patch 'test_klp_callbacks_demo'
6162306a36Sopenharmony_cilivepatch: 'test_klp_callbacks_demo': initializing patching transition
6262306a36Sopenharmony_citest_klp_callbacks_demo: pre_patch_callback: vmlinux
6362306a36Sopenharmony_cilivepatch: 'test_klp_callbacks_demo': starting patching transition
6462306a36Sopenharmony_cilivepatch: 'test_klp_callbacks_demo': completing patching transition
6562306a36Sopenharmony_citest_klp_callbacks_demo: post_patch_callback: vmlinux
6662306a36Sopenharmony_cilivepatch: 'test_klp_callbacks_demo': patching complete
6762306a36Sopenharmony_ci% modprobe test_klp_callbacks_mod
6862306a36Sopenharmony_cilivepatch: applying patch 'test_klp_callbacks_demo' to loading module 'test_klp_callbacks_mod'
6962306a36Sopenharmony_citest_klp_callbacks_demo: pre_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init
7062306a36Sopenharmony_citest_klp_callbacks_demo: post_patch_callback: test_klp_callbacks_mod -> [MODULE_STATE_COMING] Full formed, running module_init
7162306a36Sopenharmony_citest_klp_callbacks_mod: test_klp_callbacks_mod_init
7262306a36Sopenharmony_ci% rmmod test_klp_callbacks_mod
7362306a36Sopenharmony_citest_klp_callbacks_mod: test_klp_callbacks_mod_exit
7462306a36Sopenharmony_citest_klp_callbacks_demo: pre_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away
7562306a36Sopenharmony_cilivepatch: reverting patch 'test_klp_callbacks_demo' on unloading module 'test_klp_callbacks_mod'
7662306a36Sopenharmony_citest_klp_callbacks_demo: post_unpatch_callback: test_klp_callbacks_mod -> [MODULE_STATE_GOING] Going away
7762306a36Sopenharmony_ci% echo 0 > /sys/kernel/livepatch/test_klp_callbacks_demo/enabled
7862306a36Sopenharmony_cilivepatch: 'test_klp_callbacks_demo': initializing unpatching transition
7962306a36Sopenharmony_citest_klp_callbacks_demo: pre_unpatch_callback: vmlinux
8062306a36Sopenharmony_cilivepatch: 'test_klp_callbacks_demo': starting unpatching transition
8162306a36Sopenharmony_cilivepatch: 'test_klp_callbacks_demo': completing unpatching transition
8262306a36Sopenharmony_citest_klp_callbacks_demo: post_unpatch_callback: vmlinux
8362306a36Sopenharmony_cilivepatch: 'test_klp_callbacks_demo': unpatching complete
8462306a36Sopenharmony_ci% rmmod test_klp_callbacks_demo"
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ciexit 0
87