diff options
Diffstat (limited to 'syscall.c')
-rw-r--r-- | syscall.c | 62 |
1 files changed, 31 insertions, 31 deletions
@@ -6,7 +6,7 @@ #include <linux/syscalls.h> #include <asm/uaccess.h> -//extern void* sys_call_table[]; +extern void* sys_call_table[]; static int uid; module_param(uid, int, 0644); @@ -32,46 +32,46 @@ asmlinkage int our_sys_open(const char* filename, int flags, int mode) return original_call(filename, flags, mode); } -unsigned long** find_sys_call_table(void) -{ - unsigned long** sctable; - unsigned long ptr; - - extern int loops_per_jiffy; - - sctable = NULL; - for (ptr = (unsigned long)&loops_per_jiffy; - ptr < (unsigned long)&boot_cpu_data; ptr += sizeof(void*)) { - unsigned long *p; - p = (unsigned long*)ptr; - if (p[__NR_open] == (unsigned long) sys_open) { - sctable = (unsigned long**)p; - return sctable; - } - } - - return sctable; -} +//unsigned long** find_sys_call_table(void) +//{ +// unsigned long** sctable; +// unsigned long ptr; +// +// extern int loops_per_jiffy; +// +// sctable = NULL; +// for (ptr = (unsigned long)&loops_per_jiffy; +// ptr < (unsigned long)&boot_cpu_data; ptr += sizeof(void*)) { +// unsigned long *p; +// p = (unsigned long*)ptr; +// if (p[__NR_open] == (unsigned long) sys_open) { +// sctable = (unsigned long**)p; +// return sctable; +// } +// } +// +// return sctable; +//} int init_module(void) { -// original_call = sys_call_table[__NR_open]; -// sys_call_table[__NR_open] = our_sys_open; -// -// printk(KERN_INFO "Spying on uid: %d\n", uid); - printk(KERN_INFO "sys_call_table[__NR_open] = %p\n", find_sys_call_table()[__NR_open]); + original_call = sys_call_table[__NR_open]; + sys_call_table[__NR_open] = our_sys_open; + + printk(KERN_INFO "Spying on uid: %d\n", uid); +// printk(KERN_INFO "sys_call_table[__NR_open] = %p\n", find_sys_call_table()[__NR_open]); return 0; } void cleanup_module(void) { -// if (sys_call_table[__NR_open] != our_sys_open) { -// printk(KERN_ALERT "Somebody else also played with the open syscall\n"); -// printk(KERN_ALERT "The system may be left in an unstable state\n"); -// } + if (sys_call_table[__NR_open] != our_sys_open) { + printk(KERN_ALERT "Somebody else also played with the open syscall\n"); + printk(KERN_ALERT "The system may be left in an unstable state\n"); + } -// sys_call_table[__NR_open] = original_call; + sys_call_table[__NR_open] = original_call; } MODULE_LICENSE("GPL"); |