예제 #1
0
static void __exit my_exit (void)
{

    unregister_jprobe (&jp);
    printk (KERN_INFO "jprobe unregistered\n");
    printk (KERN_INFO "FINAL:mod_timer_count=%ld\n", mod_timer_count);
}
예제 #2
0
파일: hook.c 프로젝트: aiaxun/kmemchecker
int kmemchecker_probes_init(void)
{
	int ret;

	my_kmalloc_kretprobe.kp.symbol_name = func_name;
	ret = register_kretprobe(&my_kmalloc_kretprobe);
	if (ret < 0) {
		printk(KERN_INFO "kretprobe failed, returned %d\n",
			ret);
		return -1;
	}

	printk(KERN_INFO "Planted return probe at %s: %p\n",
			my_kmalloc_kretprobe.kp.symbol_name, 
			my_kmalloc_kretprobe.kp.addr);
	ret = register_jprobe(&my_kfree_jprobe);
	if (ret < 0) {
		unregister_kretprobe(&my_kmalloc_kretprobe);
		return -1;
	}
	printk(KERN_INFO "hook kfree\n");

	my_kmem_cache_alloc_kretprobe.kp.symbol_name = "__slab_alloc";
	ret = register_kretprobe(&my_kmem_cache_alloc_kretprobe);
	if (ret < 0) {
		unregister_kretprobe(&my_kmalloc_kretprobe);
		unregister_jprobe(&my_kfree_jprobe);
		return -1;
	}
	printk(KERN_INFO "hook __slab_alloc\n");
	return 0;
}
예제 #3
0
static __exit void tcpprobe_exit(void)
{
	kfifo_free(tcpw.fifo);
	proc_net_remove(procname);
	unregister_jprobe(&tcp_send_probe);

}
예제 #4
0
static void __exit my_exit(void)
{

	unregister_jprobe(&jp);
	unregister_kprobe(&kp);
	printk(KERN_INFO "k,jprobes unregistered\n");
}
예제 #5
0
static void __exit my_exit(void)
{

	unregister_jprobe(&jp);
	unregister_kprobe(&kp);
	pr_info("k,jprobes unregistered\n");
}
예제 #6
0
static void mexit(void)
{
	/* free the hash table contents */
	long tmp_save, tmp_sum;
	
	nf_unregister_hook(&nf_in_ops);
	nf_unregister_hook(&nf_out_ops);
	
	if (kprobe_in_reged)
        unregister_jprobe(&jps_netif_receive_skb);
	
	flush_workqueue(skb_wq);
	clear_remainder_skb();
	destroy_workqueue(skb_wq);

	release_hash_table_cache();
	free_percpu_file();
	free_slab();
	free_bitmap();	
	tcp_free_sha1sig_pool();
	
	tmp_save = atomic64_read(&save_num);
	tmp_sum =  atomic64_read(&sum_num);

	if (tmp_sum > 0)
		printk(KERN_INFO "Cache ratio is:%ld%%", (tmp_save*100)/tmp_sum);
	
	printk(KERN_INFO "savenum is:%ld; sumnum is:%ld,%ld(Mb);\nExit %s.", tmp_save, tmp_sum, (tmp_sum /1024 /1024 *8), THIS_MODULE->name);
	
}
예제 #7
0
파일: hook.c 프로젝트: aiaxun/kmemchecker
void kmemchecker_probes_exit(void)
{
	unregister_kretprobe(&my_kmalloc_kretprobe);
	printk(KERN_INFO "kretprobe at %p unregistered\n",
			my_kmalloc_kretprobe.kp.addr);
	unregister_jprobe(&my_kfree_jprobe);
	unregister_kretprobe(&my_kmem_cache_alloc_kretprobe);
}
예제 #8
0
static void cleanup(void)
{
    int i;

    for (i = 0; i < sizeof(my_jprobes)/sizeof(struct jprobe); ++i) {
        if (my_jprobes[i].kp.addr != 0) {
            unregister_jprobe(&my_jprobes[i]);
        }
    }
}
예제 #9
0
_STATIC void socket_notify_remove(void)
{
#if defined(CONFIG_IPV6)
	sock_unregister(hooked_inet6_family_ops.family);
	reinstall_family("IPv6", &inet6_family_ops);
#endif
	sock_unregister(hooked_inet_family_ops.family);
	unregister_jprobe(&inet_sock_destruct_jprobe);
	reinstall_family("IPv4", &inet_family_ops);
	synchronize_net();
}
예제 #10
0
static void __exit jprobe_exit(void)
{
	
	unregister_jprobe(&my_jprobe);
	printk(KERN_INFO "jprobe at %p unregistered\n", my_jprobe.kp.addr);
	
	unregister_kretprobe(&my_kretprobe);
	printk(KERN_INFO "kretprobe at %p unregistered\n", my_kretprobe.kp.addr);
	
	unregister_kretprobe(&my_socket_kretprobe);
	printk(KERN_INFO "kretprobe at %p unregistered\n", my_socket_kretprobe.kp.addr);
}
예제 #11
0
static void mvmhyper_exit(void)
{
	printk("mvmhyper exit.\n");
	for(i=0;i<jpnum;++i)
        if(useit[i])
		unregister_jprobe(&jphyper[i]);
	remove_proc_entry("aim", dir);
	remove_proc_entry("fault", dir);
	remove_proc_entry("time", dir);
	remove_proc_entry("id", dir);
	remove_proc_entry("signal", dir);
	remove_proc_entry("jphyper", NULL);
}
예제 #12
0
int __init probe_init(struct hook *hooks, struct rhook *rhooks)
{
	int err;
	struct hook *p;
	struct rhook *q;

	p = hooks;
	while (p->funcname) {
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
		p->jp.kp.symbol_name = p->funcname;
#else
		p->jp.kp.addr = (void*)kallsyms_lookup_name(p->funcname);
		BUG_ON(!p->jp.kp.addr);
#endif
		p++;
	}
	q = rhooks;
	while (q->funcname) {
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
		q->rp.kp.symbol_name = q->funcname;
#else
		q->rp.kp.addr = (void*)kallsyms_lookup_name(q->funcname);
		BUG_ON(!q->rp.kp.addr);
#endif
		q++;
	}

	err = 0;
	p = hooks;
	while (p->funcname && !err) {
		err = register_jprobe(&p->jp);
		p++;
	}
	if (!err) {
		q = rhooks;
		while (q->funcname && !err) {
			err = register_kretprobe(&q->rp);
			q++;
		}
		if (!err)
			return 0;
		while (--q != rhooks)
			unregister_kretprobe(&q->rp);
	}

	while (--p != hooks)
		unregister_jprobe(&p->jp);
	return err;
}
예제 #13
0
void cleanup_module(void)
{
    unregister_jprobe(&hid_register_report_probe);
    unregister_jprobe(&hid_add_field_probe);
    unregister_jprobe(&hid_parser_main_probe);
    unregister_jprobe(&hid_parser_global_probe);
    unregister_jprobe(&hid_parser_local_probe);
    unregister_jprobe(&hid_parser_reserved_probe);
    printk("HIDHUNTER :: jprobes unregisterd\n");
}
예제 #14
0
void __exit probe_exit(struct hook *hooks, struct rhook *rhooks)
{
	struct hook *p;
	struct rhook *q;

	p = hooks;
	while (p->funcname) {
		unregister_jprobe(&p->jp);
		p++;
	}
	q = rhooks;
	while (q->funcname) {
		unregister_kretprobe(&q->rp);
		q++;
	}
}
예제 #15
0
/*
    Helper cleanup resources routine.
    Release resources in the reverse order we acquired them
*/
void ReleaseResources(bool bFreeTsk, bool bRetDoFork)
{
    ReleaseProcFile();

    if(bFreeTsk) {
        unregister_jprobe(&jprobe_free_task);
        trace(DETAIL_LEVEL, "unregister_jprobe(0x%p)\n", &jprobe_free_task);
    }
    if(bRetDoFork) {
        unregister_kretprobe(&kret_do_fork);
        trace(DETAIL_LEVEL, "unregister_kretprobe(0x%p)\n", &kret_do_fork);
    }

    if(s_pLog) {
        kfree(s_pLog);
    }
}
예제 #16
0
static int test_jprobe(void)
{
	int ret;

	ret = register_jprobe(&jp);
	if (ret < 0) {
		printk(KERN_ERR "Kprobe smoke test failed: "
				"register_jprobe returned %d\n", ret);
		return ret;
	}

	ret = target(rand1);
	unregister_jprobe(&jp);
	if (jph_val == 0) {
		printk(KERN_ERR "Kprobe smoke test failed: "
				"jprobe handler not called\n");
		handler_errors++;
	}

	return 0;
}
예제 #17
0
_STATIC int __init socket_notify_init(void)
{
	int err;

	if ((err = install_hook("IPv4", &inet_family_ops, &hooked_inet_family_ops)))
		return err;
	if ((err = register_jprobe(&inet_sock_destruct_jprobe)) < 0) {
		printk(KERN_ERR "error registering inet_sock_destruct_jprobe\n");
		sock_unregister(hooked_inet_family_ops.family);
		reinstall_family("IPv4", &inet_family_ops);		
		return err;
	}
#if defined(CONFIG_IPV6)
	if ((err = install_hook("IPv6", &inet6_family_ops, &hooked_inet6_family_ops))) {
		unregister_jprobe(&inet_sock_destruct_jprobe);
		sock_unregister(hooked_inet_family_ops.family);
		reinstall_family("IPv4", &inet_family_ops);
		return err;
	}
#endif
	return 0;
}
예제 #18
0
static void __exit jprobe_exit(void)
{
	unregister_jprobe(&my_jprobe);
	printk("jprobe unregistered\n");
}
예제 #19
0
static void __exit jprobe_sys_mount_cleanup(void)
{
	unregister_jprobe(&jprobe_sys_mount);
	printk(KERN_INFO "Cleaning up %s module.\n", module_name(THIS_MODULE));
}
예제 #20
0
static void __exit lttng_addons_elv_exit(void)
{
	unregister_jprobe(&elv_jprobe);
	printk("lttng-elv removed\n");
}
void cleanup_module(void)
{         
        unregister_jprobe(&my_jprobe_udp);
        netlink_kernel_release(nl_sk_udp);
        printk("jprobe unregistered\n");
 }
