1*053f45beSAndroid Build Coastguard Worker#!/bin/bash 2*053f45beSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0 3*053f45beSAndroid Build Coastguard Worker# Copyright (C) 2019 Joe Lawrence <[email protected]> 4*053f45beSAndroid Build Coastguard Worker 5*053f45beSAndroid Build Coastguard Worker. $(dirname $0)/functions.sh 6*053f45beSAndroid Build Coastguard Worker 7*053f45beSAndroid Build Coastguard WorkerMOD_LIVEPATCH=test_klp_livepatch 8*053f45beSAndroid Build Coastguard Worker 9*053f45beSAndroid Build Coastguard Workersetup_config 10*053f45beSAndroid Build Coastguard Worker 11*053f45beSAndroid Build Coastguard Worker 12*053f45beSAndroid Build Coastguard Worker# - turn ftrace_enabled OFF and verify livepatches can't load 13*053f45beSAndroid Build Coastguard Worker# - turn ftrace_enabled ON and verify livepatch can load 14*053f45beSAndroid Build Coastguard Worker# - verify that ftrace_enabled can't be turned OFF while a livepatch is loaded 15*053f45beSAndroid Build Coastguard Worker 16*053f45beSAndroid Build Coastguard Workerstart_test "livepatch interaction with ftrace_enabled sysctl" 17*053f45beSAndroid Build Coastguard Worker 18*053f45beSAndroid Build Coastguard Workerset_ftrace_enabled 0 19*053f45beSAndroid Build Coastguard Workerload_failing_mod $MOD_LIVEPATCH 20*053f45beSAndroid Build Coastguard Worker 21*053f45beSAndroid Build Coastguard Workerset_ftrace_enabled 1 22*053f45beSAndroid Build Coastguard Workerload_lp $MOD_LIVEPATCH 23*053f45beSAndroid Build Coastguard Workerif [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH: this has been live patched" ]] ; then 24*053f45beSAndroid Build Coastguard Worker echo -e "FAIL\n\n" 25*053f45beSAndroid Build Coastguard Worker die "livepatch kselftest(s) failed" 26*053f45beSAndroid Build Coastguard Workerfi 27*053f45beSAndroid Build Coastguard Worker 28*053f45beSAndroid Build Coastguard Worker# Check that ftrace could not get disabled when a livepatch is enabled 29*053f45beSAndroid Build Coastguard Workerset_ftrace_enabled --fail 0 30*053f45beSAndroid Build Coastguard Workerif [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH: this has been live patched" ]] ; then 31*053f45beSAndroid Build Coastguard Worker echo -e "FAIL\n\n" 32*053f45beSAndroid Build Coastguard Worker die "livepatch kselftest(s) failed" 33*053f45beSAndroid Build Coastguard Workerfi 34*053f45beSAndroid Build Coastguard Workerdisable_lp $MOD_LIVEPATCH 35*053f45beSAndroid Build Coastguard Workerunload_lp $MOD_LIVEPATCH 36*053f45beSAndroid Build Coastguard Worker 37*053f45beSAndroid Build Coastguard Workercheck_result "livepatch: kernel.ftrace_enabled = 0 38*053f45beSAndroid Build Coastguard Worker% modprobe $MOD_LIVEPATCH 39*053f45beSAndroid Build Coastguard Workerlivepatch: enabling patch '$MOD_LIVEPATCH' 40*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': initializing patching transition 41*053f45beSAndroid Build Coastguard Workerlivepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16) 42*053f45beSAndroid Build Coastguard Workerlivepatch: failed to patch object 'vmlinux' 43*053f45beSAndroid Build Coastguard Workerlivepatch: failed to enable patch '$MOD_LIVEPATCH' 44*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': canceling patching transition, going to unpatch 45*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': completing unpatching transition 46*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': unpatching complete 47*053f45beSAndroid Build Coastguard Workermodprobe: ERROR: could not insert '$MOD_LIVEPATCH': Device or resource busy 48*053f45beSAndroid Build Coastguard Workerlivepatch: kernel.ftrace_enabled = 1 49*053f45beSAndroid Build Coastguard Worker% modprobe $MOD_LIVEPATCH 50*053f45beSAndroid Build Coastguard Workerlivepatch: enabling patch '$MOD_LIVEPATCH' 51*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': initializing patching transition 52*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': starting patching transition 53*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': completing patching transition 54*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': patching complete 55*053f45beSAndroid Build Coastguard Workerlivepatch: sysctl: setting key \"kernel.ftrace_enabled\": Device or resource busy 56*053f45beSAndroid Build Coastguard Worker% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled 57*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': initializing unpatching transition 58*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': starting unpatching transition 59*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': completing unpatching transition 60*053f45beSAndroid Build Coastguard Workerlivepatch: '$MOD_LIVEPATCH': unpatching complete 61*053f45beSAndroid Build Coastguard Worker% rmmod $MOD_LIVEPATCH" 62*053f45beSAndroid Build Coastguard Worker 63*053f45beSAndroid Build Coastguard Worker 64*053f45beSAndroid Build Coastguard Workerexit 0 65