tree:
git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git master
head: d5bd32a876c8cb677c9cc88dcc7eb498cd0c9397
commit: 9d9e937b1c8be97b424e3e11938e183fcde905c0 [24/38] ipv6/netfilter: Discard first
fragment not including all headers
config: x86_64-randconfig-a012-20201115 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
#
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/commit/?id...
git remote add netdev-net
git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git
git fetch --no-tags netdev-net master
git checkout 9d9e937b1c8be97b424e3e11938e183fcde905c0
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
ld: net/ipv6/netfilter/nf_conntrack_reasm.o: in function `nf_ct_frag6_gather':
> net/ipv6/netfilter/nf_conntrack_reasm.c:462: undefined reference
to `ipv6_frag_thdr_truncated'
vim +462 net/ipv6/netfilter/nf_conntrack_reasm.c
439
440 int nf_ct_frag6_gather(struct net *net, struct sk_buff *skb, u32 user)
441 {
442 u16 savethdr = skb->transport_header;
443 u8 nexthdr = NEXTHDR_FRAGMENT;
444 int fhoff, nhoff, ret;
445 struct frag_hdr *fhdr;
446 struct frag_queue *fq;
447 struct ipv6hdr *hdr;
448 u8 prevhdr;
449
450 /* Jumbo payload inhibits frag. header */
451 if (ipv6_hdr(skb)->payload_len == 0) {
452 pr_debug("payload len = 0\n");
453 return 0;
454 }
455
456 if (find_prev_fhdr(skb, &prevhdr, &nhoff, &fhoff) < 0)
457 return 0;
458
459 /* Discard the first fragment if it does not include all headers
460 * RFC 8200, Section 4.5
461 */
462 if (ipv6_frag_thdr_truncated(skb, fhoff, &nexthdr)) {
463 pr_debug("Drop incomplete fragment\n");
464 return 0;
465 }
466
467 if (!pskb_may_pull(skb, fhoff + sizeof(*fhdr)))
468 return -ENOMEM;
469
470 skb_set_transport_header(skb, fhoff);
471 hdr = ipv6_hdr(skb);
472 fhdr = (struct frag_hdr *)skb_transport_header(skb);
473
474 skb_orphan(skb);
475 fq = fq_find(net, fhdr->identification, user, hdr,
476 skb->dev ? skb->dev->ifindex : 0);
477 if (fq == NULL) {
478 pr_debug("Can't find and can't create new queue\n");
479 return -ENOMEM;
480 }
481
482 spin_lock_bh(&fq->q.lock);
483
484 ret = nf_ct_frag6_queue(fq, skb, fhdr, nhoff);
485 if (ret == -EPROTO) {
486 skb->transport_header = savethdr;
487 ret = 0;
488 }
489
490 spin_unlock_bh(&fq->q.lock);
491 inet_frag_put(&fq->q);
492 return ret;
493 }
494 EXPORT_SYMBOL_GPL(nf_ct_frag6_gather);
495
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org