예제 #22
0
파일: schk.c 프로젝트: kz0817/priv-misc
static __exit void cleanup_schk(void)
{
  unregister_jprobe(&jp);
  unregister_jprobe(&jp0);
  printk("Good by!\n");
}
예제 #23
0
static void __exit kprobe_exit(void)
{
	unregister_jprobe(&tcp_hook_jp);
	printk(KERN_INFO "Unregister tcp hook OK\n");
}
예제 #24
0
파일: procinfo.c 프로젝트: rsprabery/DECAF
static int linuxdrv_init(void)
{
    int i;
    
    jprobes[0].kp.symbol_name = "proc_fork_connector";
    jprobes[0].entry = (void*)linuxdrv_finish_fork;
    jprobes[1].kp.symbol_name = "proc_exit_connector";
    jprobes[1].entry = (void*)linuxdrv_finish_exit;
    jprobes[2].kp.symbol_name = "proc_exec_connector";
    jprobes[2].entry = (void*)linuxdrv_finish_exec;
    jprobes[3].kp.symbol_name = "vma_link";
    jprobes[3].entry = (void*)linuxdrv_insert_vma;
    jprobes[4].kp.symbol_name = "vma_adjust";
    jprobes[4].entry = (void*)linuxdrv_adjust_vma;
    jprobes[5].kp.symbol_name = "remove_vma";
    jprobes[5].entry = (void*)linuxdrv_remove_vma;
    

    printk(KERN_INFO 
        "strName = %s\n" /* entry name */
        "init_task_addr  = %lu\n" /* address of init_task */
        "init_task_size  = %lu\n" /* size of task_struct */
        "ts_tasks        = %lu\n" /* offset of tasks */
        "ts_pid          = %lu\n" /* offset of pid */
        "ts_tgid         = %lu\n" /* offset of tgid */
        "ts_group_leader = %lu\n" /* offset of group_leader */
        "ts_thread_group = %lu\n" /* offset of thread_group */
        "ts_real_parent  = %lu\n" /* offset of real_parent */
        "ts_mm           = %lu\n" /* offset of mm */
        "ts_stack        = %lu\n", /* offset of stack */
        UTS_RELEASE,
        (unsigned long)&init_task, 
        (unsigned long)sizeof(init_task),
        OFFSET_OF(task_struct, tasks),
        OFFSET_OF(task_struct, pid), 
        OFFSET_OF(task_struct, tgid),
        OFFSET_OF(task_struct, group_leader),
        OFFSET_OF(task_struct, thread_group),
        OFFSET_OF(task_struct, real_parent),
        OFFSET_OF(task_struct, mm),
        OFFSET_OF(task_struct, stack)  // TODO: not sure which field of the union should be filled
    );

    // cred, real_cred and related fields may not exist in Linux kernel 2.6
    printk(KERN_INFO
        "ts_real_cred    = %lu\n" /* offset of real_cred */
        "ts_cred         = %lu\n" /* offset of cred */
        "ts_comm         = %lu\n" /* offset of comm */
        "cred_uid        = %lu\n" /* offset of uid in cred */
        "cred_gid        = %lu\n" /* offset of gid in cred */
        "cred_euid       = %lu\n" /* offset of euid in cred */
        "cred_egid       = %lu\n", /* offset of egid in cred */
        OFFSET_OF(task_struct, real_cred),
        OFFSET_OF(task_struct, cred),
        OFFSET_OF(task_struct, comm),
        OFFSET_OF(cred, uid),
        OFFSET_OF(cred, gid),
        OFFSET_OF(cred, euid),
        OFFSET_OF(cred, egid)
        );

    printk(KERN_INFO 
        "mm_mmap         = %lu\n" /* offset of mmap in mm_struct */
        "mm_pgd          = %lu\n" /* offset of pgd in mm_struct */
        "mm_arg_start    = %lu\n" /* offset of arg_start in mm_struct */
        "mm_start_brk    = %lu\n" /* offset of start_brk in mm_struct */
        "mm_brk          = %lu\n" /* offset of brk in mm_struct */
        "mm_start_stack  = %lu\n", /* offset of start_stack in mm_struct */
        OFFSET_OF(mm_struct, mmap),
        OFFSET_OF(mm_struct, pgd),
        OFFSET_OF(mm_struct, arg_start),
        OFFSET_OF(mm_struct, start_brk),
        OFFSET_OF(mm_struct, brk),
        OFFSET_OF(mm_struct, start_stack)
        );

    printk(KERN_INFO
        "vma_vm_start    = %lu\n" /* offset of vm_start in vm_area_struct */
        "vma_vm_end      = %lu\n" /* offset of vm_end in vm_area_struct */
        "vma_vm_next     = %lu\n" /* offset of vm_next in vm_area_struct */
        "vma_vm_file     = %lu\n" /* offset of vm_file in vm_area_struct */
        "vma_vm_flags    = %lu\n" /* offset of vm_flags in vm_area_struct */
        "vma_vm_pgoff    = %lu\n", /* offset of vm_pgoff in vm_area_struct */
        OFFSET_OF(vm_area_struct, vm_start),
        OFFSET_OF(vm_area_struct, vm_end),
        OFFSET_OF(vm_area_struct, vm_next),
        OFFSET_OF(vm_area_struct, vm_file),
        OFFSET_OF(vm_area_struct, vm_flags),
        OFFSET_OF(vm_area_struct, vm_pgoff)
        );

    printk(KERN_INFO
        "file_dentry     = %lu\n" /* offset of f_dentry in file */
        "file_inode      = %lu\n" /* inode of file struct */
        "dentry_d_name   = %lu\n" /* offset of d_name in dentry */
        "dentry_d_iname  = %lu\n" /* offset of d_iname in dentry */ 
        "dentry_d_parent = %lu\n" /* offset of d_parent in dentry */
        "ti_task         = %lu\n" /* offset of task in thread_info */
        "inode_ino   = %lu\n", /* offset of inode index in inode struct */
        OFFSET_OF(file, f_dentry),
        OFFSET_OF(dentry, d_inode),
        OFFSET_OF(dentry, d_name),
        OFFSET_OF(dentry, d_iname),
        OFFSET_OF(dentry, d_parent),
        OFFSET_OF(thread_info, task),
        OFFSET_OF(inode,i_ino)
        );


    for(i = 0; i < JPROBE_TOTAL; i++) {
        register_jprobe(&jprobes[i]);
    }
    
    for(i = 0; i < JPROBE_TOTAL; i++)  {
        if(jprobes[i].kp.addr != NULL)  {
            printk(KERN_INFO
            "%s  = %lu\n",
            jprobes[i].kp.symbol_name,
            jprobes[i].kp.addr);
        }
    }

    for(i = 0; i < JPROBE_TOTAL; i++) {
        unregister_jprobe(&jprobes[i]);
    } 
    return -1;
}
static void __exit kprobe_exit(void)
{
	unregister_jprobe(&jp);
	printk("capable kprobes unregistered\n");
}
예제 #26
0
static void __exit hybla_cong_avoid_jprobe_exit(void)
{
	unregister_jprobe(&hybla_cong_avoid_jprobe);
	printk(KERN_INFO "hybla_cong_avoid_jprobe at %p unregistered\n", hybla_cong_avoid_jprobe.kp.addr);
}
예제 #27
0
static int lkdtm_register_cpoint(enum cname which)
{
	int ret;

	cpoint = CN_INVALID;
	if (lkdtm.entry != NULL)
		unregister_jprobe(&lkdtm);

	switch (which) {
	case CN_DIRECT:
		lkdtm_do_action(cptype);
		return 0;
	case CN_INT_HARDWARE_ENTRY:
		lkdtm.kp.symbol_name = "do_IRQ";
		lkdtm.entry = (kprobe_opcode_t*) jp_do_irq;
		break;
	case CN_INT_HW_IRQ_EN:
		lkdtm.kp.symbol_name = "handle_IRQ_event";
		lkdtm.entry = (kprobe_opcode_t*) jp_handle_irq_event;
		break;
	case CN_INT_TASKLET_ENTRY:
		lkdtm.kp.symbol_name = "tasklet_action";
		lkdtm.entry = (kprobe_opcode_t*) jp_tasklet_action;
		break;
	case CN_FS_DEVRW:
		lkdtm.kp.symbol_name = "ll_rw_block";
		lkdtm.entry = (kprobe_opcode_t*) jp_ll_rw_block;
		break;
	case CN_MEM_SWAPOUT:
		lkdtm.kp.symbol_name = "shrink_inactive_list";
		lkdtm.entry = (kprobe_opcode_t*) jp_shrink_inactive_list;
		break;
	case CN_TIMERADD:
		lkdtm.kp.symbol_name = "hrtimer_start";
		lkdtm.entry = (kprobe_opcode_t*) jp_hrtimer_start;
		break;
	case CN_SCSI_DISPATCH_CMD:
		lkdtm.kp.symbol_name = "scsi_dispatch_cmd";
		lkdtm.entry = (kprobe_opcode_t*) jp_scsi_dispatch_cmd;
		break;
	case CN_IDE_CORE_CP:
#ifdef CONFIG_IDE
		lkdtm.kp.symbol_name = "generic_ide_ioctl";
		lkdtm.entry = (kprobe_opcode_t*) jp_generic_ide_ioctl;
#else
		pr_info("Crash point not available\n");
		return -EINVAL;
#endif
		break;
	default:
		pr_info("Invalid Crash Point\n");
		return -EINVAL;
	}

	cpoint = which;
	if ((ret = register_jprobe(&lkdtm)) < 0) {
		pr_info("Couldn't register jprobe\n");
		cpoint = CN_INVALID;
	}

	return ret;
}
예제 #28
0
void cleanup_module(void)
{
	unregister_jprobe(&my_jprobe);
	printk("jprobe unregistered\n");
}
예제 #29
0
static void __exit my_exit(void)
{
	unregister_jprobe(&my_probe);
	printk("Hypercall FI kernel module: exit\n");
}
예제 #30
0
static void __exit addons_lttng_ovs_upcall_end_exit(void)
{
	unregister_jprobe(&lttng_ovs_upcall_end_jprobe);
	printk("lttng-ovs-upcall-end-probe removed\n");
}