[CLEAN] remove kjumper 40/69640/3
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Fri, 13 May 2016 07:59:32 +0000 (10:59 +0300)
committerDmitry Kovalenko <d.kovalenko@samsung.com>
Wed, 18 May 2016 10:46:44 +0000 (03:46 -0700)
Change-Id: I9ec339052737f62c38d08587b98cf355e8a7764c
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
kprobe/arch/arm/swap-asm/swap_kprobes.c
kprobe/arch/arm/swap-asm/swap_kprobes.h
kprobe/arch/x86/swap-asm/swap_kprobes.c
kprobe/arch/x86/swap-asm/swap_kprobes.h
kprobe/swap_kprobes.h

index 9a8eee4..ba7deb0 100644 (file)
@@ -344,14 +344,7 @@ int arch_kp_core_prepare(struct kp_core *p, struct slot_manager *sm)
  */
 static void prepare_singlestep(struct kp_core *p, struct pt_regs *regs)
 {
-       int cpu = smp_processor_id();
-
-       if (p->ss_addr[cpu]) {
-               regs->ARM_pc = p->ss_addr[cpu];
-               p->ss_addr[cpu] = 0;
-       } else {
-               regs->ARM_pc = (unsigned long)p->ainsn.insn;
-       }
+       regs->ARM_pc = (unsigned long)p->ainsn.insn;
 }
 
 static void save_previous_kp_core(struct kp_core_ctlblk *kcb)
