It will be used later for BPF structure display support

Signed-off-by: Alan Maguire <alan.magu...@oracle.com>
---
 include/linux/bpf.h   |  2 ++
 kernel/bpf/verifier.c | 18 ++++++++++++------
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/include/linux/bpf.h b/include/linux/bpf.h
index 7990232..2eae3f3 100644
--- a/include/linux/bpf.h
+++ b/include/linux/bpf.h
@@ -1355,6 +1355,8 @@ int bpf_check(struct bpf_prog **fp, union bpf_attr *attr,
              union bpf_attr __user *uattr);
 void bpf_patch_call_args(struct bpf_insn *insn, u32 stack_depth);
 
+struct btf *bpf_get_btf_vmlinux(void);
+
 /* Map specifics */
 struct xdp_buff;
 struct sk_buff;
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index b25ba98..686f6a9 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -11517,6 +11517,17 @@ static int check_attach_btf_id(struct bpf_verifier_env 
*env)
        }
 }
 
+struct btf *bpf_get_btf_vmlinux(void)
+{
+       if (!btf_vmlinux && IS_ENABLED(CONFIG_DEBUG_INFO_BTF)) {
+               mutex_lock(&bpf_verifier_lock);
+               if (!btf_vmlinux)
+                       btf_vmlinux = btf_parse_vmlinux();
+               mutex_unlock(&bpf_verifier_lock);
+       }
+       return btf_vmlinux;
+}
+
 int bpf_check(struct bpf_prog **prog, union bpf_attr *attr,
              union bpf_attr __user *uattr)
 {
@@ -11550,12 +11561,7 @@ int bpf_check(struct bpf_prog **prog, union bpf_attr 
*attr,
        env->ops = bpf_verifier_ops[env->prog->type];
        is_priv = bpf_capable();
 
-       if (!btf_vmlinux && IS_ENABLED(CONFIG_DEBUG_INFO_BTF)) {
-               mutex_lock(&bpf_verifier_lock);
-               if (!btf_vmlinux)
-                       btf_vmlinux = btf_parse_vmlinux();
-               mutex_unlock(&bpf_verifier_lock);
-       }
+       bpf_get_btf_vmlinux();
 
        /* grab the mutex to protect few globals used by verifier */
        if (!is_priv)
-- 
1.8.3.1

Reply via email to