mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
selftests/livepatch: update test-ftrace.sh for deprecated ftrace_enabled
kernel.ftrace_enabled=0 is now refused on kernels that deprecate the knob, so the old disable/reload flow no longer applies there. Probe for this with ftrace_disable_supported() and keep the full original scenario (disable, fail to load a livepatch, re-enable, load, confirm disable is refused while loaded) on kernels where it still works; otherwise just confirm the write is refused. Link: https://patch.msgid.link/20260806153000.4184871-3-andrey.grodzovsky@crowdstrike.com Suggested-by: Steven Rostedt <rostedt@goodmis.org> Suggested-by: Joe Lawrence <joe.lawrence@redhat.com> Assisted-by: Claude:claude-sonnet-5 Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@crowdstrike.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
parent
b0c8570491
commit
88b3e7fedc
|
|
@ -126,6 +126,20 @@ function set_ftrace_enabled() {
|
|||
echo "livepatch: kernel.ftrace_enabled = $result" > /dev/kmsg
|
||||
}
|
||||
|
||||
# ftrace_disable_supported() - probe whether kernel.ftrace_enabled=0
|
||||
# can still disable ftrace on this kernel. Newer kernels deprecate
|
||||
# the knob and always refuse the write with -EOPNOTSUPP.
|
||||
function ftrace_disable_supported() {
|
||||
local orig result
|
||||
|
||||
orig=$(sysctl --values kernel.ftrace_enabled)
|
||||
sysctl -q kernel.ftrace_enabled=0 &> /dev/null
|
||||
result=$(sysctl --values kernel.ftrace_enabled)
|
||||
sysctl -q "kernel.ftrace_enabled=$orig" &> /dev/null
|
||||
|
||||
[[ "$result" == "0" ]]
|
||||
}
|
||||
|
||||
function cleanup() {
|
||||
pop_config
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,29 +12,32 @@ setup_config
|
|||
# - turn ftrace_enabled OFF and verify livepatches can't load
|
||||
# - turn ftrace_enabled ON and verify livepatch can load
|
||||
# - verify that ftrace_enabled can't be turned OFF while a livepatch is loaded
|
||||
# (skipped on kernels where the sysctl is deprecated and always refuses 0)
|
||||
|
||||
start_test "livepatch interaction with ftrace_enabled sysctl"
|
||||
|
||||
set_ftrace_enabled 0
|
||||
load_failing_mod $MOD_LIVEPATCH
|
||||
if ftrace_disable_supported; then
|
||||
|
||||
set_ftrace_enabled 1
|
||||
load_lp $MOD_LIVEPATCH
|
||||
if [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH: this has been live patched" ]] ; then
|
||||
echo -e "FAIL\n\n"
|
||||
die "livepatch kselftest(s) failed"
|
||||
fi
|
||||
set_ftrace_enabled 0
|
||||
load_failing_mod $MOD_LIVEPATCH
|
||||
|
||||
# Check that ftrace could not get disabled when a livepatch is enabled
|
||||
set_ftrace_enabled --fail 0
|
||||
if [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH: this has been live patched" ]] ; then
|
||||
echo -e "FAIL\n\n"
|
||||
die "livepatch kselftest(s) failed"
|
||||
fi
|
||||
disable_lp $MOD_LIVEPATCH
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
set_ftrace_enabled 1
|
||||
load_lp $MOD_LIVEPATCH
|
||||
if [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH: this has been live patched" ]] ; then
|
||||
echo -e "FAIL\n\n"
|
||||
die "livepatch kselftest(s) failed"
|
||||
fi
|
||||
|
||||
check_result "livepatch: kernel.ftrace_enabled = 0
|
||||
# Check that ftrace could not get disabled when a livepatch is enabled
|
||||
set_ftrace_enabled --fail 0
|
||||
if [[ "$(cat /proc/cmdline)" != "$MOD_LIVEPATCH: this has been live patched" ]] ; then
|
||||
echo -e "FAIL\n\n"
|
||||
die "livepatch kselftest(s) failed"
|
||||
fi
|
||||
disable_lp $MOD_LIVEPATCH
|
||||
unload_lp $MOD_LIVEPATCH
|
||||
|
||||
check_result "livepatch: kernel.ftrace_enabled = 0
|
||||
% insmod test_modules/$MOD_LIVEPATCH.ko
|
||||
livepatch: enabling patch '$MOD_LIVEPATCH'
|
||||
livepatch: '$MOD_LIVEPATCH': initializing patching transition
|
||||
|
|
@ -60,6 +63,14 @@ livepatch: '$MOD_LIVEPATCH': completing unpatching transition
|
|||
livepatch: '$MOD_LIVEPATCH': unpatching complete
|
||||
% rmmod $MOD_LIVEPATCH"
|
||||
|
||||
else
|
||||
|
||||
set_ftrace_enabled --fail 0
|
||||
check_result "livepatch: sysctl: setting key \"kernel.ftrace_enabled\": \
|
||||
Operation not supported"
|
||||
|
||||
fi
|
||||
|
||||
|
||||
# - verify livepatch can load
|
||||
# - check if traces have a patched function
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user