xref: /linux/tools/testing/selftests/livepatch/test-kprobe.sh (revision dcf9f31c62b3d31c033ee5bce522855c3d7f56b1)
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3# Copyright (C) 2024 SUSE
4# Author: Michael Vetter <mvetter@suse.com>
5
6. $(dirname $0)/functions.sh
7
8grep -q kprobe_ftrace_ops /proc/kallsyms || skip "test-kprobe requires CONFIG_KPROBES_ON_FTRACE"
9
10MOD_LIVEPATCH=test_klp_livepatch
11MOD_KPROBE=test_klp_kprobe
12
13setup_config
14
15# Kprobe a function and verify that we can't livepatch that same function
16# when it uses a post_handler since only one IPMODIFY maybe be registered
17# to any given function at a time.
18
19start_test "livepatch interaction with kprobed function with post_handler"
20
21echo 1 > "$SYSFS_KPROBES_DIR/enabled"
22
23load_mod $MOD_KPROBE has_post_handler=true
24load_failing_mod $MOD_LIVEPATCH
25unload_mod $MOD_KPROBE
26
27check_result "% insmod test_modules/test_klp_kprobe.ko has_post_handler=true
28% insmod test_modules/$MOD_LIVEPATCH.ko
29livepatch: enabling patch '$MOD_LIVEPATCH'
30livepatch: '$MOD_LIVEPATCH': initializing patching transition
31livepatch: failed to register ftrace handler for function 'cmdline_proc_show' (-16)
32livepatch: failed to patch object 'vmlinux'
33livepatch: failed to enable patch '$MOD_LIVEPATCH'
34livepatch: '$MOD_LIVEPATCH': canceling patching transition, going to unpatch
35livepatch: '$MOD_LIVEPATCH': completing unpatching transition
36livepatch: '$MOD_LIVEPATCH': unpatching complete
37insmod: ERROR: could not insert module test_modules/$MOD_LIVEPATCH.ko: Device or resource busy
38% rmmod test_klp_kprobe"
39
40start_test "livepatch interaction with kprobed function without post_handler"
41
42load_mod $MOD_KPROBE has_post_handler=false
43load_lp $MOD_LIVEPATCH
44
45unload_mod $MOD_KPROBE
46disable_lp $MOD_LIVEPATCH
47unload_lp $MOD_LIVEPATCH
48
49check_result "% insmod test_modules/test_klp_kprobe.ko has_post_handler=false
50% insmod test_modules/$MOD_LIVEPATCH.ko
51livepatch: enabling patch '$MOD_LIVEPATCH'
52livepatch: '$MOD_LIVEPATCH': initializing patching transition
53livepatch: '$MOD_LIVEPATCH': starting patching transition
54livepatch: '$MOD_LIVEPATCH': completing patching transition
55livepatch: '$MOD_LIVEPATCH': patching complete
56% rmmod test_klp_kprobe
57% echo 0 > /sys/kernel/livepatch/$MOD_LIVEPATCH/enabled
58livepatch: '$MOD_LIVEPATCH': initializing unpatching transition
59livepatch: '$MOD_LIVEPATCH': starting unpatching transition
60livepatch: '$MOD_LIVEPATCH': completing unpatching transition
61livepatch: '$MOD_LIVEPATCH': unpatching complete
62% rmmod $MOD_LIVEPATCH"
63
64exit 0
65