Files
linux/tools/testing/selftests/livepatch/test_modules/test_klp_kprobe.c
Michael Vetter 62597edf63 selftests: livepatch: test livepatching a kprobed function
The test proves that a function that is being kprobed and uses a
post_handler cannot be livepatched.

Only one ftrace_ops with FTRACE_OPS_FL_IPMODIFY set may be registered
to any given function at a time.

Note that the conflicting kprobe could not be created using the
tracefs interface, see Documentation/trace/kprobetrace.rst.
This interface uses only the pre_handler(), see alloc_trace_kprobe().
But FTRACE_OPS_FL_IPMODIFY is used only when the kprobe is using a
post_handler, see arm_kprobe_ftrace().

Signed-off-by: Michael Vetter <mvetter@suse.com>
Reviewed-by: Miroslav Benes <mbenes@suse.cz>
Reviewed-by: Joe Lawrence <joe.lawrence@redhat.com>
Tested-by: Marcos Paulo de Souza <mpdesouza@suse.com>
Reviewed-by: Marcos Paulo de Souza <mpdesouza@suse.com>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Tested-by: Petr Mladek <pmladek@suse.com>
Link: https://lore.kernel.org/r/20241017200132.21946-4-mvetter@suse.com
Signed-off-by: Petr Mladek <pmladek@suse.com>
2024-10-22 17:13:11 +02:00

39 lines
870 B
C

// SPDX-License-Identifier: GPL-2.0
// Copyright (C) 2024 Marcos Paulo de Souza <mpdesouza@suse.com>
// Copyright (C) 2024 Michael Vetter <mvetter@suse.com>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/kprobes.h>
static bool has_post_handler = true;
module_param(has_post_handler, bool, 0444);
static void __kprobes post_handler(struct kprobe *p, struct pt_regs *regs,
unsigned long flags)
{
}
static struct kprobe kp = {
.symbol_name = "cmdline_proc_show",
};
static int __init kprobe_init(void)
{
if (has_post_handler)
kp.post_handler = post_handler;
return register_kprobe(&kp);
}
static void __exit kprobe_exit(void)
{
unregister_kprobe(&kp);
}
module_init(kprobe_init)
module_exit(kprobe_exit)
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Michael Vetter <mvetter@suse.com>");
MODULE_DESCRIPTION("Livepatch test: kprobe function");