diff options
-rw-r--r-- | kprobe/arch/asm-x86/dbi_kprobes.c | 2 | ||||
-rw-r--r-- | kprobe/dbi_kprobes.c | 62 | ||||
-rw-r--r-- | kprobe/dbi_kprobes.h | 20 |
3 files changed, 17 insertions, 67 deletions
diff --git a/kprobe/arch/asm-x86/dbi_kprobes.c b/kprobe/arch/asm-x86/dbi_kprobes.c index a7c65eaa..c69a831f 100644 --- a/kprobe/arch/asm-x86/dbi_kprobes.c +++ b/kprobe/arch/asm-x86/dbi_kprobes.c @@ -489,6 +489,8 @@ int setjmp_pre_handler (struct kprobe *p, struct pt_regs *regs) return 1; } +void dbi_jprobe_return_end(void); + void dbi_jprobe_return (void) { struct kprobe_ctlblk *kcb = get_kprobe_ctlblk (); diff --git a/kprobe/dbi_kprobes.c b/kprobe/dbi_kprobes.c index c20150bb..35e321ec 100644 --- a/kprobe/dbi_kprobes.c +++ b/kprobe/dbi_kprobes.c @@ -121,7 +121,9 @@ static void exit_sm(void) /* FIXME: free */ } -void kretprobe_assert(struct kretprobe_instance *ri, unsigned long orig_ret_address, unsigned long trampoline_address) +static void kretprobe_assert(struct kretprobe_instance *ri, + unsigned long orig_ret_address, + unsigned long trampoline_address) { if (!orig_ret_address || (orig_ret_address == trampoline_address)) { struct task_struct *task; @@ -274,8 +276,10 @@ void kprobes_inc_nmissed_count(struct kprobe *p) } } +static int alloc_nodes_kretprobe(struct kretprobe *rp); + /* Called with kretprobe_lock held */ -struct kretprobe_instance *get_free_rp_inst(struct kretprobe *rp) +static struct kretprobe_instance *get_free_rp_inst(struct kretprobe *rp) { struct kretprobe_instance *ri; DECLARE_NODE_PTR_FOR_HLIST(node); @@ -292,10 +296,10 @@ struct kretprobe_instance *get_free_rp_inst(struct kretprobe *rp) return NULL; } -EXPORT_SYMBOL_GPL(get_free_rp_inst); /* Called with kretprobe_lock held */ -struct kretprobe_instance *get_free_rp_inst_no_alloc(struct kretprobe *rp) +static struct kretprobe_instance * +get_free_rp_inst_no_alloc(struct kretprobe *rp) { struct kretprobe_instance *ri; DECLARE_NODE_PTR_FOR_HLIST(node); @@ -308,7 +312,7 @@ struct kretprobe_instance *get_free_rp_inst_no_alloc(struct kretprobe *rp) } /* Called with kretprobe_lock held */ -struct kretprobe_instance *get_used_rp_inst(struct kretprobe *rp) +static struct kretprobe_instance *get_used_rp_inst(struct kretprobe *rp) { struct kretprobe_instance *ri; DECLARE_NODE_PTR_FOR_HLIST(node); @@ -319,10 +323,9 @@ struct kretprobe_instance *get_used_rp_inst(struct kretprobe *rp) return NULL; } -EXPORT_SYMBOL_GPL(get_used_rp_inst); /* Called with kretprobe_lock held */ -void add_rp_inst (struct kretprobe_instance *ri) +static void add_rp_inst(struct kretprobe_instance *ri) { /* * Remove rp inst off the free list - @@ -339,10 +342,9 @@ void add_rp_inst (struct kretprobe_instance *ri) INIT_HLIST_NODE(&ri->uflist); hlist_add_head(&ri->uflist, &ri->rp->used_instances); } -EXPORT_SYMBOL_GPL(add_rp_inst); /* Called with kretprobe_lock held */ -void recycle_rp_inst(struct kretprobe_instance *ri) +static void recycle_rp_inst(struct kretprobe_instance *ri) { if (ri->rp) { hlist_del(&ri->hlist); @@ -353,15 +355,13 @@ void recycle_rp_inst(struct kretprobe_instance *ri) hlist_add_head(&ri->uflist, &ri->rp->free_instances); } } -EXPORT_SYMBOL_GPL(recycle_rp_inst); -struct hlist_head *kretprobe_inst_table_head(void *hash_key) +static struct hlist_head *kretprobe_inst_table_head(void *hash_key) { return &kretprobe_inst_table[hash_ptr(hash_key, KPROBE_HASH_BITS)]; } -EXPORT_SYMBOL_GPL(kretprobe_inst_table_head); -void free_rp_inst(struct kretprobe *rp) +static void free_rp_inst(struct kretprobe *rp) { struct kretprobe_instance *ri; while ((ri = get_free_rp_inst_no_alloc(rp)) != NULL) { @@ -369,7 +369,6 @@ void free_rp_inst(struct kretprobe *rp) kfree(ri); } } -EXPORT_SYMBOL_GPL(free_rp_inst); /* * Keep all fields in the kprobe consistent @@ -454,7 +453,7 @@ static inline void add_aggr_kprobe(struct kprobe *ap, struct kprobe *p) * This is the second or subsequent kprobe at the address - handle * the intricacies */ -int register_aggr_kprobe(struct kprobe *old_p, struct kprobe *p) +static int register_aggr_kprobe(struct kprobe *old_p, struct kprobe *p) { int ret = 0; struct kprobe *ap; @@ -485,7 +484,6 @@ int register_aggr_kprobe(struct kprobe *old_p, struct kprobe *p) return ret; } -EXPORT_SYMBOL_GPL(register_aggr_kprobe); static void remove_kprobe(struct kprobe *p) { @@ -730,7 +728,7 @@ int trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs) #define SCHED_RP_NR 200 #define COMMON_RP_NR 10 -int alloc_nodes_kretprobe(struct kretprobe *rp) +static int alloc_nodes_kretprobe(struct kretprobe *rp) { int alloc_nodes; struct kretprobe_instance *inst; @@ -900,36 +898,6 @@ void dbi_unregister_kretprobe(struct kretprobe *rp) dbi_unregister_kretprobes(&rp, 1); } -struct kretprobe *clone_kretprobe(struct kretprobe *rp) -{ - struct kprobe *old_p; - struct kretprobe *clone = NULL; - int ret; - - clone = kmalloc(sizeof(struct kretprobe), GFP_KERNEL); - if (!clone) { - DBPRINTF ("failed to alloc memory for clone probe %p!", rp->kp.addr); - return NULL; - } - memcpy(clone, rp, sizeof(struct kretprobe)); - clone->kp.pre_handler = pre_handler_kretprobe; - clone->kp.post_handler = NULL; - clone->kp.fault_handler = NULL; - clone->kp.break_handler = NULL; - old_p = get_kprobe(rp->kp.addr); - if (old_p) { - ret = register_aggr_kprobe(old_p, &clone->kp); - if (ret) { - kfree(clone); - return NULL; - } - atomic_inc(&kprobe_count); - } - - return clone; -} -EXPORT_SYMBOL_GPL(clone_kretprobe); - static void inline rm_task_trampoline(struct task_struct *p, struct kretprobe_instance *ri) { arch_set_task_pc(p, (unsigned long)ri->ret_addr); diff --git a/kprobe/dbi_kprobes.h b/kprobe/dbi_kprobes.h index 1332bea9..89c67db1 100644 --- a/kprobe/dbi_kprobes.h +++ b/kprobe/dbi_kprobes.h @@ -230,27 +230,19 @@ extern void kprobes_inc_nmissed_count (struct kprobe *p); /* Get the kprobe at this addr (if any) - called with preemption disabled */ struct kprobe *get_kprobe(void *addr); -struct hlist_head *kretprobe_inst_table_head (void *hash_key); int dbi_register_kprobe (struct kprobe *p); void dbi_unregister_kprobe(struct kprobe *p); -int register_aggr_kprobe (struct kprobe *old_p, struct kprobe *p); - int setjmp_pre_handler (struct kprobe *, struct pt_regs *); int longjmp_break_handler (struct kprobe *, struct pt_regs *); int dbi_register_jprobe (struct jprobe *p); void dbi_unregister_jprobe (struct jprobe *p); void dbi_jprobe_return (void); -void dbi_jprobe_return_end (void); - -struct kretprobe * clone_kretprobe (struct kretprobe *rp); -struct kretprobe_instance * get_used_rp_inst (struct kretprobe *rp); -int alloc_nodes_kretprobe(struct kretprobe *rp); int dbi_register_kretprobe (struct kretprobe *rp); void dbi_unregister_kretprobe (struct kretprobe *rp); void dbi_unregister_kretprobes(struct kretprobe **rpp, size_t size); @@ -269,23 +261,11 @@ void dbi_unregister_kretprobes_top(struct kretprobe **rps, size_t size, void dbi_unregister_kretprobe_bottom(struct kretprobe *rp); void dbi_unregister_kretprobes_bottom(struct kretprobe **rps, size_t size); -void kretprobe_assert (struct kretprobe_instance *ri, - unsigned long orig_ret_address, unsigned long trampoline_address); - -struct kretprobe_instance *get_free_rp_inst (struct kretprobe *rp); -struct kretprobe_instance *get_free_rp_inst_no_alloc (struct kretprobe *rp); -void free_rp_inst (struct kretprobe *rp); -void add_rp_inst (struct kretprobe_instance *ri); -void recycle_rp_inst (struct kretprobe_instance *ri); int dbi_disarm_urp_inst_for_task(struct task_struct *parent, struct task_struct *task); int trampoline_probe_handler (struct kprobe *p, struct pt_regs *regs); -#ifdef KPROBES_PROFILE -int pre_handler_kretprobe (struct kprobe *p, struct pt_regs *regs, struct vm_area_struct **vma, struct page **page, unsigned long **kaddr); -void set_normalized_timeval (struct timeval *tv, time_t sec, suseconds_t usec); -#endif extern DEFINE_PER_CPU (struct kprobe *, current_kprobe); extern struct hlist_head kprobe_table[KPROBE_TABLE_SIZE]; |