aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/bpf
diff options
context:
space:
mode:
authorSong Liu <songliubraving@fb.com>2018-11-02 13:16:15 -0400
committerDaniel Borkmann <daniel@iogearbox.net>2018-11-02 16:39:01 -0400
commitdf0734702a7cbba49d6765bd5ba069340bf9c5db (patch)
treebf584cf3f67ab7aaae634d4975575d701e9fe1c8 /kernel/bpf
parent7de414a9dd91426318df7b63da024b2b07e53df5 (diff)
bpf: show real jited prog address in /proc/kallsyms
Currently, /proc/kallsyms shows page address of jited bpf program. The main reason here is to not expose randomized start address. However, This is not ideal for detailed profiling (find hot instructions from stack traces). This patch replaces the page address with real prog start address. This change is OK because these addresses are still protected by sysctl kptr_restrict (see kallsyms_show_value()), and only programs loaded by root are added to kallsyms (see bpf_prog_kallsyms_add()). Signed-off-by: Song Liu <songliubraving@fb.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'kernel/bpf')
-rw-r--r--kernel/bpf/core.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
index 6377225b2082..1a796e0799ec 100644
--- a/kernel/bpf/core.c
+++ b/kernel/bpf/core.c
@@ -553,7 +553,6 @@ bool is_bpf_text_address(unsigned long addr)
553int bpf_get_kallsym(unsigned int symnum, unsigned long *value, char *type, 553int bpf_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
554 char *sym) 554 char *sym)
555{ 555{
556 unsigned long symbol_start, symbol_end;
557 struct bpf_prog_aux *aux; 556 struct bpf_prog_aux *aux;
558 unsigned int it = 0; 557 unsigned int it = 0;
559 int ret = -ERANGE; 558 int ret = -ERANGE;
@@ -566,10 +565,9 @@ int bpf_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
566 if (it++ != symnum) 565 if (it++ != symnum)
567 continue; 566 continue;
568 567
569 bpf_get_prog_addr_region(aux->prog, &symbol_start, &symbol_end);
570 bpf_get_prog_name(aux->prog, sym); 568 bpf_get_prog_name(aux->prog, sym);
571 569
572 *value = symbol_start; 570 *value = (unsigned long)aux->prog->bpf_func;
573 *type = BPF_SYM_ELF_TYPE; 571 *type = BPF_SYM_ELF_TYPE;
574 572
575 ret = 0; 573 ret = 0;