From 565fae37d7345d732b1aa7fa7206122ebe308c32 Mon Sep 17 00:00:00 2001 From: Alexander Aksenov Date: Mon, 24 Feb 2014 15:50:15 +0400 Subject: [PATCH] [IMPROVE] Us_manager: implement 'dumb' filter All apps passes through this filter. Works like there is no filter Change-Id: Iacfc58cfa8f8c72c9d74facf05d5ce9b237fd6bf Signed-off-by: Alexander Aksenov --- us_manager/pf/pf_group.c | 19 +++++++++++++++++++ us_manager/pf/pf_group.h | 1 + us_manager/pf/proc_filters.c | 23 +++++++++++++++++++++++ us_manager/pf/proc_filters.h | 2 ++ 4 files changed, 45 insertions(+) diff --git a/us_manager/pf/pf_group.c b/us_manager/pf/pf_group.c index 4bd2c3e..fafd699 100644 --- a/us_manager/pf/pf_group.c +++ b/us_manager/pf/pf_group.c @@ -198,6 +198,25 @@ struct pf_group *get_pf_group_by_tgid(pid_t tgid, void *priv) } EXPORT_SYMBOL_GPL(get_pf_group_by_tgid); +struct pf_group *get_pf_group_dumb(void *priv) +{ + struct pf_group *pfg; + struct proc_filter *filter; + + list_for_each_entry(pfg, &pfg_list, list) { + if (check_pf_dumb(pfg->filter)) + return pfg; + } + + filter = create_pf_dumb(pfg->filter); + pfg = create_pfg(filter); + + add_pfg_by_list(pfg); + + return pfg; +} +EXPORT_SYMBOL_GPL(get_pf_group_dumb); + void put_pf_group(struct pf_group *pfg) { diff --git a/us_manager/pf/pf_group.h b/us_manager/pf/pf_group.h index bf6438f..07e448f 100644 --- a/us_manager/pf/pf_group.h +++ b/us_manager/pf/pf_group.h @@ -34,6 +34,7 @@ struct sspt_proc; struct pf_group *get_pf_group_by_dentry(struct dentry *dentry, void *priv); struct pf_group *get_pf_group_by_tgid(pid_t tgid, void *priv); +struct pf_group *get_pf_group_dumb(void *priv); void put_pf_group(struct pf_group *pfg); int pf_register_probe(struct pf_group *pfg, struct dentry *dentry, diff --git a/us_manager/pf/proc_filters.c b/us_manager/pf/proc_filters.c index cce88ec..c916625 100644 --- a/us_manager/pf/proc_filters.c +++ b/us_manager/pf/proc_filters.c @@ -70,6 +70,13 @@ static struct task_struct *call_by_tgid(struct proc_filter *self, return NULL; } +/* Dumb call. Each task is exactly what we are looking for :) */ +static struct task_struct *call_dumb(struct proc_filter *self, + struct task_struct *task) +{ + return task; +} + static struct proc_filter *create_pf(void) { struct proc_filter *pf = kmalloc(sizeof(*pf), GFP_KERNEL); @@ -98,6 +105,17 @@ struct proc_filter *create_pf_by_tgid(pid_t tgid, void *priv) return pf; } +struct proc_filter *create_pf_dumb(void *priv) +{ + struct proc_filter *pf = create_pf(); + + pf->call = &call_dumb; + pf->data = NULL; + pf->priv = priv; + + return pf; +} + void free_pf(struct proc_filter *pf) { kfree(pf); @@ -114,6 +132,11 @@ int check_pf_by_tgid(struct proc_filter *filter, pid_t tgid) return filter->data == (void *)tgid && filter->call == &call_by_tgid; } +int check_pf_dumb(struct proc_filter *filter) +{ + return filter->call == &call_dumb; +} + struct dentry *get_dentry_by_pf(struct proc_filter *filter) { if (filter->call == &call_by_dentry) diff --git a/us_manager/pf/proc_filters.h b/us_manager/pf/proc_filters.h index 2857419..2a007d0 100644 --- a/us_manager/pf/proc_filters.h +++ b/us_manager/pf/proc_filters.h @@ -42,10 +42,12 @@ struct proc_filter { struct proc_filter *create_pf_by_dentry(struct dentry *dentry, void *priv); struct proc_filter *create_pf_by_tgid(pid_t tgid, void *priv); +struct proc_filter *create_pf_dumb(void *priv); void free_pf(struct proc_filter *pf); int check_pf_by_dentry(struct proc_filter *filter, struct dentry *dentry); int check_pf_by_tgid(struct proc_filter *filter, pid_t tgid); +int check_pf_dumb(struct proc_filter *filter); struct dentry *get_dentry_by_pf(struct proc_filter *filter); #endif /* _PROC_FILTERS_H */ -- 2.7.4