Add loader iface to get pd by task 60/131760/5
authorAlexander Aksenov <a.aksenov@samsung.com>
Thu, 25 May 2017 12:59:52 +0000 (15:59 +0300)
committerAlexander Aksenov <a.aksenov@samsung.com>
Fri, 2 Jun 2017 12:47:20 +0000 (15:47 +0300)
pd struct was avaliable only by sspt_proc, so there was lots of
the same code everywhere the pd was got.

Change-Id: I38bf65c26253e919b5a85b4c3ffbf9dbbe17a585
Signed-off-by: Alexander Aksenov <a.aksenov@samsung.com>
got_patcher/gt_module.c
loader/loader.h
loader/loader_pd.c
preload/preload_module.c
uihv/uihv_module.c

index 0f28100..30a9bb3 100644 (file)
@@ -16,9 +16,6 @@
 #include "gt_module.h"
 #include "gt_debugfs.h"
 
-#define page_to_proc(page) ((page)->file->proc)
-#define ip_to_proc(ip) page_to_proc((ip)->page)
-#define urp_to_ip(rp) container_of(rp, struct sspt_ip, retprobe)
 
 enum task_id_t {
        GT_SET_BY_DENTRY,
@@ -102,14 +99,6 @@ static inline bool _is_pthread_data_available(void)
        return _is_bin_data_available(&_pthread_init);
 }
 
-static inline struct pd_t *_get_process_data(struct uretprobe *rp)
-{
-       struct sspt_ip *ip = urp_to_ip(rp);
-       struct sspt_proc *proc = ip_to_proc(ip);
-
-       return lpd_get(proc);
-}
-
 
 
 
