From 5f14dc2b33a0478942c52c829916fda44946adbd Mon Sep 17 00:00:00 2001 From: Cristian Olaru Date: Wed, 16 Mar 2022 01:37:11 +0200 Subject: [PATCH 1/7] lab 1: add skel Signed-off-by: Cristian Olaru --- .../skels/kernel_modules/1-2-test-mod/Kbuild | 3 + .../kernel_modules/1-2-test-mod/hello_mod.c | 21 +++ .../skels/kernel_modules/3-error-mod/Kbuild | 3 + .../kernel_modules/3-error-mod/err_mod.c | 25 +++ .../skels/kernel_modules/4-multi-mod/Kbuild | 3 + .../skels/kernel_modules/4-multi-mod/mod1.c | 27 ++++ .../skels/kernel_modules/4-multi-mod/mod2.c | 4 + .../skels/kernel_modules/5-oops-mod/Kbuild | 3 + .../kernel_modules/5-oops-mod/oops_mod.c | 27 ++++ .../skels/kernel_modules/6-cmd-mod/Kbuild | 3 + .../skels/kernel_modules/6-cmd-mod/cmd_mod.c | 26 ++++ .../skels/kernel_modules/7-list-proc/Kbuild | 3 + .../kernel_modules/7-list-proc/list_proc.c | 27 ++++ tools/labs/skels/kernel_modules/8-kdb/Kbuild | 3 + .../skels/kernel_modules/8-kdb/hello_kdb.c | 142 ++++++++++++++++++ .../labs/skels/kernel_modules/9-dyndbg/Kbuild | 3 + .../skels/kernel_modules/9-dyndbg/dyndbg.c | 32 ++++ 17 files changed, 355 insertions(+) create mode 100644 tools/labs/skels/kernel_modules/1-2-test-mod/Kbuild create mode 100644 tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.c create mode 100644 tools/labs/skels/kernel_modules/3-error-mod/Kbuild create mode 100644 tools/labs/skels/kernel_modules/3-error-mod/err_mod.c create mode 100644 tools/labs/skels/kernel_modules/4-multi-mod/Kbuild create mode 100644 tools/labs/skels/kernel_modules/4-multi-mod/mod1.c create mode 100644 tools/labs/skels/kernel_modules/4-multi-mod/mod2.c create mode 100644 tools/labs/skels/kernel_modules/5-oops-mod/Kbuild create mode 100644 tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.c create mode 100644 tools/labs/skels/kernel_modules/6-cmd-mod/Kbuild create mode 100644 tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.c create mode 100644 tools/labs/skels/kernel_modules/7-list-proc/Kbuild create mode 100644 tools/labs/skels/kernel_modules/7-list-proc/list_proc.c create mode 100644 tools/labs/skels/kernel_modules/8-kdb/Kbuild create mode 100644 tools/labs/skels/kernel_modules/8-kdb/hello_kdb.c create mode 100644 tools/labs/skels/kernel_modules/9-dyndbg/Kbuild create mode 100644 tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.c diff --git a/tools/labs/skels/kernel_modules/1-2-test-mod/Kbuild b/tools/labs/skels/kernel_modules/1-2-test-mod/Kbuild new file mode 100644 index 00000000000000..3674ef2591b3d9 --- /dev/null +++ b/tools/labs/skels/kernel_modules/1-2-test-mod/Kbuild @@ -0,0 +1,3 @@ +ccflags-y = -Wno-unused-function -Wno-unused-label -Wno-unused-variable -DDEBUG + +obj-m = hello_mod.o diff --git a/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.c b/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.c new file mode 100644 index 00000000000000..3fac57752e06ca --- /dev/null +++ b/tools/labs/skels/kernel_modules/1-2-test-mod/hello_mod.c @@ -0,0 +1,21 @@ +#include +#include +#include + +MODULE_DESCRIPTION("Simple module"); +MODULE_AUTHOR("Kernel Hacker"); +MODULE_LICENSE("GPL"); + +static int my_hello_init(void) +{ + pr_debug("Hello!\n"); + return 0; +} + +static void hello_exit(void) +{ + pr_debug("Goodbye!\n"); +} + +module_init(my_hello_init); +module_exit(hello_exit); diff --git a/tools/labs/skels/kernel_modules/3-error-mod/Kbuild b/tools/labs/skels/kernel_modules/3-error-mod/Kbuild new file mode 100644 index 00000000000000..7bf41fb63f9589 --- /dev/null +++ b/tools/labs/skels/kernel_modules/3-error-mod/Kbuild @@ -0,0 +1,3 @@ +ccflags-y = -Wno-unused-function -Wno-unused-label -Wno-unused-variable + +obj-m = err_mod.o diff --git a/tools/labs/skels/kernel_modules/3-error-mod/err_mod.c b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.c new file mode 100644 index 00000000000000..2e498785c594a0 --- /dev/null +++ b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.c @@ -0,0 +1,25 @@ +#include +#include +/* TODO: add missing kernel headers */ + +MODULE_DESCRIPTION("Error module"); +MODULE_AUTHOR("Kernel Hacker"); +MODULE_LICENSE("GPL"); + +static int n1, n2; + +static int err_init(void) +{ + n1 = 1; n2 = 2; + pr_info("n1 is %d, n2 is %d\n", n1, n2); + + return 0; +} + +static void err_exit(void) +{ + pr_info("sum is %d\n", n1 + n2); +} + +module_init(err_init); +module_exit(err_exit); diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/Kbuild b/tools/labs/skels/kernel_modules/4-multi-mod/Kbuild new file mode 100644 index 00000000000000..9fb21b25f7a58b --- /dev/null +++ b/tools/labs/skels/kernel_modules/4-multi-mod/Kbuild @@ -0,0 +1,3 @@ +ccflags-y = -Wno-unused-function -Wno-unused-label -Wno-unused-variable + +# TODO: add rules to create a multi object module diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/mod1.c b/tools/labs/skels/kernel_modules/4-multi-mod/mod1.c new file mode 100644 index 00000000000000..08511866c460a1 --- /dev/null +++ b/tools/labs/skels/kernel_modules/4-multi-mod/mod1.c @@ -0,0 +1,27 @@ +#include +#include +#include + +MODULE_DESCRIPTION("Multi-file module"); +MODULE_AUTHOR("Kernel Hacker"); +MODULE_LICENSE("GPL"); + +extern int add(int a, int b); + +static int n1, n2; + +static int my_hello_init(void) +{ + n1 = 1; n2 = 2; + pr_info("n1 is %d, n2 is %d\n", n1, n2); + + return 0; +} + +static void hello_exit(void) +{ + pr_info("sum is %d\n", add(n1, n2)); +} + +module_init(my_hello_init); +module_exit(hello_exit); diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/mod2.c b/tools/labs/skels/kernel_modules/4-multi-mod/mod2.c new file mode 100644 index 00000000000000..bc0af867d7c87c --- /dev/null +++ b/tools/labs/skels/kernel_modules/4-multi-mod/mod2.c @@ -0,0 +1,4 @@ +int add(int a, int b) +{ + return a + b; +} diff --git a/tools/labs/skels/kernel_modules/5-oops-mod/Kbuild b/tools/labs/skels/kernel_modules/5-oops-mod/Kbuild new file mode 100644 index 00000000000000..89de44c8b0e693 --- /dev/null +++ b/tools/labs/skels/kernel_modules/5-oops-mod/Kbuild @@ -0,0 +1,3 @@ +# TODO: add flags to generate debug information + +obj-m = oops_mod.o diff --git a/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.c b/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.c new file mode 100644 index 00000000000000..9fd1448572a94a --- /dev/null +++ b/tools/labs/skels/kernel_modules/5-oops-mod/oops_mod.c @@ -0,0 +1,27 @@ +#include +#include +#include +#include + +MODULE_DESCRIPTION("Oops generating module"); +MODULE_AUTHOR("So2rul Esforever"); +MODULE_LICENSE("GPL"); + +static int my_oops_init(void) +{ + char *p = 0; + + pr_info("before init\n"); + *p = 'a'; + pr_info("after init\n"); + + return 0; +} + +static void my_oops_exit(void) +{ + pr_info("module goes all out\n"); +} + +module_init(my_oops_init); +module_exit(my_oops_exit); diff --git a/tools/labs/skels/kernel_modules/6-cmd-mod/Kbuild b/tools/labs/skels/kernel_modules/6-cmd-mod/Kbuild new file mode 100644 index 00000000000000..2c5fe9cfd4de33 --- /dev/null +++ b/tools/labs/skels/kernel_modules/6-cmd-mod/Kbuild @@ -0,0 +1,3 @@ +ccflags-y = -Wno-unused-function -Wno-unused-label -Wno-unused-variable + +obj-m = cmd_mod.o diff --git a/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.c b/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.c new file mode 100644 index 00000000000000..3bd758897f3600 --- /dev/null +++ b/tools/labs/skels/kernel_modules/6-cmd-mod/cmd_mod.c @@ -0,0 +1,26 @@ +#include +#include +#include + +MODULE_DESCRIPTION("Command-line args module"); +MODULE_AUTHOR("Kernel Hacker"); +MODULE_LICENSE("GPL"); + +static char *str = "the worm"; + +module_param(str, charp, 0000); +MODULE_PARM_DESC(str, "A simple string"); + +static int __init cmd_init(void) +{ + pr_info("Early bird gets %s\n", str); + return 0; +} + +static void __exit cmd_exit(void) +{ + pr_info("Exit, stage left\n"); +} + +module_init(cmd_init); +module_exit(cmd_exit); diff --git a/tools/labs/skels/kernel_modules/7-list-proc/Kbuild b/tools/labs/skels/kernel_modules/7-list-proc/Kbuild new file mode 100644 index 00000000000000..45eb7676b7ec51 --- /dev/null +++ b/tools/labs/skels/kernel_modules/7-list-proc/Kbuild @@ -0,0 +1,3 @@ +ccflags-y = -Wno-unused-function -Wno-unused-label -Wno-unused-variable + +obj-m = list_proc.o diff --git a/tools/labs/skels/kernel_modules/7-list-proc/list_proc.c b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.c new file mode 100644 index 00000000000000..79550a879abacd --- /dev/null +++ b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.c @@ -0,0 +1,27 @@ +#include +#include +#include +/* TODO: add missing headers */ + +MODULE_DESCRIPTION("List current processes"); +MODULE_AUTHOR("Kernel Hacker"); +MODULE_LICENSE("GPL"); + +static int my_proc_init(void) +{ + struct task_struct *p; + + /* TODO: print current process pid and its name */ + + /* TODO: print the pid and name of all processes */ + + return 0; +} + +static void my_proc_exit(void) +{ + /* TODO: print current process pid and name */ +} + +module_init(my_proc_init); +module_exit(my_proc_exit); diff --git a/tools/labs/skels/kernel_modules/8-kdb/Kbuild b/tools/labs/skels/kernel_modules/8-kdb/Kbuild new file mode 100644 index 00000000000000..4453b28ab39c4d --- /dev/null +++ b/tools/labs/skels/kernel_modules/8-kdb/Kbuild @@ -0,0 +1,3 @@ +ccflags-y = -Wno-unused-function -Wno-unused-label -Wno-unused-variable + +obj-m = hello_kdb.o diff --git a/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.c b/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.c new file mode 100644 index 00000000000000..656a265d288927 --- /dev/null +++ b/tools/labs/skels/kernel_modules/8-kdb/hello_kdb.c @@ -0,0 +1,142 @@ +#include +#include +#include + +int kdb_write_address; +EXPORT_SYMBOL(kdb_write_address); + +noinline void dummy_func18(void) +{ + panic("Hello KDB has paniced!"); +} +noinline void dummy_func17(void) +{ + dummy_func18(); +} +noinline void dummy_func16(void) +{ + dummy_func17(); +} +noinline void dummy_func15(void) +{ + dummy_func16(); +} +noinline void dummy_func14(void) +{ + dummy_func15(); +} +noinline void dummy_func13(void) +{ + dummy_func14(); +} +noinline void dummy_func12(void) +{ + dummy_func13(); +} +noinline void dummy_func11(void) +{ + dummy_func12(); +} +noinline void dummy_func10(void) +{ + dummy_func11(); +} +noinline void dummy_func9(void) +{ + dummy_func10(); +} +noinline void dummy_func8(void) +{ + dummy_func9(); +} +noinline void dummy_func7(void) +{ + dummy_func8(); +} +noinline void dummy_func6(void) +{ + dummy_func7(); +} +noinline void dummy_func5(void) +{ + dummy_func6(); +} +noinline void dummy_func4(void) +{ + dummy_func5(); +} +noinline void dummy_func3(void) +{ + dummy_func4(); +} +noinline void dummy_func2(void) +{ + dummy_func3(); +} +noinline void dummy_func1(void) +{ + dummy_func2(); +} + +static int hello_proc_show(struct seq_file *m, void *v) { + seq_printf(m, "Hello proc!\n"); + return 0; +} + +static int hello_proc_open(struct inode *inode, struct file *file) { + return single_open(file, hello_proc_show, NULL); +} + +static int edit_write(struct file *file, const char *buffer, + size_t count, loff_t *data) +{ + kdb_write_address += 1; + return count; +} + +static int bug_write(struct file *file, const char *buffer, + size_t count, loff_t *data) +{ + dummy_func1(); + return count; +} + +static const struct proc_ops edit_proc_ops = { + .proc_open = hello_proc_open, + .proc_read = seq_read, + .proc_write = edit_write, + .proc_lseek = seq_lseek, + .proc_release = single_release, +}; + +static const struct proc_ops bug_proc_ops = { + .proc_open = hello_proc_open, + .proc_read = seq_read, + .proc_write = bug_write, + .proc_lseek = seq_lseek, + .proc_release = single_release, +}; + +static int __init hello_proc_init(void) { + struct proc_dir_entry *file; + file = proc_create("hello_kdb_bug", 0, NULL, &bug_proc_ops); + if (file == NULL) { + return -ENOMEM; + } + + file = proc_create("hello_kdb_break", 0, NULL, &edit_proc_ops); + if (file == NULL) { + remove_proc_entry("hello_kdb_bug", NULL); + return -ENOMEM; + } + return 0; +} + +static void __exit hello_proc_exit(void) { + remove_proc_entry("hello_kdb_bug", NULL); + remove_proc_entry("hello_kdb_break", NULL); +} + +MODULE_LICENSE("GPL"); +module_init(hello_proc_init); +module_exit(hello_proc_exit); diff --git a/tools/labs/skels/kernel_modules/9-dyndbg/Kbuild b/tools/labs/skels/kernel_modules/9-dyndbg/Kbuild new file mode 100644 index 00000000000000..a0d5f3af5202f1 --- /dev/null +++ b/tools/labs/skels/kernel_modules/9-dyndbg/Kbuild @@ -0,0 +1,3 @@ +EXTRA_CFLAGS = -Wall -g + +obj-m = dyndbg.o diff --git a/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.c b/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.c new file mode 100644 index 00000000000000..e9071e5a723535 --- /dev/null +++ b/tools/labs/skels/kernel_modules/9-dyndbg/dyndbg.c @@ -0,0 +1,32 @@ +#include +#include +#include + +MODULE_DESCRIPTION("Dyndbg kernel module"); +MODULE_AUTHOR("Dyndbg"); +MODULE_LICENSE("GPL"); + +void my_debug_func(void) +{ + pr_debug("Important dyndbg debug message1\n"); + pr_debug("Important dyndbg debug message2\n"); + pr_debug("Verbose dyndbg debug message\n"); +} +EXPORT_SYMBOL(my_debug_func); + + +static int dyndbg_init(void) +{ + printk(KERN_INFO "Hi dyndbg!\n" ); + my_debug_func(); + return 0; +} + +static void dyndbg_exit(void) +{ + printk(KERN_INFO "Bye dyndbg!\n" ); + my_debug_func(); +} + +module_init(dyndbg_init); +module_exit(dyndbg_exit); From deaaff61aa21b6e058544c846b46804e0ff2f6e8 Mon Sep 17 00:00:00 2001 From: Cristian Olaru Date: Wed, 16 Mar 2022 01:45:39 +0200 Subject: [PATCH 2/7] lab 1: ex 1-2 Signed-off-by: Cristian Olaru --- tools/labs/skels/kernel_modules/1-2-test-mod/ex1-2.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 tools/labs/skels/kernel_modules/1-2-test-mod/ex1-2.txt diff --git a/tools/labs/skels/kernel_modules/1-2-test-mod/ex1-2.txt b/tools/labs/skels/kernel_modules/1-2-test-mod/ex1-2.txt new file mode 100644 index 00000000000000..771892198bffcc --- /dev/null +++ b/tools/labs/skels/kernel_modules/1-2-test-mod/ex1-2.txt @@ -0,0 +1 @@ +la 2 am dat comanda echo 5 > /proc/sys/kernel/printk pentru a modifica nivelul de log From 8c57c8be293fe7567a4e75578c148c7e68f3a34d Mon Sep 17 00:00:00 2001 From: Cristian Olaru Date: Wed, 16 Mar 2022 01:49:43 +0200 Subject: [PATCH 3/7] lab 1: ex 3 Signed-off-by: Cristian Olaru --- tools/labs/skels/Kbuild | 10 ++++++++++ tools/labs/skels/kernel_modules/3-error-mod/err_mod.c | 1 + 2 files changed, 11 insertions(+) create mode 100644 tools/labs/skels/Kbuild diff --git a/tools/labs/skels/Kbuild b/tools/labs/skels/Kbuild new file mode 100644 index 00000000000000..97902a2b94e67d --- /dev/null +++ b/tools/labs/skels/Kbuild @@ -0,0 +1,10 @@ +# autogenerated, do not edit +ccflags-y += -Wno-unused-function -Wno-unused-label -Wno-unused-variable +obj-m += ./kernel_modules/1-2-test-mod/ +obj-m += ./kernel_modules/5-oops-mod/ +obj-m += ./kernel_modules/9-dyndbg/ +obj-m += ./kernel_modules/8-kdb/ +obj-m += ./kernel_modules/4-multi-mod/ +obj-m += ./kernel_modules/3-error-mod/ +obj-m += ./kernel_modules/6-cmd-mod/ +obj-m += ./kernel_modules/7-list-proc/ diff --git a/tools/labs/skels/kernel_modules/3-error-mod/err_mod.c b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.c index 2e498785c594a0..9bf407e189ebd5 100644 --- a/tools/labs/skels/kernel_modules/3-error-mod/err_mod.c +++ b/tools/labs/skels/kernel_modules/3-error-mod/err_mod.c @@ -1,5 +1,6 @@ #include #include +#include /* TODO: add missing kernel headers */ MODULE_DESCRIPTION("Error module"); From fba87b3dda78ff5d50b44f41d4738c7834ab77f3 Mon Sep 17 00:00:00 2001 From: Cristian Olaru Date: Wed, 16 Mar 2022 01:52:17 +0200 Subject: [PATCH 4/7] lab1: ex 4 Signed-off-by: Cristian Olaru --- tools/labs/skels/kernel_modules/4-multi-mod/Kbuild | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/labs/skels/kernel_modules/4-multi-mod/Kbuild b/tools/labs/skels/kernel_modules/4-multi-mod/Kbuild index 9fb21b25f7a58b..c3d53dedd56a07 100644 --- a/tools/labs/skels/kernel_modules/4-multi-mod/Kbuild +++ b/tools/labs/skels/kernel_modules/4-multi-mod/Kbuild @@ -1,3 +1,5 @@ ccflags-y = -Wno-unused-function -Wno-unused-label -Wno-unused-variable # TODO: add rules to create a multi object module +obj-m = multi-mod.o +multi-mod-y = mod1.o mod2.o From 7753d24e567e0c1ccd3a9a27ea99c28df180c8b7 Mon Sep 17 00:00:00 2001 From: Cristian Olaru Date: Wed, 16 Mar 2022 01:56:04 +0200 Subject: [PATCH 5/7] lab 1: ex 5 Signed-off-by: Cristian Olaru --- tools/labs/skels/kernel_modules/5-oops-mod/Kbuild | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/labs/skels/kernel_modules/5-oops-mod/Kbuild b/tools/labs/skels/kernel_modules/5-oops-mod/Kbuild index 89de44c8b0e693..cb747ad4c58663 100644 --- a/tools/labs/skels/kernel_modules/5-oops-mod/Kbuild +++ b/tools/labs/skels/kernel_modules/5-oops-mod/Kbuild @@ -1,3 +1,4 @@ # TODO: add flags to generate debug information +ccflags-y = -g obj-m = oops_mod.o From c5f1d2c4e56ee9e338d74b9eb0e3fecbb94de17c Mon Sep 17 00:00:00 2001 From: Cristian Olaru Date: Wed, 16 Mar 2022 02:00:32 +0200 Subject: [PATCH 6/7] lab 1: ex 6 Signed-off-by: Cristian Olaru --- tools/labs/skels/kernel_modules/6-cmd-mod/ex6.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 tools/labs/skels/kernel_modules/6-cmd-mod/ex6.txt diff --git a/tools/labs/skels/kernel_modules/6-cmd-mod/ex6.txt b/tools/labs/skels/kernel_modules/6-cmd-mod/ex6.txt new file mode 100644 index 00000000000000..a6036e82f02d1c --- /dev/null +++ b/tools/labs/skels/kernel_modules/6-cmd-mod/ex6.txt @@ -0,0 +1 @@ +insmod cmd_mod.ko str="Early bird gets tired." From 379e3df42bb1a729a7de979eb248f1b0c1fd28ec Mon Sep 17 00:00:00 2001 From: Cristian Olaru Date: Wed, 16 Mar 2022 02:06:46 +0200 Subject: [PATCH 7/7] lab 1: ex 7 Signed-off-by: Cristian Olaru --- tools/labs/skels/kernel_modules/7-list-proc/list_proc.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/labs/skels/kernel_modules/7-list-proc/list_proc.c b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.c index 79550a879abacd..1d6b61811d38b6 100644 --- a/tools/labs/skels/kernel_modules/7-list-proc/list_proc.c +++ b/tools/labs/skels/kernel_modules/7-list-proc/list_proc.c @@ -2,6 +2,7 @@ #include #include /* TODO: add missing headers */ +#include MODULE_DESCRIPTION("List current processes"); MODULE_AUTHOR("Kernel Hacker"); @@ -13,7 +14,12 @@ static int my_proc_init(void) /* TODO: print current process pid and its name */ + pr_info("Current process: pid = %d, name = %s\n", current->pid, current->comm); + /* TODO: print the pid and name of all processes */ + for_each_process(p) { + pr_info("pid = %d, name = %s\n", p->pid, p->comm); + } return 0; } @@ -21,6 +27,8 @@ static int my_proc_init(void) static void my_proc_exit(void) { /* TODO: print current process pid and name */ + + pr_info("Current process: pid = %d, name = %s\n", current->pid, current->comm); } module_init(my_proc_init);