bpf: Add bpf_ksym_find function
Adding bpf_ksym_find function that is used bpf bpf address lookup functions: __bpf_address_lookup is_bpf_text_address while keeping bpf_prog_kallsyms_find to be used only for lookup of bpf_prog objects (will happen in following changes). Signed-off-by: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20200312195610.346362-8-jolsa@kernel.org Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
ca4424c920
commit
eda0c92902
@ -668,19 +668,27 @@ static struct bpf_prog *bpf_prog_kallsyms_find(unsigned long addr)
|
|||||||
NULL;
|
NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct bpf_ksym *bpf_ksym_find(unsigned long addr)
|
||||||
|
{
|
||||||
|
struct latch_tree_node *n;
|
||||||
|
|
||||||
|
n = latch_tree_find((void *)addr, &bpf_tree, &bpf_tree_ops);
|
||||||
|
return n ? container_of(n, struct bpf_ksym, tnode) : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
const char *__bpf_address_lookup(unsigned long addr, unsigned long *size,
|
const char *__bpf_address_lookup(unsigned long addr, unsigned long *size,
|
||||||
unsigned long *off, char *sym)
|
unsigned long *off, char *sym)
|
||||||
{
|
{
|
||||||
struct bpf_prog *prog;
|
struct bpf_ksym *ksym;
|
||||||
char *ret = NULL;
|
char *ret = NULL;
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
prog = bpf_prog_kallsyms_find(addr);
|
ksym = bpf_ksym_find(addr);
|
||||||
if (prog) {
|
if (ksym) {
|
||||||
unsigned long symbol_start = prog->aux->ksym.start;
|
unsigned long symbol_start = ksym->start;
|
||||||
unsigned long symbol_end = prog->aux->ksym.end;
|
unsigned long symbol_end = ksym->end;
|
||||||
|
|
||||||
strncpy(sym, prog->aux->ksym.name, KSYM_NAME_LEN);
|
strncpy(sym, ksym->name, KSYM_NAME_LEN);
|
||||||
|
|
||||||
ret = sym;
|
ret = sym;
|
||||||
if (size)
|
if (size)
|
||||||
@ -698,7 +706,7 @@ bool is_bpf_text_address(unsigned long addr)
|
|||||||
bool ret;
|
bool ret;
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
ret = bpf_prog_kallsyms_find(addr) != NULL;
|
ret = bpf_ksym_find(addr) != NULL;
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user