net/core/filter.c:11748:17: error: no previous declaration for 'bpf_sock_destroy'

From: kernel test robot
Date: Sat Sep 09 2023 - 03:10:09 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 6099776f9f268e61fe5ecd721f994a8cfce5306f
commit: 4ddbcb886268af8d12a23e6640b39d1d9c652b1b bpf: Add bpf_sock_destroy kfunc
date: 4 months ago
config: x86_64-sof-customedconfig-avs-defconfig (https://download.01.org/0day-ci/archive/20230909/202309091542.bIKqs1sH-lkp@xxxxxxxxx/config)
compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230909/202309091542.bIKqs1sH-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202309091542.bIKqs1sH-lkp@xxxxxxxxx/

All errors (new ones prefixed by >>):

net/core/filter.c:11650:17: error: no previous declaration for 'bpf_dynptr_from_skb' [-Werror=missing-declarations]
__bpf_kfunc int bpf_dynptr_from_skb(struct sk_buff *skb, u64 flags,
^~~~~~~~~~~~~~~~~~~
net/core/filter.c:11663:17: error: no previous declaration for 'bpf_dynptr_from_xdp' [-Werror=missing-declarations]
__bpf_kfunc int bpf_dynptr_from_xdp(struct xdp_buff *xdp, u64 flags,
^~~~~~~~~~~~~~~~~~~
>> net/core/filter.c:11748:17: error: no previous declaration for 'bpf_sock_destroy' [-Werror=missing-declarations]
__bpf_kfunc int bpf_sock_destroy(struct sock_common *sock)
^~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors


vim +/bpf_sock_destroy +11748 net/core/filter.c

11646
11647 __diag_push();
11648 __diag_ignore_all("-Wmissing-prototypes",
11649 "Global functions as their definitions will be in vmlinux BTF");
11650 __bpf_kfunc int bpf_dynptr_from_skb(struct sk_buff *skb, u64 flags,
11651 struct bpf_dynptr_kern *ptr__uninit)
11652 {
11653 if (flags) {
11654 bpf_dynptr_set_null(ptr__uninit);
11655 return -EINVAL;
11656 }
11657
11658 bpf_dynptr_init(ptr__uninit, skb, BPF_DYNPTR_TYPE_SKB, 0, skb->len);
11659
11660 return 0;
11661 }
11662
11663 __bpf_kfunc int bpf_dynptr_from_xdp(struct xdp_buff *xdp, u64 flags,
11664 struct bpf_dynptr_kern *ptr__uninit)
11665 {
11666 if (flags) {
11667 bpf_dynptr_set_null(ptr__uninit);
11668 return -EINVAL;
11669 }
11670
11671 bpf_dynptr_init(ptr__uninit, xdp, BPF_DYNPTR_TYPE_XDP, 0, xdp_get_buff_len(xdp));
11672
11673 return 0;
11674 }
11675 __diag_pop();
11676
11677 int bpf_dynptr_from_skb_rdonly(struct sk_buff *skb, u64 flags,
11678 struct bpf_dynptr_kern *ptr__uninit)
11679 {
11680 int err;
11681
11682 err = bpf_dynptr_from_skb(skb, flags, ptr__uninit);
11683 if (err)
11684 return err;
11685
11686 bpf_dynptr_set_rdonly(ptr__uninit);
11687
11688 return 0;
11689 }
11690
11691 BTF_SET8_START(bpf_kfunc_check_set_skb)
11692 BTF_ID_FLAGS(func, bpf_dynptr_from_skb)
11693 BTF_SET8_END(bpf_kfunc_check_set_skb)
11694
11695 BTF_SET8_START(bpf_kfunc_check_set_xdp)
11696 BTF_ID_FLAGS(func, bpf_dynptr_from_xdp)
11697 BTF_SET8_END(bpf_kfunc_check_set_xdp)
11698
11699 static const struct btf_kfunc_id_set bpf_kfunc_set_skb = {
11700 .owner = THIS_MODULE,
11701 .set = &bpf_kfunc_check_set_skb,
11702 };
11703
11704 static const struct btf_kfunc_id_set bpf_kfunc_set_xdp = {
11705 .owner = THIS_MODULE,
11706 .set = &bpf_kfunc_check_set_xdp,
11707 };
11708
11709 static int __init bpf_kfunc_init(void)
11710 {
11711 int ret;
11712
11713 ret = register_btf_kfunc_id_set(BPF_PROG_TYPE_SCHED_CLS, &bpf_kfunc_set_skb);
11714 ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_SCHED_ACT, &bpf_kfunc_set_skb);
11715 ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_SK_SKB, &bpf_kfunc_set_skb);
11716 ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_SOCKET_FILTER, &bpf_kfunc_set_skb);
11717 ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_CGROUP_SKB, &bpf_kfunc_set_skb);
11718 ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_LWT_OUT, &bpf_kfunc_set_skb);
11719 ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_LWT_IN, &bpf_kfunc_set_skb);
11720 ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_LWT_XMIT, &bpf_kfunc_set_skb);
11721 ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_LWT_SEG6LOCAL, &bpf_kfunc_set_skb);
11722 ret = ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_NETFILTER, &bpf_kfunc_set_skb);
11723 return ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_XDP, &bpf_kfunc_set_xdp);
11724 }
11725 late_initcall(bpf_kfunc_init);
11726
11727 /* Disables missing prototype warnings */
11728 __diag_push();
11729 __diag_ignore_all("-Wmissing-prototypes",
11730 "Global functions as their definitions will be in vmlinux BTF");
11731
11732 /* bpf_sock_destroy: Destroy the given socket with ECONNABORTED error code.
11733 *
11734 * The function expects a non-NULL pointer to a socket, and invokes the
11735 * protocol specific socket destroy handlers.
11736 *
11737 * The helper can only be called from BPF contexts that have acquired the socket
11738 * locks.
11739 *
11740 * Parameters:
11741 * @sock: Pointer to socket to be destroyed
11742 *
11743 * Return:
11744 * On error, may return EPROTONOSUPPORT, EINVAL.
11745 * EPROTONOSUPPORT if protocol specific destroy handler is not supported.
11746 * 0 otherwise
11747 */
11748 __bpf_kfunc int bpf_sock_destroy(struct sock_common *sock)
11749 {
11750 struct sock *sk = (struct sock *)sock;
11751
11752 /* The locking semantics that allow for synchronous execution of the
11753 * destroy handlers are only supported for TCP and UDP.
11754 * Supporting protocols will need to acquire sock lock in the BPF context
11755 * prior to invoking this kfunc.
11756 */
11757 if (!sk->sk_prot->diag_destroy || (sk->sk_protocol != IPPROTO_TCP &&
11758 sk->sk_protocol != IPPROTO_UDP))
11759 return -EOPNOTSUPP;
11760
11761 return sk->sk_prot->diag_destroy(sk, ECONNABORTED);
11762 }
11763

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki