diff options
| author | YueHaibing <yuehaibing@huawei.com> | 2019-07-03 04:26:30 -0400 |
|---|---|---|
| committer | Daniel Borkmann <daniel@iogearbox.net> | 2019-07-08 11:17:00 -0400 |
| commit | 6705fea0c799a4efb9a9ce2968a2f7a570e33dc2 (patch) | |
| tree | 51319bf5aa8bfa79062479dd1c2a1d33fc90364f /kernel | |
| parent | 06ec0e2c490afd2f870d89c59200540fd9acde95 (diff) | |
bpf: cgroup: Fix build error without CONFIG_NET
If CONFIG_NET is not set and CONFIG_CGROUP_BPF=y,
gcc building fails:
kernel/bpf/cgroup.o: In function `cg_sockopt_func_proto':
cgroup.c:(.text+0x237e): undefined reference to `bpf_sk_storage_get_proto'
cgroup.c:(.text+0x2394): undefined reference to `bpf_sk_storage_delete_proto'
kernel/bpf/cgroup.o: In function `__cgroup_bpf_run_filter_getsockopt':
(.text+0x2a1f): undefined reference to `lock_sock_nested'
(.text+0x2ca2): undefined reference to `release_sock'
kernel/bpf/cgroup.o: In function `__cgroup_bpf_run_filter_setsockopt':
(.text+0x3006): undefined reference to `lock_sock_nested'
(.text+0x32bb): undefined reference to `release_sock'
Reported-by: Hulk Robot <hulkci@huawei.com>
Suggested-by: Stanislav Fomichev <sdf@fomichev.me>
Fixes: 0d01da6afc54 ("bpf: implement getsockopt and setsockopt hooks")
Signed-off-by: YueHaibing <yuehaibing@huawei.com>
Acked-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/bpf/cgroup.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c index 76fa0076f20d..0a00eaca6fae 100644 --- a/kernel/bpf/cgroup.c +++ b/kernel/bpf/cgroup.c | |||
| @@ -939,6 +939,7 @@ int __cgroup_bpf_run_filter_sysctl(struct ctl_table_header *head, | |||
| 939 | } | 939 | } |
| 940 | EXPORT_SYMBOL(__cgroup_bpf_run_filter_sysctl); | 940 | EXPORT_SYMBOL(__cgroup_bpf_run_filter_sysctl); |
| 941 | 941 | ||
| 942 | #ifdef CONFIG_NET | ||
| 942 | static bool __cgroup_bpf_prog_array_is_empty(struct cgroup *cgrp, | 943 | static bool __cgroup_bpf_prog_array_is_empty(struct cgroup *cgrp, |
| 943 | enum bpf_attach_type attach_type) | 944 | enum bpf_attach_type attach_type) |
| 944 | { | 945 | { |
| @@ -1120,6 +1121,7 @@ out: | |||
| 1120 | return ret; | 1121 | return ret; |
| 1121 | } | 1122 | } |
| 1122 | EXPORT_SYMBOL(__cgroup_bpf_run_filter_getsockopt); | 1123 | EXPORT_SYMBOL(__cgroup_bpf_run_filter_getsockopt); |
| 1124 | #endif | ||
| 1123 | 1125 | ||
| 1124 | static ssize_t sysctl_cpy_dir(const struct ctl_dir *dir, char **bufp, | 1126 | static ssize_t sysctl_cpy_dir(const struct ctl_dir *dir, char **bufp, |
| 1125 | size_t *lenp) | 1127 | size_t *lenp) |
| @@ -1386,10 +1388,12 @@ static const struct bpf_func_proto * | |||
| 1386 | cg_sockopt_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) | 1388 | cg_sockopt_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog) |
| 1387 | { | 1389 | { |
| 1388 | switch (func_id) { | 1390 | switch (func_id) { |
| 1391 | #ifdef CONFIG_NET | ||
| 1389 | case BPF_FUNC_sk_storage_get: | 1392 | case BPF_FUNC_sk_storage_get: |
| 1390 | return &bpf_sk_storage_get_proto; | 1393 | return &bpf_sk_storage_get_proto; |
| 1391 | case BPF_FUNC_sk_storage_delete: | 1394 | case BPF_FUNC_sk_storage_delete: |
| 1392 | return &bpf_sk_storage_delete_proto; | 1395 | return &bpf_sk_storage_delete_proto; |
| 1396 | #endif | ||
| 1393 | #ifdef CONFIG_INET | 1397 | #ifdef CONFIG_INET |
| 1394 | case BPF_FUNC_tcp_sock: | 1398 | case BPF_FUNC_tcp_sock: |
| 1395 | return &bpf_tcp_sock_proto; | 1399 | return &bpf_tcp_sock_proto; |
