Re: [PATCH bpf-next 1/4] bpf: Refactor cleanup of bpf_prog_test_run_skb

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Paul,

kernel test robot noticed the following build warnings:

[auto build test WARNING on bpf-next/master]

url:    https://github.com/intel-lab-lkp/linux/commits/Paul-Chaignon/bpf-Refactor-cleanup-of-bpf_prog_test_run_skb/20250904-201515
base:   https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link:    https://lore.kernel.org/r/6fda7c7fd57e6134ff70d12b622c9c7c3cf0b226.1756983952.git.paul.chaignon%40gmail.com
patch subject: [PATCH bpf-next 1/4] bpf: Refactor cleanup of bpf_prog_test_run_skb
config: i386-buildonly-randconfig-006-20250905 (https://download.01.org/0day-ci/archive/20250905/202509052000.sL96WwEb-lkp@xxxxxxxxx/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250905/202509052000.sL96WwEb-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/202509052000.sL96WwEb-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

>> net/bpf/test_run.c:1011:6: warning: variable 'sk' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
    1011 |         if (IS_ERR(ctx)) {
         |             ^~~~~~~~~~~
   net/bpf/test_run.c:1142:6: note: uninitialized use occurs here
    1142 |         if (sk)
         |             ^~
   net/bpf/test_run.c:1011:2: note: remove the 'if' if its condition is always false
    1011 |         if (IS_ERR(ctx)) {
         |         ^~~~~~~~~~~~~~~~~~
    1012 |                 ret = PTR_ERR(ctx);
         |                 ~~~~~~~~~~~~~~~~~~~
    1013 |                 goto out;
         |                 ~~~~~~~~~
    1014 |         }
         |         ~
   net/bpf/test_run.c:996:17: note: initialize the variable 'sk' to silence this warning
     996 |         struct sock *sk;
         |                        ^
         |                         = NULL
>> net/bpf/test_run.c:1032:6: warning: variable 'skb' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
    1032 |         if (!sk) {
         |             ^~~
   net/bpf/test_run.c:1140:12: note: uninitialized use occurs here
    1140 |         kfree_skb(skb);
         |                   ^~~
   net/bpf/test_run.c:1032:2: note: remove the 'if' if its condition is always false
    1032 |         if (!sk) {
         |         ^~~~~~~~~~
    1033 |                 ret = -ENOMEM;
         |                 ~~~~~~~~~~~~~~
    1034 |                 goto out;
         |                 ~~~~~~~~~
    1035 |         }
         |         ~
   net/bpf/test_run.c:1011:6: warning: variable 'skb' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
    1011 |         if (IS_ERR(ctx)) {
         |             ^~~~~~~~~~~
   net/bpf/test_run.c:1140:12: note: uninitialized use occurs here
    1140 |         kfree_skb(skb);
         |                   ^~~
   net/bpf/test_run.c:1011:2: note: remove the 'if' if its condition is always false
    1011 |         if (IS_ERR(ctx)) {
         |         ^~~~~~~~~~~~~~~~~~
    1012 |                 ret = PTR_ERR(ctx);
         |                 ~~~~~~~~~~~~~~~~~~~
    1013 |                 goto out;
         |                 ~~~~~~~~~
    1014 |         }
         |         ~
   net/bpf/test_run.c:995:21: note: initialize the variable 'skb' to silence this warning
     995 |         struct sk_buff *skb;
         |                            ^
         |                             = NULL
   3 warnings generated.


vim +1011 net/bpf/test_run.c

435b08ec0094ac Daniel Borkmann     2021-09-27   983  
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30   984  int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr,
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30   985  			  union bpf_attr __user *uattr)
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30   986  {
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30   987  	bool is_l2 = false, is_direct_pkt_access = false;
21594c44083c37 Dmitry Yakunin      2020-08-03   988  	struct net *net = current->nsproxy->net_ns;
21594c44083c37 Dmitry Yakunin      2020-08-03   989  	struct net_device *dev = net->loopback_dev;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30   990  	u32 size = kattr->test.data_size_in;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30   991  	u32 repeat = kattr->test.repeat;
b0b9395d865e30 Stanislav Fomichev  2019-04-09   992  	struct __sk_buff *ctx = NULL;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30   993  	u32 retval, duration;
6e6fddc7832353 Daniel Borkmann     2018-07-11   994  	int hh_len = ETH_HLEN;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30   995  	struct sk_buff *skb;
2cb494a36c9827 Song Liu            2018-10-19   996  	struct sock *sk;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30   997  	void *data;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30   998  	int ret;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30   999  
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1000  	if ((kattr->test.flags & ~BPF_F_TEST_SKB_CHECKSUM_COMPLETE) ||
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1001  	    kattr->test.cpu || kattr->test.batch_size)
1b4d60ec162f82 Song Liu            2020-09-25  1002  		return -EINVAL;
1b4d60ec162f82 Song Liu            2020-09-25  1003  
be3d72a2896cb2 Lorenzo Bianconi    2022-01-21  1004  	data = bpf_test_init(kattr, kattr->test.data_size_in,
be3d72a2896cb2 Lorenzo Bianconi    2022-01-21  1005  			     size, NET_SKB_PAD + NET_IP_ALIGN,
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1006  			     SKB_DATA_ALIGN(sizeof(struct skb_shared_info)));
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1007  	if (IS_ERR(data))
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1008  		return PTR_ERR(data);
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1009  
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1010  	ctx = bpf_ctx_init(kattr, sizeof(struct __sk_buff));
b0b9395d865e30 Stanislav Fomichev  2019-04-09 @1011  	if (IS_ERR(ctx)) {
ed22fb43432aaa Paul Chaignon       2025-09-04  1012  		ret = PTR_ERR(ctx);
ed22fb43432aaa Paul Chaignon       2025-09-04  1013  		goto out;
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1014  	}
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1015  
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1016  	switch (prog->type) {
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1017  	case BPF_PROG_TYPE_SCHED_CLS:
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1018  	case BPF_PROG_TYPE_SCHED_ACT:
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1019  		is_l2 = true;
df561f6688fef7 Gustavo A. R. Silva 2020-08-23  1020  		fallthrough;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1021  	case BPF_PROG_TYPE_LWT_IN:
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1022  	case BPF_PROG_TYPE_LWT_OUT:
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1023  	case BPF_PROG_TYPE_LWT_XMIT:
ed3e469d021cba Mahe Tardy          2024-11-25  1024  	case BPF_PROG_TYPE_CGROUP_SKB:
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1025  		is_direct_pkt_access = true;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1026  		break;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1027  	default:
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1028  		break;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1029  	}
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1030  
435b08ec0094ac Daniel Borkmann     2021-09-27  1031  	sk = sk_alloc(net, AF_UNSPEC, GFP_USER, &bpf_dummy_proto, 1);
2cb494a36c9827 Song Liu            2018-10-19 @1032  	if (!sk) {
ed22fb43432aaa Paul Chaignon       2025-09-04  1033  		ret = -ENOMEM;
ed22fb43432aaa Paul Chaignon       2025-09-04  1034  		goto out;
2cb494a36c9827 Song Liu            2018-10-19  1035  	}
2cb494a36c9827 Song Liu            2018-10-19  1036  	sock_init_data(NULL, sk);
2cb494a36c9827 Song Liu            2018-10-19  1037  
ce098da1497c6d Kees Cook           2022-12-07  1038  	skb = slab_build_skb(data);
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1039  	if (!skb) {
ed22fb43432aaa Paul Chaignon       2025-09-04  1040  		ret = -ENOMEM;
ed22fb43432aaa Paul Chaignon       2025-09-04  1041  		goto out;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1042  	}
2cb494a36c9827 Song Liu            2018-10-19  1043  	skb->sk = sk;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1044  
586f8525979ad9 David Miller        2017-05-02  1045  	skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN);
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1046  	__skb_put(skb, size);
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1047  
ed22fb43432aaa Paul Chaignon       2025-09-04  1048  	data = NULL; /* data released via kfree_skb */
ed22fb43432aaa Paul Chaignon       2025-09-04  1049  
21594c44083c37 Dmitry Yakunin      2020-08-03  1050  	if (ctx && ctx->ifindex > 1) {
21594c44083c37 Dmitry Yakunin      2020-08-03  1051  		dev = dev_get_by_index(net, ctx->ifindex);
21594c44083c37 Dmitry Yakunin      2020-08-03  1052  		if (!dev) {
21594c44083c37 Dmitry Yakunin      2020-08-03  1053  			ret = -ENODEV;
21594c44083c37 Dmitry Yakunin      2020-08-03  1054  			goto out;
21594c44083c37 Dmitry Yakunin      2020-08-03  1055  		}
21594c44083c37 Dmitry Yakunin      2020-08-03  1056  	}
21594c44083c37 Dmitry Yakunin      2020-08-03  1057  	skb->protocol = eth_type_trans(skb, dev);
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1058  	skb_reset_network_header(skb);
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1059  
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1060  	switch (skb->protocol) {
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1061  	case htons(ETH_P_IP):
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1062  		sk->sk_family = AF_INET;
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1063  		if (sizeof(struct iphdr) <= skb_headlen(skb)) {
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1064  			sk->sk_rcv_saddr = ip_hdr(skb)->saddr;
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1065  			sk->sk_daddr = ip_hdr(skb)->daddr;
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1066  		}
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1067  		break;
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1068  #if IS_ENABLED(CONFIG_IPV6)
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1069  	case htons(ETH_P_IPV6):
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1070  		sk->sk_family = AF_INET6;
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1071  		if (sizeof(struct ipv6hdr) <= skb_headlen(skb)) {
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1072  			sk->sk_v6_rcv_saddr = ipv6_hdr(skb)->saddr;
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1073  			sk->sk_v6_daddr = ipv6_hdr(skb)->daddr;
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1074  		}
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1075  		break;
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1076  #endif
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1077  	default:
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1078  		break;
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1079  	}
fa5cb548ced61b Dmitry Yakunin      2020-08-03  1080  
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1081  	if (is_l2)
6e6fddc7832353 Daniel Borkmann     2018-07-11  1082  		__skb_push(skb, hh_len);
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1083  	if (is_direct_pkt_access)
6aaae2b6c4330a Daniel Borkmann     2017-09-25  1084  		bpf_compute_data_pointers(skb);
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1085  
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1086  	ret = convert___skb_to_skb(skb, ctx);
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1087  	if (ret)
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1088  		goto out;
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1089  
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1090  	if (kattr->test.flags & BPF_F_TEST_SKB_CHECKSUM_COMPLETE) {
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1091  		const int off = skb_network_offset(skb);
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1092  		int len = skb->len - off;
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1093  
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1094  		skb->csum = skb_checksum(skb, off, len, 0);
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1095  		skb->ip_summed = CHECKSUM_COMPLETE;
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1096  	}
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1097  
f23c4b3924d2e9 Björn Töpel         2019-12-13  1098  	ret = bpf_test_run(prog, skb, repeat, &retval, &duration, false);
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1099  	if (ret)
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1100  		goto out;
6e6fddc7832353 Daniel Borkmann     2018-07-11  1101  	if (!is_l2) {
6e6fddc7832353 Daniel Borkmann     2018-07-11  1102  		if (skb_headroom(skb) < hh_len) {
6e6fddc7832353 Daniel Borkmann     2018-07-11  1103  			int nhead = HH_DATA_ALIGN(hh_len - skb_headroom(skb));
6e6fddc7832353 Daniel Borkmann     2018-07-11  1104  
6e6fddc7832353 Daniel Borkmann     2018-07-11  1105  			if (pskb_expand_head(skb, nhead, 0, GFP_USER)) {
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1106  				ret = -ENOMEM;
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1107  				goto out;
6e6fddc7832353 Daniel Borkmann     2018-07-11  1108  			}
6e6fddc7832353 Daniel Borkmann     2018-07-11  1109  		}
6e6fddc7832353 Daniel Borkmann     2018-07-11  1110  		memset(__skb_push(skb, hh_len), 0, hh_len);
6e6fddc7832353 Daniel Borkmann     2018-07-11  1111  	}
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1112  
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1113  	if (kattr->test.flags & BPF_F_TEST_SKB_CHECKSUM_COMPLETE) {
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1114  		const int off = skb_network_offset(skb);
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1115  		int len = skb->len - off;
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1116  		__wsum csum;
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1117  
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1118  		csum = skb_checksum(skb, off, len, 0);
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1119  
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1120  		if (csum_fold(skb->csum) != csum_fold(csum)) {
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1121  			ret = -EBADMSG;
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1122  			goto out;
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1123  		}
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1124  	}
a3cfe84cca28f2 Vadim Fedorenko     2024-06-06  1125  
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1126  	convert_skb_to___skb(skb, ctx);
6e6fddc7832353 Daniel Borkmann     2018-07-11  1127  
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1128  	size = skb->len;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1129  	/* bpf program can never convert linear skb to non-linear */
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1130  	if (WARN_ON_ONCE(skb_is_nonlinear(skb)))
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1131  		size = skb_headlen(skb);
7855e0db150ad8 Lorenzo Bianconi    2022-01-21  1132  	ret = bpf_test_finish(kattr, uattr, skb->data, NULL, size, retval,
7855e0db150ad8 Lorenzo Bianconi    2022-01-21  1133  			      duration);
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1134  	if (!ret)
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1135  		ret = bpf_ctx_finish(kattr, uattr, ctx,
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1136  				     sizeof(struct __sk_buff));
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1137  out:
21594c44083c37 Dmitry Yakunin      2020-08-03  1138  	if (dev && dev != net->loopback_dev)
21594c44083c37 Dmitry Yakunin      2020-08-03  1139  		dev_put(dev);
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1140  	kfree_skb(skb);
ed22fb43432aaa Paul Chaignon       2025-09-04  1141  	kfree(data);
ed22fb43432aaa Paul Chaignon       2025-09-04  1142  	if (sk)
435b08ec0094ac Daniel Borkmann     2021-09-27  1143  		sk_free(sk);
b0b9395d865e30 Stanislav Fomichev  2019-04-09  1144  	kfree(ctx);
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1145  	return ret;
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1146  }
1cf1cae963c2e6 Alexei Starovoitov  2017-03-30  1147  

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




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux