Commit eda0c929 authored by Jiri Olsa's avatar Jiri Olsa Committed by Alexei Starovoitov

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: default avatarJiri Olsa <jolsa@kernel.org>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200312195610.346362-8-jolsa@kernel.orgSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent ca4424c9
...@@ -668,19 +668,27 @@ static struct bpf_prog *bpf_prog_kallsyms_find(unsigned long addr) ...@@ -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) ...@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment