if (!capable(CAP_SYS_ADMIN)) {
                info.jited_prog_len = 0;
                info.xlated_prog_len = 0;
+               info.nr_jited_ksyms = 0;
                goto done;
        }
 
                }
        }
 
+       ulen = info.nr_jited_ksyms;
+       info.nr_jited_ksyms = prog->aux->func_cnt;
+       if (info.nr_jited_ksyms && ulen) {
+               if (bpf_dump_raw_ok()) {
+                       u64 __user *user_ksyms;
+                       ulong ksym_addr;
+                       u32 i;
+
+                       /* copy the address of the kernel symbol
+                        * corresponding to each function
+                        */
+                       ulen = min_t(u32, info.nr_jited_ksyms, ulen);
+                       user_ksyms = u64_to_user_ptr(info.jited_ksyms);
+                       for (i = 0; i < ulen; i++) {
+                               ksym_addr = (ulong) prog->aux->func[i]->bpf_func;
+                               ksym_addr &= PAGE_MASK;
+                               if (put_user((u64) ksym_addr, &user_ksyms[i]))
+                                       return -EFAULT;
+                       }
+               } else {
+                       info.jited_ksyms = 0;
+               }
+       }
+
 done:
        if (copy_to_user(uinfo, &info, info_len) ||
            put_user(info_len, &uattr->info.info_len))
 
         * later look the same as if they were interpreted only.
         */
        for (i = 0, insn = prog->insnsi; i < prog->len; i++, insn++) {
-               unsigned long addr;
-
                if (insn->code != (BPF_JMP | BPF_CALL) ||
                    insn->src_reg != BPF_PSEUDO_CALL)
                        continue;
                insn->off = env->insn_aux_data[i].call_imm;
                subprog = find_subprog(env, i + insn->off + 1);
-               addr  = (unsigned long)func[subprog]->bpf_func;
-               addr &= PAGE_MASK;
-               insn->imm = (u64 (*)(u64, u64, u64, u64, u64))
-                           addr - __bpf_call_base;
+               insn->imm = subprog;
        }
 
        prog->jited = 1;