@@ -225,7 +214,7 @@ static unsigned long _redirect_to_reloc_handler(struct uretprobe_instance *ri,
 static int _process_eh(struct uretprobe_instance *ri, struct pt_regs *regs,
                       rh_t rh, struct dentry *dentry)
 {
-       struct pd_t *pd = _get_process_data(ri->rp);
+       struct pd_t *pd = lpd_get_by_task(current);
        struct hd_t *hd;
        unsigned long vaddr = 0;
        unsigned long old_pc = swap_get_upc(regs);
@@ -267,7 +256,7 @@ static void _restore_exec(struct uretprobe_instance *ri, struct hd_t *hd)
 static int _process_rh(struct uretprobe_instance *ri, struct pt_regs *regs,
                       rh_t rh, struct dentry *dentry)
 {
-       struct pd_t *pd = _get_process_data(ri->rp);
+       struct pd_t *pd = lpd_get_by_task(current);
        struct hd_t *hd;
 
        if (dentry == NULL)
@@ -331,7 +320,7 @@ static struct probe_desc pin_reloc = MAKE_URPROBE(dl_reloc_eh, dl_reloc_rh, 0);
 
 static int pthread_init_eh(struct uretprobe_instance *ri, struct pt_regs *regs)
 {
-       struct pd_t *pd = _get_process_data(ri->rp);
+       struct pd_t *pd = lpd_get_by_task(current);
 
        /* Wait until pthread is inited, if it is going to be inited before
         * loading our library */
@@ -342,7 +331,7 @@ static int pthread_init_eh(struct uretprobe_instance *ri, struct pt_regs *regs)
 
 static int pthread_init_rh(struct uretprobe_instance *ri, struct pt_regs *regs)
 {
-       struct pd_t *pd = _get_process_data(ri->rp);
+       struct pd_t *pd = lpd_get_by_task(current);
 
        lpd_set_init_state(pd, true);
 
index b101bbd..9ba5ced 100644 (file)
@@ -3,8 +3,8 @@
 
 struct pd_t;
 struct hd_t;
-struct uretprobe;
 struct uretprobe_instance;
+struct task_struct;
 
 /* process loader states */
 enum ps_t {
@@ -33,6 +33,7 @@ int loader_add_handler(const char *path);
 
 
 struct pd_t *lpd_get(struct sspt_proc *proc);
+struct pd_t *lpd_get_by_task(struct task_struct *task);
 struct hd_t *lpd_get_hd(struct pd_t *pd, struct dentry *dentry);
 
 bool lpd_get_init_state(struct pd_t *pd);
index 505565d..4333eed 100644 (file)
@@ -15,6 +15,7 @@
 #include "loader_storage.h"
 #include "loader_defs.h"
 
+
 struct pd_t {
        unsigned long loader_base;
        unsigned long data_page;
@@ -372,6 +373,14 @@ struct pd_t *lpd_get(struct sspt_proc *proc)
 }
 EXPORT_SYMBOL_GPL(lpd_get);
 
+struct pd_t *lpd_get_by_task(struct task_struct *task)
+{
+       struct sspt_proc *proc = sspt_proc_by_task(task);
+
+       return lpd_get(proc);
+}
+EXPORT_SYMBOL_GPL(lpd_get_by_task);
+
 struct hd_t *lpd_get_hd(struct pd_t *pd, struct dentry *dentry)
 {
        struct hd_t *hd;
index 9ca5d7b..331a470 100644 (file)
 #include "preload_control.h"
 #include "preload_threads.h"
 
-#define page_to_proc(page) ((page)->file->proc)
-#define ip_to_proc(ip) page_to_proc((ip)->page)
-#define urp_to_ip(rp) container_of(rp, struct sspt_ip, retprobe)
-
 enum {
        /* task preload flags */
        HANDLER_RUNNING = 0x1
@@ -31,13 +27,6 @@ struct user_ptrs {
        char *call_type;
 };
 
-static inline struct pd_t *__get_process_data(struct uretprobe *rp)
-{
-       struct sspt_ip *ip = urp_to_ip(rp);
-       struct sspt_proc *proc = ip_to_proc(ip);
-
-       return lpd_get(proc);
-}
 
 static inline struct vm_area_struct *__get_vma_by_addr(struct task_struct *task,
                                                       unsigned long caddr)
@@ -174,7 +163,7 @@ static unsigned long __do_preload_entry(struct uretprobe_instance *ri,
 
 static int preload_us_entry(struct uretprobe_instance *ri, struct pt_regs *regs)
 {
-       struct pd_t *pd = __get_process_data(ri->rp);
+       struct pd_t *pd = lpd_get_by_task(current);
        struct hd_t *hd;
        unsigned long old_pc = swap_get_upc(regs);
        unsigned long flags = pt_get_flags(current);
@@ -234,7 +223,7 @@ static void __do_preload_ret(struct uretprobe_instance *ri, struct hd_t *hd)
 
 static int preload_us_ret(struct uretprobe_instance *ri, struct pt_regs *regs)
 {
-       struct pd_t *pd = __get_process_data(ri->rp);
+       struct pd_t *pd = lpd_get_by_task(current);
        struct sspt_ip *ip = container_of(ri->rp, struct sspt_ip, retprobe);
        struct dentry *dentry = ip->desc->info.pl_i.dentry;
        struct hd_t *hd;
index b6c1fed..5d983be 100644 (file)
@@ -24,14 +24,6 @@ static DEFINE_MUTEX(mutex_enable);
 
 static struct dentry *uihv_dentry = NULL;
 
-static inline struct pd_t *__get_process_data(struct uretprobe *rp)
-{
-       struct sspt_ip *ip = urp_to_ip(rp);
-       struct sspt_proc *proc = ip_to_proc(ip);
-
-       return lpd_get(proc);
-}
-
 
 /* ============================================================================
  * =                               ui_viewer                                  =
@@ -121,7 +113,7 @@ int uihv_set_handler(char *path)
  */
 static int uihv_main_eh(struct uretprobe_instance *ri, struct pt_regs *regs)
 {
-       struct pd_t *pd = __get_process_data(ri->rp);
+       struct pd_t *pd = lpd_get_by_task(current);
        struct hd_t *hd;
        unsigned long old_pc = swap_get_upc(regs);
        unsigned long vaddr = 0;
@@ -144,7 +136,7 @@ static int uihv_main_eh(struct uretprobe_instance *ri, struct pt_regs *regs)
 
 static int uihv_main_rh(struct uretprobe_instance *ri, struct pt_regs *regs)
 {
-       struct pd_t *pd = __get_process_data(ri->rp);
+       struct pd_t *pd = lpd_get_by_task(current);
        struct hd_t *hd;
 
        if (uihv_dentry == NULL)