{"id":1238805,"url":"http://patchwork.ozlabs.org/api/patches/1238805/?format=json","web_url":"http://patchwork.ozlabs.org/project/netdev/patch/20200216193005.144157-4-jolsa@kernel.org/","project":{"id":7,"url":"http://patchwork.ozlabs.org/api/projects/7/?format=json","name":"Linux network development","link_name":"netdev","list_id":"netdev.vger.kernel.org","list_email":"netdev@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20200216193005.144157-4-jolsa@kernel.org>","list_archive_url":null,"date":"2020-02-16T19:29:50","name":"[03/18] bpf: Add struct bpf_ksym","commit_ref":null,"pull_url":null,"state":"changes-requested","archived":false,"hash":"93c9b299614fe54c7f97846996d23c059bf1acf4","submitter":{"id":73687,"url":"http://patchwork.ozlabs.org/api/people/73687/?format=json","name":"Jiri Olsa","email":"jolsa@kernel.org"},"delegate":{"id":77147,"url":"http://patchwork.ozlabs.org/api/users/77147/?format=json","username":"bpf","first_name":"BPF","last_name":"Maintainers","email":"bpf@iogearbox.net"},"mbox":"http://patchwork.ozlabs.org/project/netdev/patch/20200216193005.144157-4-jolsa@kernel.org/mbox/","series":[{"id":158829,"url":"http://patchwork.ozlabs.org/api/series/158829/?format=json","web_url":"http://patchwork.ozlabs.org/project/netdev/list/?series=158829","date":"2020-02-16T19:29:47","name":"bpf: Add trampoline and dispatcher to /proc/kallsyms","version":1,"mbox":"http://patchwork.ozlabs.org/series/158829/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/1238805/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/1238805/checks/","tags":{},"related":[],"headers":{"Return-Path":"<bpf-owner@vger.kernel.org>","X-Original-To":"incoming-bpf@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming-bpf@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org; spf=none (no SPF record)\n\tsmtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67;\n\thelo=vger.kernel.org; envelope-from=bpf-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)","ozlabs.org;\n\tdmarc=fail (p=none dis=none) header.from=kernel.org"],"Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 48LHJr5Y8pz9sPK\n\tfor <incoming-bpf@patchwork.ozlabs.org>;\n\tMon, 17 Feb 2020 06:30:36 +1100 (AEDT)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1726962AbgBPTaf convert rfc822-to-8bit (ORCPT\n\t<rfc822;incoming-bpf@patchwork.ozlabs.org>);\n\tSun, 16 Feb 2020 14:30:35 -0500","from us-smtp-1.mimecast.com ([207.211.31.81]:55186 \"EHLO\n\tus-smtp-delivery-1.mimecast.com\" rhost-flags-OK-OK-OK-FAIL)\n\tby vger.kernel.org with ESMTP id S1726723AbgBPTaf (ORCPT\n\t<rfc822;bpf@vger.kernel.org>); Sun, 16 Feb 2020 14:30:35 -0500","from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com\n\t[209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id\n\tus-mta-299-mCPlwMRjOAuVMvl5v74mnQ-1; Sun, 16 Feb 2020 14:30:30 -0500","from smtp.corp.redhat.com\n\t(int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mimecast-mx01.redhat.com (Postfix) with ESMTPS id 2E30E107ACC4;\n\tSun, 16 Feb 2020 19:30:28 +0000 (UTC)","from krava.redhat.com (ovpn-204-28.brq.redhat.com [10.40.204.28])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 4B29F8AC5B;\n\tSun, 16 Feb 2020 19:30:24 +0000 (UTC)"],"From":"Jiri Olsa <jolsa@kernel.org>","To":"Alexei Starovoitov <ast@kernel.org>,\n\tDaniel Borkmann <daniel@iogearbox.net>","Cc":"netdev@vger.kernel.org, bpf@vger.kernel.org, Andrii Nakryiko\n\t<andriin@fb.com>, Yonghong Song <yhs@fb.com>, Song Liu\n\t<songliubraving@fb.com>,         Martin KaFai Lau <kafai@fb.com>,\n\tJakub Kicinski <kuba@kernel.org>, David Miller <davem@redhat.com>,\n\t=?utf-8?b?QmrDtnJuIFTDtnBlbA==?= <bjorn.topel@intel.com>,\n\tJohn Fastabend <john.fastabend@gmail.com>, Jesper Dangaard Brouer\n\t<hawk@kernel.org>,         Arnaldo Carvalho de Melo <acme@redhat.com>","Subject":"[PATCH 03/18] bpf: Add struct bpf_ksym","Date":"Sun, 16 Feb 2020 20:29:50 +0100","Message-Id":"<20200216193005.144157-4-jolsa@kernel.org>","In-Reply-To":"<20200216193005.144157-1-jolsa@kernel.org>","References":"<20200216193005.144157-1-jolsa@kernel.org>","MIME-Version":"1.0","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.11","X-MC-Unique":"mCPlwMRjOAuVMvl5v74mnQ-1","X-Mimecast-Spam-Score":"0","X-Mimecast-Originator":"kernel.org","Content-Type":"text/plain; charset=WINDOWS-1252","Content-Transfer-Encoding":"8BIT","Sender":"bpf-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<bpf.vger.kernel.org>","X-Mailing-List":"bpf@vger.kernel.org"},"content":"Adding 'struct bpf_ksym' object that will carry the\nkallsym information for bpf symbol. Adding the start\nand end address to begin with. It will be used by\nbpf_prog, bpf_trampoline, bpf_dispatcher.\n\nUsing the bpf_func for program symbol start instead\nof the image start, because it will be used later for\nkallsyms program value and it makes no difference\n(compared to the image start) for sorting bpf programs.\n\nSigned-off-by: Jiri Olsa <jolsa@kernel.org>\n---\n include/linux/bpf.h |  6 ++++++\n kernel/bpf/core.c   | 26 +++++++++++---------------\n 2 files changed, 17 insertions(+), 15 deletions(-)","diff":"diff --git a/include/linux/bpf.h b/include/linux/bpf.h\nindex be7afccc9459..5ad8eea1cd37 100644\n--- a/include/linux/bpf.h\n+++ b/include/linux/bpf.h\n@@ -462,6 +462,11 @@ int arch_prepare_bpf_trampoline(void *image, void *image_end,\n u64 notrace __bpf_prog_enter(void);\n void notrace __bpf_prog_exit(struct bpf_prog *prog, u64 start);\n \n+struct bpf_ksym {\n+\tunsigned long\t\t start;\n+\tunsigned long\t\t end;\n+};\n+\n enum bpf_tramp_prog_type {\n \tBPF_TRAMP_FENTRY,\n \tBPF_TRAMP_FEXIT,\n@@ -643,6 +648,7 @@ struct bpf_prog_aux {\n \tu32 size_poke_tab;\n \tstruct latch_tree_node ksym_tnode;\n \tstruct list_head ksym_lnode;\n+\tstruct bpf_ksym ksym;\n \tconst struct bpf_prog_ops *ops;\n \tstruct bpf_map **used_maps;\n \tstruct bpf_prog *prog;\ndiff --git a/kernel/bpf/core.c b/kernel/bpf/core.c\nindex 973a20d49749..39a9e4184900 100644\n--- a/kernel/bpf/core.c\n+++ b/kernel/bpf/core.c\n@@ -524,17 +524,15 @@ int bpf_jit_harden   __read_mostly;\n long bpf_jit_limit   __read_mostly;\n \n static __always_inline void\n-bpf_get_prog_addr_region(const struct bpf_prog *prog,\n-\t\t\t unsigned long *symbol_start,\n-\t\t\t unsigned long *symbol_end)\n+bpf_get_prog_addr_region(const struct bpf_prog *prog)\n {\n \tconst struct bpf_binary_header *hdr = bpf_jit_binary_hdr(prog);\n \tunsigned long addr = (unsigned long)hdr;\n \n \tWARN_ON_ONCE(!bpf_prog_ebpf_jited(prog));\n \n-\t*symbol_start = addr;\n-\t*symbol_end   = addr + hdr->pages * PAGE_SIZE;\n+\tprog->aux->ksym.start = (unsigned long) prog->bpf_func;\n+\tprog->aux->ksym.end   = addr + hdr->pages * PAGE_SIZE;\n }\n \n void bpf_get_prog_name(const struct bpf_prog *prog, char *sym)\n@@ -575,13 +573,10 @@ void bpf_get_prog_name(const struct bpf_prog *prog, char *sym)\n static __always_inline unsigned long\n bpf_get_prog_addr_start(struct latch_tree_node *n)\n {\n-\tunsigned long symbol_start, symbol_end;\n \tconst struct bpf_prog_aux *aux;\n \n \taux = container_of(n, struct bpf_prog_aux, ksym_tnode);\n-\tbpf_get_prog_addr_region(aux->prog, &symbol_start, &symbol_end);\n-\n-\treturn symbol_start;\n+\treturn aux->ksym.start;\n }\n \n static __always_inline bool bpf_tree_less(struct latch_tree_node *a,\n@@ -593,15 +588,13 @@ static __always_inline bool bpf_tree_less(struct latch_tree_node *a,\n static __always_inline int bpf_tree_comp(void *key, struct latch_tree_node *n)\n {\n \tunsigned long val = (unsigned long)key;\n-\tunsigned long symbol_start, symbol_end;\n \tconst struct bpf_prog_aux *aux;\n \n \taux = container_of(n, struct bpf_prog_aux, ksym_tnode);\n-\tbpf_get_prog_addr_region(aux->prog, &symbol_start, &symbol_end);\n \n-\tif (val < symbol_start)\n+\tif (val < aux->ksym.start)\n \t\treturn -1;\n-\tif (val >= symbol_end)\n+\tif (val >= aux->ksym.end)\n \t\treturn  1;\n \n \treturn 0;\n@@ -649,6 +642,8 @@ void bpf_prog_kallsyms_add(struct bpf_prog *fp)\n \t    !capable(CAP_SYS_ADMIN))\n \t\treturn;\n \n+\tbpf_get_prog_addr_region(fp);\n+\n \tspin_lock_bh(&bpf_lock);\n \tbpf_prog_ksym_node_add(fp->aux);\n \tspin_unlock_bh(&bpf_lock);\n@@ -677,14 +672,15 @@ static struct bpf_prog *bpf_prog_kallsyms_find(unsigned long addr)\n const char *__bpf_address_lookup(unsigned long addr, unsigned long *size,\n \t\t\t\t unsigned long *off, char *sym)\n {\n-\tunsigned long symbol_start, symbol_end;\n \tstruct bpf_prog *prog;\n \tchar *ret = NULL;\n \n \trcu_read_lock();\n \tprog = bpf_prog_kallsyms_find(addr);\n \tif (prog) {\n-\t\tbpf_get_prog_addr_region(prog, &symbol_start, &symbol_end);\n+\t\tunsigned long symbol_start = prog->aux->ksym.start;\n+\t\tunsigned long symbol_end = prog->aux->ksym.end;\n+\n \t\tbpf_get_prog_name(prog, sym);\n \n \t\tret = sym;\n","prefixes":["03/18"]}