From: kernel test robot <lkp@intel.com>
To: Florian Westphal <fw@strlen.de>, netfilter-devel@vger.kernel.org
Cc: kbuild-all@lists.01.org, Florian Westphal <fw@strlen.de>
Subject: Re: [PATCH nf-next] netfilter: ctnetlink: remove get_ct indirection
Date: Wed, 20 Jan 2021 22:58:37 +0800 [thread overview]
Message-ID: <202101202212.mBfU01sp-lkp@intel.com> (raw)
In-Reply-To: <20210119092114.29786-1-fw@strlen.de>
[-- Attachment #1: Type: text/plain, Size: 11400 bytes --]
Hi Florian,
I love your patch! Yet something to improve:
[auto build test ERROR on nf-next/master]
url: https://github.com/0day-ci/linux/commits/Florian-Westphal/netfilter-ctnetlink-remove-get_ct-indirection/20210120-190814
base: https://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next.git master
config: microblaze-randconfig-r001-20210120 (attached as .config)
compiler: microblaze-linux-gcc (GCC) 9.3.0
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
# https://github.com/0day-ci/linux/commit/20f5f1a1d8f0d775b9982e1404cf44840dd0a86a
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Florian-Westphal/netfilter-ctnetlink-remove-get_ct-indirection/20210120-190814
git checkout 20f5f1a1d8f0d775b9982e1404cf44840dd0a86a
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=microblaze
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
net/netfilter/nfnetlink_queue.c: In function 'nfqnl_build_packet_message':
>> net/netfilter/nfnetlink_queue.c:449:9: error: implicit declaration of function 'nf_ct_get' [-Werror=implicit-function-declaration]
449 | ct = nf_ct_get(entskb, &ctinfo);
| ^~~~~~~~~
>> net/netfilter/nfnetlink_queue.c:449:7: warning: assignment to 'struct nf_conn *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
449 | ct = nf_ct_get(entskb, &ctinfo);
| ^
net/netfilter/nfnetlink_queue.c: In function 'nfqnl_ct_parse':
net/netfilter/nfnetlink_queue.c:1109:5: warning: assignment to 'struct nf_conn *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
1109 | ct = nf_ct_get(entry->skb, ctinfo);
| ^
cc1: some warnings being treated as errors
vim +/nf_ct_get +449 net/netfilter/nfnetlink_queue.c
373
374 static struct sk_buff *
375 nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue,
376 struct nf_queue_entry *entry,
377 __be32 **packet_id_ptr)
378 {
379 size_t size;
380 size_t data_len = 0, cap_len = 0;
381 unsigned int hlen = 0;
382 struct sk_buff *skb;
383 struct nlattr *nla;
384 struct nfqnl_msg_packet_hdr *pmsg;
385 struct nlmsghdr *nlh;
386 struct nfgenmsg *nfmsg;
387 struct sk_buff *entskb = entry->skb;
388 struct net_device *indev;
389 struct net_device *outdev;
390 struct nf_conn *ct = NULL;
391 enum ip_conntrack_info ctinfo;
392 struct nfnl_ct_hook *nfnl_ct;
393 bool csum_verify;
394 char *secdata = NULL;
395 u32 seclen = 0;
396
397 size = nlmsg_total_size(sizeof(struct nfgenmsg))
398 + nla_total_size(sizeof(struct nfqnl_msg_packet_hdr))
399 + nla_total_size(sizeof(u_int32_t)) /* ifindex */
400 + nla_total_size(sizeof(u_int32_t)) /* ifindex */
401 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
402 + nla_total_size(sizeof(u_int32_t)) /* ifindex */
403 + nla_total_size(sizeof(u_int32_t)) /* ifindex */
404 #endif
405 + nla_total_size(sizeof(u_int32_t)) /* mark */
406 + nla_total_size(sizeof(struct nfqnl_msg_packet_hw))
407 + nla_total_size(sizeof(u_int32_t)) /* skbinfo */
408 + nla_total_size(sizeof(u_int32_t)); /* cap_len */
409
410 if (entskb->tstamp)
411 size += nla_total_size(sizeof(struct nfqnl_msg_packet_timestamp));
412
413 size += nfqnl_get_bridge_size(entry);
414
415 if (entry->state.hook <= NF_INET_FORWARD ||
416 (entry->state.hook == NF_INET_POST_ROUTING && entskb->sk == NULL))
417 csum_verify = !skb_csum_unnecessary(entskb);
418 else
419 csum_verify = false;
420
421 outdev = entry->state.out;
422
423 switch ((enum nfqnl_config_mode)READ_ONCE(queue->copy_mode)) {
424 case NFQNL_COPY_META:
425 case NFQNL_COPY_NONE:
426 break;
427
428 case NFQNL_COPY_PACKET:
429 if (!(queue->flags & NFQA_CFG_F_GSO) &&
430 entskb->ip_summed == CHECKSUM_PARTIAL &&
431 skb_checksum_help(entskb))
432 return NULL;
433
434 data_len = READ_ONCE(queue->copy_range);
435 if (data_len > entskb->len)
436 data_len = entskb->len;
437
438 hlen = skb_zerocopy_headlen(entskb);
439 hlen = min_t(unsigned int, hlen, data_len);
440 size += sizeof(struct nlattr) + hlen;
441 cap_len = entskb->len;
442 break;
443 }
444
445 nfnl_ct = rcu_dereference(nfnl_ct_hook);
446
447 if (queue->flags & NFQA_CFG_F_CONNTRACK) {
448 if (nfnl_ct != NULL) {
> 449 ct = nf_ct_get(entskb, &ctinfo);
450 if (ct != NULL)
451 size += nfnl_ct->build_size(ct);
452 }
453 }
454
455 if (queue->flags & NFQA_CFG_F_UID_GID) {
456 size += (nla_total_size(sizeof(u_int32_t)) /* uid */
457 + nla_total_size(sizeof(u_int32_t))); /* gid */
458 }
459
460 if ((queue->flags & NFQA_CFG_F_SECCTX) && entskb->sk) {
461 seclen = nfqnl_get_sk_secctx(entskb, &secdata);
462 if (seclen)
463 size += nla_total_size(seclen);
464 }
465
466 skb = alloc_skb(size, GFP_ATOMIC);
467 if (!skb) {
468 skb_tx_error(entskb);
469 goto nlmsg_failure;
470 }
471
472 nlh = nlmsg_put(skb, 0, 0,
473 nfnl_msg_type(NFNL_SUBSYS_QUEUE, NFQNL_MSG_PACKET),
474 sizeof(struct nfgenmsg), 0);
475 if (!nlh) {
476 skb_tx_error(entskb);
477 kfree_skb(skb);
478 goto nlmsg_failure;
479 }
480 nfmsg = nlmsg_data(nlh);
481 nfmsg->nfgen_family = entry->state.pf;
482 nfmsg->version = NFNETLINK_V0;
483 nfmsg->res_id = htons(queue->queue_num);
484
485 nla = __nla_reserve(skb, NFQA_PACKET_HDR, sizeof(*pmsg));
486 pmsg = nla_data(nla);
487 pmsg->hw_protocol = entskb->protocol;
488 pmsg->hook = entry->state.hook;
489 *packet_id_ptr = &pmsg->packet_id;
490
491 indev = entry->state.in;
492 if (indev) {
493 #if !IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
494 if (nla_put_be32(skb, NFQA_IFINDEX_INDEV, htonl(indev->ifindex)))
495 goto nla_put_failure;
496 #else
497 if (entry->state.pf == PF_BRIDGE) {
498 /* Case 1: indev is physical input device, we need to
499 * look for bridge group (when called from
500 * netfilter_bridge) */
501 if (nla_put_be32(skb, NFQA_IFINDEX_PHYSINDEV,
502 htonl(indev->ifindex)) ||
503 /* this is the bridge group "brX" */
504 /* rcu_read_lock()ed by __nf_queue */
505 nla_put_be32(skb, NFQA_IFINDEX_INDEV,
506 htonl(br_port_get_rcu(indev)->br->dev->ifindex)))
507 goto nla_put_failure;
508 } else {
509 int physinif;
510
511 /* Case 2: indev is bridge group, we need to look for
512 * physical device (when called from ipv4) */
513 if (nla_put_be32(skb, NFQA_IFINDEX_INDEV,
514 htonl(indev->ifindex)))
515 goto nla_put_failure;
516
517 physinif = nf_bridge_get_physinif(entskb);
518 if (physinif &&
519 nla_put_be32(skb, NFQA_IFINDEX_PHYSINDEV,
520 htonl(physinif)))
521 goto nla_put_failure;
522 }
523 #endif
524 }
525
526 if (outdev) {
527 #if !IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
528 if (nla_put_be32(skb, NFQA_IFINDEX_OUTDEV, htonl(outdev->ifindex)))
529 goto nla_put_failure;
530 #else
531 if (entry->state.pf == PF_BRIDGE) {
532 /* Case 1: outdev is physical output device, we need to
533 * look for bridge group (when called from
534 * netfilter_bridge) */
535 if (nla_put_be32(skb, NFQA_IFINDEX_PHYSOUTDEV,
536 htonl(outdev->ifindex)) ||
537 /* this is the bridge group "brX" */
538 /* rcu_read_lock()ed by __nf_queue */
539 nla_put_be32(skb, NFQA_IFINDEX_OUTDEV,
540 htonl(br_port_get_rcu(outdev)->br->dev->ifindex)))
541 goto nla_put_failure;
542 } else {
543 int physoutif;
544
545 /* Case 2: outdev is bridge group, we need to look for
546 * physical output device (when called from ipv4) */
547 if (nla_put_be32(skb, NFQA_IFINDEX_OUTDEV,
548 htonl(outdev->ifindex)))
549 goto nla_put_failure;
550
551 physoutif = nf_bridge_get_physoutif(entskb);
552 if (physoutif &&
553 nla_put_be32(skb, NFQA_IFINDEX_PHYSOUTDEV,
554 htonl(physoutif)))
555 goto nla_put_failure;
556 }
557 #endif
558 }
559
560 if (entskb->mark &&
561 nla_put_be32(skb, NFQA_MARK, htonl(entskb->mark)))
562 goto nla_put_failure;
563
564 if (indev && entskb->dev &&
565 entskb->mac_header != entskb->network_header) {
566 struct nfqnl_msg_packet_hw phw;
567 int len;
568
569 memset(&phw, 0, sizeof(phw));
570 len = dev_parse_header(entskb, phw.hw_addr);
571 if (len) {
572 phw.hw_addrlen = htons(len);
573 if (nla_put(skb, NFQA_HWADDR, sizeof(phw), &phw))
574 goto nla_put_failure;
575 }
576 }
577
578 if (nfqnl_put_bridge(entry, skb) < 0)
579 goto nla_put_failure;
580
581 if (entry->state.hook <= NF_INET_FORWARD && entskb->tstamp) {
582 struct nfqnl_msg_packet_timestamp ts;
583 struct timespec64 kts = ktime_to_timespec64(entskb->tstamp);
584
585 ts.sec = cpu_to_be64(kts.tv_sec);
586 ts.usec = cpu_to_be64(kts.tv_nsec / NSEC_PER_USEC);
587
588 if (nla_put(skb, NFQA_TIMESTAMP, sizeof(ts), &ts))
589 goto nla_put_failure;
590 }
591
592 if ((queue->flags & NFQA_CFG_F_UID_GID) && entskb->sk &&
593 nfqnl_put_sk_uidgid(skb, entskb->sk) < 0)
594 goto nla_put_failure;
595
596 if (seclen && nla_put(skb, NFQA_SECCTX, seclen, secdata))
597 goto nla_put_failure;
598
599 if (ct && nfnl_ct->build(skb, ct, ctinfo, NFQA_CT, NFQA_CT_INFO) < 0)
600 goto nla_put_failure;
601
602 if (cap_len > data_len &&
603 nla_put_be32(skb, NFQA_CAP_LEN, htonl(cap_len)))
604 goto nla_put_failure;
605
606 if (nfqnl_put_packet_info(skb, entskb, csum_verify))
607 goto nla_put_failure;
608
609 if (data_len) {
610 struct nlattr *nla;
611
612 if (skb_tailroom(skb) < sizeof(*nla) + hlen)
613 goto nla_put_failure;
614
615 nla = skb_put(skb, sizeof(*nla));
616 nla->nla_type = NFQA_PAYLOAD;
617 nla->nla_len = nla_attr_size(data_len);
618
619 if (skb_zerocopy(skb, entskb, data_len, hlen))
620 goto nla_put_failure;
621 }
622
623 nlh->nlmsg_len = skb->len;
624 if (seclen)
625 security_release_secctx(secdata, seclen);
626 return skb;
627
628 nla_put_failure:
629 skb_tx_error(entskb);
630 kfree_skb(skb);
631 net_err_ratelimited("nf_queue: error creating packet message\n");
632 nlmsg_failure:
633 if (seclen)
634 security_release_secctx(secdata, seclen);
635 return NULL;
636 }
637
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 35368 bytes --]
prev parent reply other threads:[~2021-01-20 15:09 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-19 9:21 [PATCH nf-next] netfilter: ctnetlink: remove get_ct indirection Florian Westphal
2021-01-20 14:37 ` kernel test robot
2021-01-20 14:58 ` kernel test robot [this message]
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=202101202212.mBfU01sp-lkp@intel.com \
--to=lkp@intel.com \
--cc=fw@strlen.de \
--cc=kbuild-all@lists.01.org \
--cc=netfilter-devel@vger.kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).