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; }
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; }