Esempio n. 1
0
int hook_init(void) {
	int i;
	SYMSEARCH_BIND_FUNCTION_TO(dsifix, kallsyms_lookup_name, pkallsyms_lookup_name);
	SYMSEARCH_BIND_FUNCTION_TO(dsifix, kallsyms_lookup, pkallsyms_lookup);
	lock_kernel();
	for (i = 0; g_hi[i].newfunc; ++i) {
		hook(&g_hi[i]);
	}
	unlock_kernel();
	return 0;
}
Esempio n. 2
0
static int proc_reg_val_write(struct file *filp, const char __user *buffer, unsigned long len, void *data) {

	uint32_t newval=0;
	int ret;
	unsigned short val=0;
	st_logcap_reg* reg = data;

	if (!len || len >= sizeof(buf))
		return -ENOSPC;
	if (copy_from_user(buf, buffer, len))
		return -EFAULT;
	buf[len] = 0;

	if (sscanf(buf, "0x%x", (uint32_t *) &newval) > 0) {

		printk(KERN_INFO TAG": mask=0x%x newval=0x%x res=0x%x\n", reg->mask_wr, newval, reg->mask_wr & newval);
		newval &= reg->mask_wr;
		val = (unsigned short) newval;
		if (reg->reg && hooked) {
			SYMSEARCH_BIND_FUNCTION_TO(logcap, cpcap_direct_misc_write, _cpcap_direct_misc_write);
			ret = _cpcap_direct_misc_write(reg->reg, val, reg->mask_wr);
			if (ret < 0) {
				printk(KERN_ERR TAG": cpcap_direct_misc_write error %d !\n", ret);
			}
		}

		printk(KERN_INFO TAG": checked val=0x%x\n", val);

	} else
		printk(KERN_ERR TAG": wrong parameter, missing hexa prefix (0x....) !\n");

	return len;
}
static int ion_put_task_struct(struct task_struct *tsk)
{
	printk(KERN_DEBUG "__put_task_struct = %p\n", ___put_task_struct);
	SYMSEARCH_BIND_FUNCTION_TO(ion, __put_task_struct, ___put_task_struct);
	//SYMSEARCH_BIND_FUNCTION_TO(ion, exit_creds, _exit_creds);
	printk(KERN_DEBUG "__put_task_struct = %p\n", ___put_task_struct);
	if (atomic_dec_and_test(&tsk->usage)) {
		___put_task_struct(tsk);
		//WARN_ON(!tsk->exit_state);
		//WARN_ON(atomic_read(&tsk->usage));
		//exit_creds(tsk);
	}
	return 0;
}