1 | // SPDX-License-Identifier: GPL-2.0 |
2 | // Copyright (C) 2014 Seth Jennings <sjenning@redhat.com> |
3 | |
4 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
5 | |
6 | #include <linux/module.h> |
7 | #include <linux/kernel.h> |
8 | #include <linux/livepatch.h> |
9 | |
10 | #include <linux/seq_file.h> |
11 | static int livepatch_cmdline_proc_show(struct seq_file *m, void *v) |
12 | { |
13 | seq_printf(m, fmt: "%s: %s\n" , THIS_MODULE->name, |
14 | "this has been live patched" ); |
15 | return 0; |
16 | } |
17 | |
18 | static struct klp_func funcs[] = { |
19 | { |
20 | .old_name = "cmdline_proc_show" , |
21 | .new_func = livepatch_cmdline_proc_show, |
22 | }, { } |
23 | }; |
24 | |
25 | static struct klp_object objs[] = { |
26 | { |
27 | /* name being NULL means vmlinux */ |
28 | .funcs = funcs, |
29 | }, { } |
30 | }; |
31 | |
32 | static struct klp_patch patch = { |
33 | .mod = THIS_MODULE, |
34 | .objs = objs, |
35 | }; |
36 | |
37 | static int test_klp_livepatch_init(void) |
38 | { |
39 | return klp_enable_patch(&patch); |
40 | } |
41 | |
42 | static void test_klp_livepatch_exit(void) |
43 | { |
44 | } |
45 | |
46 | module_init(test_klp_livepatch_init); |
47 | module_exit(test_klp_livepatch_exit); |
48 | MODULE_LICENSE("GPL" ); |
49 | MODULE_INFO(livepatch, "Y" ); |
50 | MODULE_AUTHOR("Seth Jennings <sjenning@redhat.com>" ); |
51 | MODULE_DESCRIPTION("Livepatch test: livepatch module" ); |
52 | |