static int __preload_cbs_start_h = -1;
static int __preload_cbs_stop_h = -1;
-static inline struct process_data *__get_process_data(struct uretprobe *rp)
+static inline struct pd_t *__get_process_data(struct uretprobe *rp)
{
struct us_ip *ip = to_us_ip(rp);
struct sspt_proc *proc = ip_to_proc(ip);
{
struct mmap_priv *priv = (struct mmap_priv *)ri->data;
struct task_struct *task = current->group_leader;
- struct process_data *pd;
+ struct pd_t *pd;
struct sspt_proc *proc;
struct dentry *loader_dentry;
struct bin_info *hi;
static unsigned long __not_loaded_entry(struct uretprobe_instance *ri,
struct pt_regs *regs,
- struct process_data *pd)
+ struct pd_t *pd)
{
char __user *path = NULL;
unsigned long vaddr = 0;
static unsigned long __loaded_entry(struct uretprobe_instance *ri,
struct pt_regs *regs,
- struct process_data *pd)
+ struct pd_t *pd)
{
struct us_ip *ip = container_of(ri->rp, struct us_ip, retprobe);
unsigned long offset = ip->desc->info.pl_i.handler;
}
static void __loading_ret(struct uretprobe_instance *ri, struct pt_regs *regs,
- struct process_data *pd)
+ struct pd_t *pd)
{
struct us_priv *priv = (struct us_priv *)ri->data;
unsigned long vaddr = 0;
}
static void __loaded_ret(struct uretprobe_instance *ri, struct pt_regs *regs,
- struct process_data *pd)
+ struct pd_t *pd)
{
struct us_ip *ip = container_of(ri->rp, struct us_ip, retprobe);
struct us_priv *priv = (struct us_priv *)ri->data;
}
static void __failed_ret(struct uretprobe_instance *ri, struct pt_regs *regs,
- struct process_data *pd)
+ struct pd_t *pd)
{
if (preload_pd_get_attempts(pd)) {
preload_pd_set_state(pd, NOT_LOADED);
static int preload_us_entry(struct uretprobe_instance *ri, struct pt_regs *regs)
{
- struct process_data *pd = __get_process_data(ri->rp);
+ struct pd_t *pd = __get_process_data(ri->rp);
struct us_ip *ip = container_of(ri->rp, struct us_ip, retprobe);
struct us_priv *priv = (struct us_priv *)ri->data;
unsigned long flags = get_preload_flags(current);
static int preload_us_ret(struct uretprobe_instance *ri, struct pt_regs *regs)
{
- struct process_data *pd = __get_process_data(ri->rp);
+ struct pd_t *pd = __get_process_data(ri->rp);
switch (preload_pd_get_state(pd)) {
case NOT_LOADED:
#include "preload_storage.h"
#include "preload.h"
-struct process_data {
- enum preload_state_t state;
+struct pd_t {
+ enum ps_t state;
unsigned long loader_base;
unsigned long handlers_base;
unsigned long data_page;
void __user *handle;
long attempts;
- long refcount;
};
+
static struct bin_info *handlers_info;
return (file && (vma->vm_flags & VM_EXEC) && (file->f_dentry == dentry));
}
-static inline enum preload_state_t __get_state(struct process_data *pd)
+static inline enum ps_t __get_state(struct pd_t *pd)
{
return pd->state;
}
-static inline void __set_state(struct process_data *pd,
- enum preload_state_t state)
+static inline void __set_state(struct pd_t *pd,
+ enum ps_t state)
{
pd->state = state;
}
-static inline unsigned long __get_loader_base(struct process_data *pd)
+static inline unsigned long __get_loader_base(struct pd_t *pd)
{
return pd->loader_base;
}
-static inline void __set_loader_base(struct process_data *pd,
+static inline void __set_loader_base(struct pd_t *pd,
unsigned long addr)
{
pd->loader_base = addr;
}
-static inline unsigned long __get_handlers_base(struct process_data *pd)
+static inline unsigned long __get_handlers_base(struct pd_t *pd)
{
return pd->handlers_base;
}
-static inline void __set_handlers_base(struct process_data *pd,
+static inline void __set_handlers_base(struct pd_t *pd,
unsigned long addr)
{
pd->handlers_base = addr;
}
-static inline char __user *__get_path(struct process_data *pd)
+static inline char __user *__get_path(struct pd_t *pd)
{
return (char *)pd->data_page;
}
-static inline unsigned long __get_data_page(struct process_data *pd)
+static inline unsigned long __get_data_page(struct pd_t *pd)
{
return pd->data_page;
}
-static inline void __set_data_page(struct process_data *pd, unsigned long page)
+static inline void __set_data_page(struct pd_t *pd, unsigned long page)
{
pd->data_page = page;
}
-static inline void *__get_handle(struct process_data *pd)
+static inline void *__get_handle(struct pd_t *pd)
{
return pd->handle;
}
-static inline void __set_handle(struct process_data *pd, void __user *handle)
+static inline void __set_handle(struct pd_t *pd, void __user *handle)
{
pd->handle = handle;
}
-static inline long __get_attempts(struct process_data *pd)
+static inline long __get_attempts(struct pd_t *pd)
{
return pd->attempts;
}
-static inline void __set_attempts(struct process_data *pd, long attempts)
+static inline void __set_attempts(struct pd_t *pd, long attempts)
{
pd->attempts = attempts;
}
-static inline long __get_refcount(struct process_data *pd)
-{
- return pd->refcount;
-}
-
-static inline void __set_refcount(struct process_data *pd, long refcount)
-{
- pd->refcount = refcount;
-}
-
-enum preload_state_t preload_pd_get_state(struct process_data *pd)
+enum ps_t preload_pd_get_state(struct pd_t *pd)
{
if (pd == NULL)
return 0;
return __get_state(pd);
}
-void preload_pd_set_state(struct process_data *pd, enum preload_state_t state)
+void preload_pd_set_state(struct pd_t *pd, enum ps_t state)
{
if (pd == NULL) {
printk(PRELOAD_PREFIX "%d: No process data! Current %d %s\n", __LINE__,
__set_state(pd, state);
}
-unsigned long preload_pd_get_loader_base(struct process_data *pd)
+unsigned long preload_pd_get_loader_base(struct pd_t *pd)
{
if (pd == NULL)
return 0;
return __get_loader_base(pd);
}
-void preload_pd_set_loader_base(struct process_data *pd, unsigned long vaddr)
+void preload_pd_set_loader_base(struct pd_t *pd, unsigned long vaddr)
{
__set_loader_base(pd, vaddr);
}
-unsigned long preload_pd_get_handlers_base(struct process_data *pd)
+unsigned long preload_pd_get_handlers_base(struct pd_t *pd)
{
if (pd == NULL)
return 0;
return __get_handlers_base(pd);
}
-void preload_pd_set_handlers_base(struct process_data *pd, unsigned long vaddr)
+void preload_pd_set_handlers_base(struct pd_t *pd, unsigned long vaddr)
{
__set_handlers_base(pd, vaddr);
}
-void preload_pd_put_path(struct process_data *pd)
-{
- if (pd == NULL) {
- printk(PRELOAD_PREFIX "%d: No process data! Current %d %s\n", __LINE__,
- current->tgid, current->comm);
- return;
- }
-
- if (__get_data_page(pd) == 0)
- return;
-
- __set_data_page(pd, 0);
-}
-
-char __user *preload_pd_get_path(struct process_data *pd)
+char __user *preload_pd_get_path(struct pd_t *pd)
{
char __user *path = __get_path(pd);
-void *preload_pd_get_handle(struct process_data *pd)
+void *preload_pd_get_handle(struct pd_t *pd)
{
if (pd == NULL)
return NULL;
return __get_handle(pd);
}
-void preload_pd_set_handle(struct process_data *pd, void __user *handle)
+void preload_pd_set_handle(struct pd_t *pd, void __user *handle)
{
if (pd == NULL) {
printk(PRELOAD_PREFIX "%d: No process data! Current %d %s\n", __LINE__,
__set_handle(pd, handle);
}
-long preload_pd_get_attempts(struct process_data *pd)
+long preload_pd_get_attempts(struct pd_t *pd)
{
if (pd == NULL)
return -EINVAL;
return __get_attempts(pd);
}
-void preload_pd_dec_attempts(struct process_data *pd)
+void preload_pd_dec_attempts(struct pd_t *pd)
{
long attempts;
__set_attempts(pd, attempts);
}
-void preload_pd_inc_refs(struct process_data *pd)
-{
- long refs;
-
- if (pd == NULL) {
- printk(PRELOAD_PREFIX "%d: No process data! Current %d %s\n", __LINE__,
- current->tgid, current->comm);
- return;
- }
-
- refs = __get_refcount(pd);
- refs++;
- __set_refcount(pd, refs);
-}
-
-void preload_pd_dec_refs(struct process_data *pd)
-{
- long refs;
-
- if (pd == NULL) {
- printk(PRELOAD_PREFIX "%d: No process data! Current %d %s\n", __LINE__,
- current->tgid, current->comm);
- return;
- }
-
- refs = __get_refcount(pd);
- refs--;
- __set_refcount(pd, refs);
-}
-
-long preload_pd_get_refs(struct process_data *pd)
-{
- if (pd == NULL)
- return -EINVAL;
-
- return __get_refcount(pd);
-}
-
-struct process_data *preload_pd_get(struct sspt_proc *proc)
+struct pd_t *preload_pd_get(struct sspt_proc *proc)
{
- return (struct process_data *)proc->private_data;
+ return (struct pd_t *)proc->private_data;
}
static unsigned long make_preload_path(void)
return NULL;
}
-static void set_already_mapp(struct process_data *pd, struct mm_struct *mm)
+static void set_already_mapp(struct pd_t *pd, struct mm_struct *mm)
{
struct vm_area_struct *vma;
struct dentry *ld = preload_debugfs_get_loader_dentry();
up_read(&mm->mmap_sem);
}
-static struct process_data *do_create_pd(struct task_struct *task)
+static struct pd_t *do_create_pd(struct task_struct *task)
{
- struct process_data *pd;
+ struct pd_t *pd;
unsigned long page;
int ret;
static void *pd_create(struct sspt_proc *proc)
{
- struct process_data *pd;
+ struct pd_t *pd;
pd = do_create_pd(proc->task);
#ifndef __PRELOAD_PD_H__
#define __PRELOAD_PD_H__
-struct process_data;
+struct pd_t;
struct sspt_proc;
/* process preload states */
-enum preload_state_t {
+enum ps_t {
NOT_LOADED,
LOADING,
LOADED,
ERROR
};
-struct process_data *preload_pd_get(struct sspt_proc *proc);
+struct pd_t *preload_pd_get(struct sspt_proc *proc);
-enum preload_state_t preload_pd_get_state(struct process_data *pd);
-void preload_pd_set_state(struct process_data *pd, enum preload_state_t state);
-unsigned long preload_pd_get_loader_base(struct process_data *pd);
-void preload_pd_set_loader_base(struct process_data *pd, unsigned long vaddr);
-unsigned long preload_pd_get_handlers_base(struct process_data *pd);
-void preload_pd_set_handlers_base(struct process_data *pd, unsigned long vaddr);
-void *preload_pd_get_handle(struct process_data *pd);
-void preload_pd_set_handle(struct process_data *pd, void __user *handle);
+enum ps_t preload_pd_get_state(struct pd_t *pd);
+void preload_pd_set_state(struct pd_t *pd, enum ps_t state);
+unsigned long preload_pd_get_loader_base(struct pd_t *pd);
+void preload_pd_set_loader_base(struct pd_t *pd, unsigned long vaddr);
+unsigned long preload_pd_get_handlers_base(struct pd_t *pd);
+void preload_pd_set_handlers_base(struct pd_t *pd, unsigned long vaddr);
+void *preload_pd_get_handle(struct pd_t *pd);
+void preload_pd_set_handle(struct pd_t *pd, void __user *handle);
-long preload_pd_get_attempts(struct process_data *pd);
-void preload_pd_dec_attempts(struct process_data *pd);
+long preload_pd_get_attempts(struct pd_t *pd);
+void preload_pd_dec_attempts(struct pd_t *pd);
-void preload_pd_inc_refs(struct process_data *pd);
-void preload_pd_dec_refs(struct process_data *pd);
-long preload_pd_get_refs(struct process_data *pd);
-
-char __user *preload_pd_get_path(struct process_data *pd);
-void preload_pd_put_path(struct process_data *pd);
+char __user *preload_pd_get_path(struct pd_t *pd);
int preload_pd_init(void);
void preload_pd_uninit(void);