@@ -594,119 +587,6 @@ void swap_arch_prepare_kretprobe(struct kretprobe_instance *ri,
 
 /*
  ******************************************************************************
- *                                   kjumper                                  *
- ******************************************************************************
- */
-struct kj_cb_data {
-       unsigned long ret_addr;
-
-       struct pt_regs regs;
-
-       jumper_cb_t cb;
-       char data[0];
-};
-
-static struct kj_cb_data * __used kjump_handler(struct kj_cb_data *data)
-{
-       /* call callback */
-       data->cb(data->data);
-
-       return data;
-}
-
-/**
- * @brief Trampoline for kjump kprobes.
- *
- * @return Void.
- */
-void kjump_trampoline(void);
-__asm(
-       "kjump_trampoline:\n"
-
-       "mov    r0, r10\n"
-       "bl     kjump_handler\n"
-       "nop\n"           /* for kjump_kprobe */
-);
-
-/**
- * @brief Registers callback for kjump probes.
- *
- * @param regs Pointer to CPU registers data.
- * @param cb Kjump probe callback of jumper_cb_t type.
- * @param data Pointer to data that should be saved in kj_cb_data.
- * @param size Size of the data.
- * @return 0.
- */
-int set_kjump_cb(struct pt_regs *regs, jumper_cb_t cb, void *data, size_t size)
-{
-       struct kp_core *p;
-       struct kj_cb_data *cb_data;
-
-       cb_data = kmalloc(sizeof(*cb_data) + size, GFP_ATOMIC);
-       if (cb_data == NULL)
-               return -ENOMEM;
-
-       /* save data */
-       if (size)
-               memcpy(cb_data->data, data, size);
-
-       p = kp_core_running();
-       p->ss_addr[smp_processor_id()] = (unsigned long)&kjump_trampoline;
-
-       cb_data->ret_addr = (unsigned long)p->ainsn.insn;
-       cb_data->cb = cb;
-
-       /* save regs */
-       memcpy(&cb_data->regs, regs, sizeof(*regs));
-
-       /* save cb_data to r10 */
-       regs->ARM_r10 = (long)cb_data;
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(set_kjump_cb);
-
-static int kjump_pre_handler(struct kprobe *p, struct pt_regs *regs)
-{
-       struct kj_cb_data *data = (struct kj_cb_data *)regs->ARM_r0;
-
-       /* restore regs */
-       memcpy(regs, &data->regs, sizeof(*regs));
-       /* p->ss_addr[smp_processor_id()] = (unsigned long)data->ret_addr; */
-
-       /* FIXME: potential memory leak, when process kill */
-       kfree(data);
-
-       return 0;
-}
-
-static struct kprobe kjump_kprobe = {
-       .pre_handler = kjump_pre_handler,
-       .addr = (unsigned long)&kjump_trampoline + 2 * 4,       /* nop */
-};
-
-static int kjump_init(void)
-{
-       int ret;
-
-       ret = swap_register_kprobe(&kjump_kprobe);
-       if (ret)
-               printk(KERN_INFO "ERROR: kjump_init(), ret=%d\n", ret);
-
-       return ret;
-}
-
-static void kjump_exit(void)
-{
-       swap_unregister_kprobe(&kjump_kprobe);
-}
-
-
-
-
-
-/*
- ******************************************************************************
  *                                   jumper                                   *
  ******************************************************************************
  */
@@ -880,16 +760,8 @@ not_found:
  */
 int swap_arch_init_kprobes(void)
 {
-       int ret;
-
        swap_register_undef_hook(&undef_ho_k);
 
-       ret = kjump_init();
-       if (ret) {
-               swap_unregister_undef_hook(&undef_ho_k);
-               return ret;
-       }
-
        return 0;
 }
 
@@ -900,7 +772,6 @@ int swap_arch_init_kprobes(void)
  */
 void swap_arch_exit_kprobes(void)
 {
-       kjump_exit();
        swap_unregister_undef_hook(&undef_ho_k);
 }
 
index fff80d1..9f16dbf 100644 (file)
@@ -703,9 +703,6 @@ static inline unsigned long swap_get_sarg(struct pt_regs *regs, unsigned long n)
 /* jumper */
 typedef unsigned long (*jumper_cb_t)(void *);
 
-int set_kjump_cb(struct pt_regs *regs, jumper_cb_t cb,
-                void *data, size_t size);
-
 unsigned long get_jump_addr(void);
 int set_jump_cb(unsigned long ret_addr, struct pt_regs *regs,
                jumper_cb_t cb, void *data, size_t size);
index 37a74c7..d8e615f 100644 (file)
@@ -822,111 +822,6 @@ void swap_arch_prepare_kretprobe(struct kretprobe_instance *ri,
 
 /*
  ******************************************************************************
- *                                   kjumper                                  *
- ******************************************************************************
- */
-struct kj_cb_data {
-       struct pt_regs regs;
-       struct kp_core *p;
-
-       jumper_cb_t cb;
-       char data[0];
-};
-
-static struct kj_cb_data * __used kjump_handler(struct kj_cb_data *data)
-{
-       /* call callback */
-       data->cb(data->data);
-
-       return data;
-}
-
-void kjump_trampoline(void);
-void kjump_trampoline_int3(void);
-__asm(
-       "kjump_trampoline:\n"
-       "call   kjump_handler\n"
-       "kjump_trampoline_int3:\n"
-       "nop\n" /* for restore_regs_kp */
-);
-
-int set_kjump_cb(struct pt_regs *regs, jumper_cb_t cb, void *data, size_t size)
-{
-       struct kj_cb_data *cb_data;
-
-       cb_data = kmalloc(sizeof(*cb_data) + size, GFP_ATOMIC);
-       if (cb_data == NULL)
-               return -ENOMEM;
-
-       /* save regs */
-       cb_data->regs = *regs;
-
-       cb_data->p = kp_core_running();
-       cb_data->cb = cb;
-
-       /* save data */
-       if (size)
-               memcpy(cb_data->data, data, size);
-
-       /* save pointer cb_data at ax */
-       regs->ax = (long)cb_data;
-
-       /* jump to kjump_trampoline */
-       regs->ip = (unsigned long)&kjump_trampoline;
-
-       kp_core_running_set(NULL);
-
-       return 1;
-}
-EXPORT_SYMBOL_GPL(set_kjump_cb);
-
-static int restore_regs_pre_handler(struct kprobe *kp, struct pt_regs *regs)
-{
-       struct kj_cb_data *data = (struct kj_cb_data *)regs->ax;
-       struct kp_core *p = data->p;
-       struct kp_core_ctlblk *kcb = kp_core_ctlblk();
-
-       /* restore regs */
-       *regs = data->regs;
-
-       /* FIXME: potential memory leak, when process kill */
-       kfree(data);
-
-       kcb = kp_core_ctlblk();
-
-       set_current_kp_core(p, regs, kcb);
-       setup_singlestep(p, regs, kcb);
-
-       return 1;
-}
-
-static struct kprobe restore_regs_kp = {
-       .pre_handler = restore_regs_pre_handler,
-       .addr = (unsigned long)&kjump_trampoline_int3,  /* nop */
-};
-
-static int kjump_init(void)
-{
-       int ret;
-
-       ret = swap_register_kprobe(&restore_regs_kp);
-       if (ret)
-               printk(KERN_INFO "ERROR: kjump_init(), ret=%d\n", ret);
-
-       return ret;
-}
-
-static void kjump_exit(void)
-{
-       swap_unregister_kprobe(&restore_regs_kp);
-}
-
-
-
-
-
-/*
- ******************************************************************************
  *                                   jumper                                   *
  ******************************************************************************
  */
@@ -1061,18 +956,8 @@ int swap_arch_init_kprobes(void)
 
        ret = register_die_notifier(&kprobe_exceptions_nb);
        if (ret)
-               goto unreg_tdraw;
-
-       ret = kjump_init();
-       if (ret)
-               goto unreg_die;
+               swap_td_raw_unreg(&kp_tdraw);
 
-       return 0;
-
-unreg_die:
-       unregister_die_notifier(&kprobe_exceptions_nb);
-unreg_tdraw:
-       swap_td_raw_unreg(&kp_tdraw);
        return ret;
 }
 
@@ -1083,7 +968,6 @@ unreg_tdraw:
  */
 void swap_arch_exit_kprobes(void)
 {
-       kjump_exit();
        unregister_die_notifier(&kprobe_exceptions_nb);
        swap_td_raw_unreg(&kp_tdraw);
 }
index 533d195..43f0f7a 100644 (file)
@@ -273,9 +273,6 @@ static inline unsigned long swap_get_sarg(struct pt_regs *regs, unsigned long n)
 /* jumper */
 typedef unsigned long (*jumper_cb_t)(void *);
 
-int set_kjump_cb(struct pt_regs *regs, jumper_cb_t cb,
-                void *data, size_t size);
-
 unsigned long get_jump_addr(void);
 int set_jump_cb(unsigned long ret_addr, struct pt_regs *regs,
                jumper_cb_t cb, void *data, size_t size);
index c7f1d55..9e5b429 100644 (file)
@@ -134,8 +134,6 @@ struct kp_core {
        kprobe_opcode_t opcode;
 
        struct arch_specific_insn ainsn;
-
-       unsigned long ss_addr[NR_CPUS];
 };
 
 /**