int bpf_jit_harden   __read_mostly;
 long bpf_jit_limit   __read_mostly;
 
-static __always_inline void
-bpf_get_prog_addr_region(const struct bpf_prog *prog,
-                        unsigned long *symbol_start,
-                        unsigned long *symbol_end)
+static void
+bpf_prog_ksym_set_addr(struct bpf_prog *prog)
 {
        const struct bpf_binary_header *hdr = bpf_jit_binary_hdr(prog);
        unsigned long addr = (unsigned long)hdr;
 
        WARN_ON_ONCE(!bpf_prog_ebpf_jited(prog));
 
-       *symbol_start = addr;
-       *symbol_end   = addr + hdr->pages * PAGE_SIZE;
+       prog->aux->ksym.start = (unsigned long) prog->bpf_func;
+       prog->aux->ksym.end   = addr + hdr->pages * PAGE_SIZE;
 }
 
 void bpf_get_prog_name(const struct bpf_prog *prog, char *sym)
 static __always_inline unsigned long
 bpf_get_prog_addr_start(struct latch_tree_node *n)
 {
-       unsigned long symbol_start, symbol_end;
        const struct bpf_prog_aux *aux;
 
        aux = container_of(n, struct bpf_prog_aux, ksym_tnode);
-       bpf_get_prog_addr_region(aux->prog, &symbol_start, &symbol_end);
-
-       return symbol_start;
+       return aux->ksym.start;
 }
 
 static __always_inline bool bpf_tree_less(struct latch_tree_node *a,
 static __always_inline int bpf_tree_comp(void *key, struct latch_tree_node *n)
 {
        unsigned long val = (unsigned long)key;
-       unsigned long symbol_start, symbol_end;
        const struct bpf_prog_aux *aux;
 
        aux = container_of(n, struct bpf_prog_aux, ksym_tnode);
-       bpf_get_prog_addr_region(aux->prog, &symbol_start, &symbol_end);
 
-       if (val < symbol_start)
+       if (val < aux->ksym.start)
                return -1;
-       if (val >= symbol_end)
+       if (val >= aux->ksym.end)
                return  1;
 
        return 0;
            !capable(CAP_SYS_ADMIN))
                return;
 
+       bpf_prog_ksym_set_addr(fp);
+
        spin_lock_bh(&bpf_lock);
        bpf_prog_ksym_node_add(fp->aux);
        spin_unlock_bh(&bpf_lock);
 const char *__bpf_address_lookup(unsigned long addr, unsigned long *size,
                                 unsigned long *off, char *sym)
 {
-       unsigned long symbol_start, symbol_end;
        struct bpf_prog *prog;
        char *ret = NULL;
 
        rcu_read_lock();
        prog = bpf_prog_kallsyms_find(addr);
        if (prog) {
-               bpf_get_prog_addr_region(prog, &symbol_start, &symbol_end);
+               unsigned long symbol_start = prog->aux->ksym.start;
+               unsigned long symbol_end = prog->aux->ksym.end;
+
                bpf_get_prog_name(prog, sym);
 
                ret = sym;