Hi Dmitry, Thank you for the patch! Yet something to improve: [auto build test ERROR on bpf-next/master] url: https://github.com/0day-ci/linux/commits/Dmitry-Yakunin/bpf-cgroup-skb-improvements-for-bpf_prog_test_run/20200715-041420 base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master config: arm64-randconfig-r005-20200714 (attached as .config) compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project 02946de3802d3bc65bc9f2eb9b8d4969b5a7add8) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm64 cross compiling tool for clang build # apt-get install binutils-aarch64-linux-gnu # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@xxxxxxxxx> All errors (new ones prefixed by >>): net/bpf/test_run.c:120:14: warning: no previous prototype for function 'bpf_fentry_test1' [-Wmissing-prototypes] int noinline bpf_fentry_test1(int a) ^ net/bpf/test_run.c:120:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int noinline bpf_fentry_test1(int a) ^ static net/bpf/test_run.c:125:14: warning: no previous prototype for function 'bpf_fentry_test2' [-Wmissing-prototypes] int noinline bpf_fentry_test2(int a, u64 b) ^ net/bpf/test_run.c:125:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int noinline bpf_fentry_test2(int a, u64 b) ^ static net/bpf/test_run.c:130:14: warning: no previous prototype for function 'bpf_fentry_test3' [-Wmissing-prototypes] int noinline bpf_fentry_test3(char a, int b, u64 c) ^ net/bpf/test_run.c:130:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int noinline bpf_fentry_test3(char a, int b, u64 c) ^ static net/bpf/test_run.c:135:14: warning: no previous prototype for function 'bpf_fentry_test4' [-Wmissing-prototypes] int noinline bpf_fentry_test4(void *a, char b, int c, u64 d) ^ net/bpf/test_run.c:135:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int noinline bpf_fentry_test4(void *a, char b, int c, u64 d) ^ static net/bpf/test_run.c:140:14: warning: no previous prototype for function 'bpf_fentry_test5' [-Wmissing-prototypes] int noinline bpf_fentry_test5(u64 a, void *b, short c, int d, u64 e) ^ net/bpf/test_run.c:140:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int noinline bpf_fentry_test5(u64 a, void *b, short c, int d, u64 e) ^ static net/bpf/test_run.c:145:14: warning: no previous prototype for function 'bpf_fentry_test6' [-Wmissing-prototypes] int noinline bpf_fentry_test6(u64 a, void *b, short c, int d, void *e, u64 f) ^ net/bpf/test_run.c:145:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int noinline bpf_fentry_test6(u64 a, void *b, short c, int d, void *e, u64 f) ^ static net/bpf/test_run.c:154:14: warning: no previous prototype for function 'bpf_fentry_test7' [-Wmissing-prototypes] int noinline bpf_fentry_test7(struct bpf_fentry_test_t *arg) ^ net/bpf/test_run.c:154:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int noinline bpf_fentry_test7(struct bpf_fentry_test_t *arg) ^ static net/bpf/test_run.c:159:14: warning: no previous prototype for function 'bpf_fentry_test8' [-Wmissing-prototypes] int noinline bpf_fentry_test8(struct bpf_fentry_test_t *arg) ^ net/bpf/test_run.c:159:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int noinline bpf_fentry_test8(struct bpf_fentry_test_t *arg) ^ static net/bpf/test_run.c:164:14: warning: no previous prototype for function 'bpf_modify_return_test' [-Wmissing-prototypes] int noinline bpf_modify_return_test(int a, int *b) ^ net/bpf/test_run.c:164:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int noinline bpf_modify_return_test(int a, int *b) ^ static >> net/bpf/test_run.c:460:7: error: no member named 'skc_v6_rcv_saddr' in 'struct sock_common'; did you mean 'skc_rcv_saddr'? sk->sk_v6_rcv_saddr = ipv6_hdr(skb)->saddr; ^ include/net/sock.h:380:37: note: expanded from macro 'sk_v6_rcv_saddr' #define sk_v6_rcv_saddr __sk_common.skc_v6_rcv_saddr ^ include/net/sock.h:169:11: note: 'skc_rcv_saddr' declared here __be32 skc_rcv_saddr; ^ >> net/bpf/test_run.c:460:23: error: assigning to '__be32' (aka 'unsigned int') from incompatible type 'struct in6_addr' sk->sk_v6_rcv_saddr = ipv6_hdr(skb)->saddr; ^ ~~~~~~~~~~~~~~~~~~~~ >> net/bpf/test_run.c:461:7: error: no member named 'skc_v6_daddr' in 'struct sock_common'; did you mean 'skc_daddr'? sk->sk_v6_daddr = ipv6_hdr(skb)->daddr; ^ include/net/sock.h:379:34: note: expanded from macro 'sk_v6_daddr' #define sk_v6_daddr __sk_common.skc_v6_daddr ^ include/net/sock.h:168:11: note: 'skc_daddr' declared here __be32 skc_daddr; ^ net/bpf/test_run.c:461:19: error: assigning to '__be32' (aka 'unsigned int') from incompatible type 'struct in6_addr' sk->sk_v6_daddr = ipv6_hdr(skb)->daddr; ^ ~~~~~~~~~~~~~~~~~~~~ 9 warnings and 4 errors generated. vim +460 net/bpf/test_run.c 389 390 int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr, 391 union bpf_attr __user *uattr) 392 { 393 bool is_l2 = false, is_direct_pkt_access = false; 394 u32 size = kattr->test.data_size_in; 395 u32 repeat = kattr->test.repeat; 396 struct __sk_buff *ctx = NULL; 397 u32 retval, duration; 398 int hh_len = ETH_HLEN; 399 struct sk_buff *skb; 400 struct sock *sk; 401 void *data; 402 int ret; 403 404 data = bpf_test_init(kattr, size, NET_SKB_PAD + NET_IP_ALIGN, 405 SKB_DATA_ALIGN(sizeof(struct skb_shared_info))); 406 if (IS_ERR(data)) 407 return PTR_ERR(data); 408 409 ctx = bpf_ctx_init(kattr, sizeof(struct __sk_buff)); 410 if (IS_ERR(ctx)) { 411 kfree(data); 412 return PTR_ERR(ctx); 413 } 414 415 switch (prog->type) { 416 case BPF_PROG_TYPE_SCHED_CLS: 417 case BPF_PROG_TYPE_SCHED_ACT: 418 is_l2 = true; 419 /* fall through */ 420 case BPF_PROG_TYPE_LWT_IN: 421 case BPF_PROG_TYPE_LWT_OUT: 422 case BPF_PROG_TYPE_LWT_XMIT: 423 is_direct_pkt_access = true; 424 break; 425 default: 426 break; 427 } 428 429 sk = kzalloc(sizeof(struct sock), GFP_USER); 430 if (!sk) { 431 kfree(data); 432 kfree(ctx); 433 return -ENOMEM; 434 } 435 sock_net_set(sk, current->nsproxy->net_ns); 436 sock_init_data(NULL, sk); 437 438 skb = build_skb(data, 0); 439 if (!skb) { 440 kfree(data); 441 kfree(ctx); 442 kfree(sk); 443 return -ENOMEM; 444 } 445 skb->sk = sk; 446 447 skb_reserve(skb, NET_SKB_PAD + NET_IP_ALIGN); 448 __skb_put(skb, size); 449 skb->protocol = eth_type_trans(skb, current->nsproxy->net_ns->loopback_dev); 450 skb_reset_network_header(skb); 451 452 switch (skb->protocol) { 453 case htons(ETH_P_IP): 454 sk->sk_family = AF_INET; 455 sk->sk_rcv_saddr = ip_hdr(skb)->saddr; 456 sk->sk_daddr = ip_hdr(skb)->daddr; 457 break; 458 case htons(ETH_P_IPV6): 459 sk->sk_family = AF_INET6; > 460 sk->sk_v6_rcv_saddr = ipv6_hdr(skb)->saddr; > 461 sk->sk_v6_daddr = ipv6_hdr(skb)->daddr; 462 break; 463 default: 464 break; 465 } 466 467 if (is_l2) 468 __skb_push(skb, hh_len); 469 if (is_direct_pkt_access) 470 bpf_compute_data_pointers(skb); 471 ret = convert___skb_to_skb(skb, ctx); 472 if (ret) 473 goto out; 474 ret = bpf_test_run(prog, skb, repeat, &retval, &duration, false); 475 if (ret) 476 goto out; 477 if (!is_l2) { 478 if (skb_headroom(skb) < hh_len) { 479 int nhead = HH_DATA_ALIGN(hh_len - skb_headroom(skb)); 480 481 if (pskb_expand_head(skb, nhead, 0, GFP_USER)) { 482 ret = -ENOMEM; 483 goto out; 484 } 485 } 486 memset(__skb_push(skb, hh_len), 0, hh_len); 487 } 488 convert_skb_to___skb(skb, ctx); 489 490 size = skb->len; 491 /* bpf program can never convert linear skb to non-linear */ 492 if (WARN_ON_ONCE(skb_is_nonlinear(skb))) 493 size = skb_headlen(skb); 494 ret = bpf_test_finish(kattr, uattr, skb->data, size, retval, duration); 495 if (!ret) 496 ret = bpf_ctx_finish(kattr, uattr, ctx, 497 sizeof(struct __sk_buff)); 498 out: 499 kfree_skb(skb); 500 bpf_sk_storage_free(sk); 501 kfree(sk); 502 kfree(ctx); 503 return ret; 504 } 505 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip