xref: /linux/tools/testing/selftests/livepatch/test-kprobe.sh (revision dcf9f31c62b3d31c033ee5bce522855c3d7f56b1)
162597edfSMichael Vetter#!/bin/bash
262597edfSMichael Vetter# SPDX-License-Identifier: GPL-2.0
362597edfSMichael Vetter# Copyright (C) 2024 SUSE
462597edfSMichael Vetter# Author: Michael Vetter <mvetter@suse.com>
562597edfSMichael Vetter
662597edfSMichael Vetter. $(dirname $0)/functions.sh
762597edfSMichael Vetter
8*59481b8bSSong Liugrep -q kprobe_ftrace_ops /proc/kallsyms || skip "test-kprobe requires CONFIG_KPROBES_ON_FTRACE"
9*59481b8bSSong Liu
1062597edfSMichael VetterMOD_LIVEPATCH=test_klp_livepatch
1162597edfSMichael VetterMOD_KPROBE=test_klp_kprobe
1262597edfSMichael Vetter
1362597edfSMichael Vettersetup_config
1462597edfSMichael Vetter
1562597edfSMichael Vetter# Kprobe a function and verify that we can't livepatch that same function
1662597edfSMichael Vetter# when it uses a post_handler since only one IPMODIFY maybe be registered
1762597edfSMichael Vetter# to any given function at a time.
1862597edfSMichael Vetter
1962597edfSMichael Vetterstart_test "livepatch interaction with kprobed function with post_handler"
2062597edfSMichael Vetter
2162597edfSMichael Vetterecho 1 > "$SYSFS_KPROBES_DIR/enabled"
2262597edfSMichael Vetter
2362597edfSMichael Vetterload_mod $MOD_KPROBE has_post_handler=true
2462597edfSMichael Vetterload_failing_mod $MOD_LIVEPATCH
2562597edfSMichael Vetterunload_mod $MOD_KPROBE
2662597edfSMichael Vetter
2762597edfSMichael Vettercheck_result "% insmod test_modules/test_klp_kprobe.ko has_post_handler=true
2862597edfSMichael Vetter% insmod test_modules/$MOD_LIVEPATCH.ko
2962597edfSMichael Vetterlivepatch: enabling patch '$MOD_LIVEPATCH'
3062597edfSMichael Vetterlivepatch: '$MOD_LIVEPATCH': initializing patching transition
3162597edfSMichael Vetterlivepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16)
3262597edfSMichael Vetterlivepatch: failed to patch object 'vmlinux'
3362597edfSMichael Vetterlivepatch: failed to enable patch '$MOD_LIVEPATCH'
3462597edfSMichael Vetterlivepatch: '$MOD_LIVEPATCH': canceling patching transition, going to unpatch
3562597edfSMichael Vetterlivepatch: '$MOD_LIVEPATCH': completing unpatching transition
3662597edfSMichael Vetterlivepatch: '$MOD_LIVEPATCH': unpatching complete
3762597edfSMichael Vetterinsmod: ERROR: could not insert module test_modules/$MOD_LIVEPATCH.ko: Device or resource busy
3862597edfSMichael Vetter% rmmod test_klp_kprobe"
3962597edfSMichael Vetter
4062597edfSMichael Vetterstart_test "livepatch interaction with kprobed function without post_handler"
4162597edfSMichael Vetter
4262597edfSMichael Vetterload_mod $MOD_KPROBE has_post_handler=false
4362597edfSMichael Vetterload_lp $MOD_LIVEPATCH
4462597edfSMichael Vetter
4562597edfSMichael Vetterunload_mod $MOD_KPROBE
4662597edfSMichael Vetterdisable_lp $MOD_LIVEPATCH
4762597edfSMichael Vetterunload_lp $MOD_LIVEPATCH
4862597edfSMichael Vetter
4962597edfSMichael Vettercheck_result "% insmod test_modules/test_klp_kprobe.ko has_post_handler=false
5062597edfSMichael Vetter% insmod test_modules/$MOD_LIVEPATCH.ko
5162597edfSMichael Vetterlivepatch: enabling patch '$MOD_LIVEPATCH'
5262597edfSMichael Vetterlivepatch: '$MOD_LIVEPATCH': initializing patching transition
5362597edfSMichael Vetterlivepatch: '$MOD_LIVEPATCH': starting patching transition
5462597edfSMichael Vetterlivepatch: '$MOD_LIVEPATCH': completing patching transition
5562597edfSMichael Vetterlivepatch: '$MOD_LIVEPATCH': patching complete
5662597edfSMichael Vetter% rmmod test_klp_kprobe
5762597edfSMichael Vetter% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
5862597edfSMichael Vetterlivepatch: '$MOD_LIVEPATCH': initializing unpatching transition
5962597edfSMichael Vetterlivepatch: '$MOD_LIVEPATCH': starting unpatching transition
6062597edfSMichael Vetterlivepatch: '$MOD_LIVEPATCH': completing unpatching transition
6162597edfSMichael Vetterlivepatch: '$MOD_LIVEPATCH': unpatching complete
6262597edfSMichael Vetter% rmmod $MOD_LIVEPATCH"
6362597edfSMichael Vetter
6462597edfSMichael Vetterexit 0
65