summaryrefslogtreecommitdiff
path: root/monitor_kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'monitor_kernel.c')
-rw-r--r--monitor_kernel.c22
1 files 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);