From e744a5e3d624f477f7ecb148d69c79d48eaedba9 Mon Sep 17 00:00:00 2001 From: zy Date: Fri, 10 Nov 2023 04:46:50 -0500 Subject: open/release save and load pid --- monitor_kernel.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/monitor_kernel.c b/monitor_kernel.c index 35cd8fa..098bb80 100644 --- a/monitor_kernel.c +++ b/monitor_kernel.c @@ -13,11 +13,21 @@ static dev_t dev_num; static struct cdev *watch_cdev; static struct class *watch_class; +struct my_device_data +{ + pid_t pid; +}; + static int device_open(struct inode *inode, struct file *file) { // printk(KERN_INFO "%s\n", __FUNCTION__); + struct my_device_data *data; // save pid - file->private_data = current->pid; + data = kmalloc(sizeof(*data), GFP_KERNEL); + if (!data) + return -ENOMEM; + data->pid = current->pid; + file->private_data = data; return 0; } @@ -25,7 +35,9 @@ static int device_release(struct inode *inode, struct file *file) { // printk(KERN_INFO "%s\n", __FUNCTION__); // load pid - pid_t pid = (pid_t)file->private_data; + struct my_device_data *data = file->private_data; + // clear watch with pid + clear_watch(data->pid); return 0; } @@ -125,7 +137,7 @@ int init_module(void) printk(KERN_INFO "dev number: %d\n", dev_num); printk(KERN_INFO "path: /dev/%s %d\n", DEVICE_NAME, dev_num); - fn_kallsyms_lookup_name_init(); // init kallsyms_lookup_name + fn_kallsyms_lookup_name_init(); // init kallsyms_lookup_name LOOKUP_SYMS(stack_trace_save_tsk); // stack_trace_save_tsk LOOKUP_SYMS(show_stack); // show_stack @@ -135,8 +147,8 @@ int init_module(void) void cleanup_module(void) { printk(KERN_INFO "%s\n", __FUNCTION__); - // - clear_all_watch(); + // clear all timer and page list + clear_all_watch(); // unmount device_destroy(watch_class, dev_num); class_destroy(watch_class); -- cgit v1.2.3