From: Xu Jia <xujia39@huawei.com>
To: <sdf@google.com>, <netdev@vger.kernel.org>, <bpf@vger.kernel.org>
Cc: <linux-kernel@vger.kernel.org>, <ast@kernel.org>,
<daniel@iogearbox.net>, <andrii@kernel.org>, <xujia39@huawei.com>
Subject: [PATCH bpf-next] bpf: fix bpf compile error caused by CONFIG_CGROUP_BPF
Date: Tue, 19 Jul 2022 17:01:45 +0800 [thread overview]
Message-ID: <1658221305-35718-1-git-send-email-xujia39@huawei.com> (raw)
We failed to compile when CONFIG_BPF_LSM is enabled but CONFIG_CGROUP_BPF
is not set. The failings are shown as below:
kernel/bpf/trampoline.o: in function `bpf_trampoline_link_cgroup_shim'
trampoline.c: undefined reference to `bpf_cgroup_atype_get'
kernel/bpf/bpf_lsm.o: In function `bpf_lsm_find_cgroup_shim':
bpf_lsm.c: undefined reference to `__cgroup_bpf_run_lsm_current'
bpf_lsm.c: undefined reference to `__cgroup_bpf_run_lsm_sock'
bpf_lsm.c: undefined reference to `__cgroup_bpf_run_lsm_socket'
Fix them by protecting these functions with CONFIG_CGROUP_BPF.
Fixes: 69fd337a975c ("bpf: per-cgroup lsm flavor")
Signed-off-by: Xu Jia <xujia39@huawei.com>
---
include/linux/bpf.h | 12 +++++++++---
include/linux/bpf_lsm.h | 10 ++++++----
kernel/bpf/bpf_lsm.c | 2 ++
kernel/bpf/trampoline.c | 2 ++
4 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/include/linux/bpf.h b/include/linux/bpf.h
index 2b21f2a3452f..add8895c02cc 100644
--- a/include/linux/bpf.h
+++ b/include/linux/bpf.h
@@ -1255,9 +1255,7 @@ struct bpf_dummy_ops {
int bpf_struct_ops_test_run(struct bpf_prog *prog, const union bpf_attr *kattr,
union bpf_attr __user *uattr);
#endif
-int bpf_trampoline_link_cgroup_shim(struct bpf_prog *prog,
- int cgroup_atype);
-void bpf_trampoline_unlink_cgroup_shim(struct bpf_prog *prog);
+
#else
static inline const struct bpf_struct_ops *bpf_struct_ops_find(u32 type_id)
{
@@ -1281,6 +1279,14 @@ static inline int bpf_struct_ops_map_sys_lookup_elem(struct bpf_map *map,
{
return -EINVAL;
}
+#endif
+
+#if defined(CONFIG_BPF_JIT) && defined(CONFIG_BPF_SYSCALL) && \
+ defined(CONFIG_CGROUP_BPF)
+int bpf_trampoline_link_cgroup_shim(struct bpf_prog *prog,
+ int cgroup_atype);
+void bpf_trampoline_unlink_cgroup_shim(struct bpf_prog *prog);
+#else
static inline int bpf_trampoline_link_cgroup_shim(struct bpf_prog *prog,
int cgroup_atype)
{
diff --git a/include/linux/bpf_lsm.h b/include/linux/bpf_lsm.h
index 4bcf76a9bb06..bed45a0c8a9c 100644
--- a/include/linux/bpf_lsm.h
+++ b/include/linux/bpf_lsm.h
@@ -42,8 +42,6 @@ extern const struct bpf_func_proto bpf_inode_storage_get_proto;
extern const struct bpf_func_proto bpf_inode_storage_delete_proto;
void bpf_inode_storage_free(struct inode *inode);
-void bpf_lsm_find_cgroup_shim(const struct bpf_prog *prog, bpf_func_t *bpf_func);
-
#else /* !CONFIG_BPF_LSM */
static inline bool bpf_lsm_is_sleepable_hook(u32 btf_id)
@@ -67,11 +65,15 @@ static inline void bpf_inode_storage_free(struct inode *inode)
{
}
+#endif /* CONFIG_BPF_LSM */
+
+#if defined(CONFIG_BPF_LSM) && defined(CONFIG_BPF_CGROUP)
+void bpf_lsm_find_cgroup_shim(const struct bpf_prog *prog, bpf_func_t *bpf_func);
+#else
static inline void bpf_lsm_find_cgroup_shim(const struct bpf_prog *prog,
bpf_func_t *bpf_func)
{
}
-
-#endif /* CONFIG_BPF_LSM */
+#endif
#endif /* _LINUX_BPF_LSM_H */
diff --git a/kernel/bpf/bpf_lsm.c b/kernel/bpf/bpf_lsm.c
index d469b7f3deef..29527828b38b 100644
--- a/kernel/bpf/bpf_lsm.c
+++ b/kernel/bpf/bpf_lsm.c
@@ -63,6 +63,7 @@ BTF_ID(func, bpf_lsm_socket_post_create)
BTF_ID(func, bpf_lsm_socket_socketpair)
BTF_SET_END(bpf_lsm_unlocked_sockopt_hooks)
+#ifdef CONFIG_BPF_CGROUP
void bpf_lsm_find_cgroup_shim(const struct bpf_prog *prog,
bpf_func_t *bpf_func)
{
@@ -86,6 +87,7 @@ void bpf_lsm_find_cgroup_shim(const struct bpf_prog *prog,
#endif
*bpf_func = __cgroup_bpf_run_lsm_current;
}
+#endif /* CONFIG_BPF_CGROUP */
int bpf_lsm_verify_prog(struct bpf_verifier_log *vlog,
const struct bpf_prog *prog)
diff --git a/kernel/bpf/trampoline.c b/kernel/bpf/trampoline.c
index 6cd226584c33..127924711935 100644
--- a/kernel/bpf/trampoline.c
+++ b/kernel/bpf/trampoline.c
@@ -525,6 +525,7 @@ static const struct bpf_link_ops bpf_shim_tramp_link_lops = {
.dealloc = bpf_shim_tramp_link_dealloc,
};
+#ifdef CONFIG_CGROUP_BPF
static struct bpf_shim_tramp_link *cgroup_shim_alloc(const struct bpf_prog *prog,
bpf_func_t bpf_func,
int cgroup_atype)
@@ -668,6 +669,7 @@ void bpf_trampoline_unlink_cgroup_shim(struct bpf_prog *prog)
bpf_trampoline_put(tr); /* bpf_trampoline_lookup above */
}
+#endif /* CONFIG_CGROUP_BPF */
#endif
struct bpf_trampoline *bpf_trampoline_get(u64 key,
--
2.25.1
next reply other threads:[~2022-07-19 8:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-19 9:01 Xu Jia [this message]
2022-07-19 15:46 ` Stanislav Fomichev
2022-07-20 7:25 ` xujia (Q)
2022-07-20 7:16 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1658221305-35718-1-git-send-email-xujia39@huawei.com \
--to=xujia39@huawei.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=sdf@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®