[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <202510241011.2cTY5v7o-lkp@intel.com>
Date: Fri, 24 Oct 2025 10:21:41 +0800
From: kernel test robot <lkp@...el.com>
To: Dmitry Skorodumov <skorodumov.dmitry@...wei.com>,
netdev@...r.kernel.org, linux-kernel@...r.kernel.org
Cc: oe-kbuild-all@...ts.linux.dev, andrey.bokhanko@...wei.com,
Dmitry Skorodumov <skorodumov.dmitry@...wei.com>,
Andrew Lunn <andrew+netdev@...n.ch>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>
Subject: Re: [PATCH net-next 7/8] ipvlan: Support IPv6 for learnable l2-bridge
Hi Dmitry,
kernel test robot noticed the following build warnings:
[auto build test WARNING on net-next/main]
url: https://github.com/intel-lab-lkp/linux/commits/Dmitry-Skorodumov/ipvlan-Implement-learnable-L2-bridge/20251021-224923
base: net-next/main
patch link: https://lore.kernel.org/r/20251021144410.257905-8-skorodumov.dmitry%40huawei.com
patch subject: [PATCH net-next 7/8] ipvlan: Support IPv6 for learnable l2-bridge
config: sparc-randconfig-r132-20251023 (https://download.01.org/0day-ci/archive/20251024/202510241011.2cTY5v7o-lkp@intel.com/config)
compiler: sparc-linux-gcc (GCC) 12.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251024/202510241011.2cTY5v7o-lkp@intel.com/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@...el.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202510241011.2cTY5v7o-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
drivers/net/ipvlan/ipvlan_core.c:55:36: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected unsigned int [usertype] a @@ got restricted __be32 const [usertype] s_addr @@
drivers/net/ipvlan/ipvlan_core.c:55:36: sparse: expected unsigned int [usertype] a
drivers/net/ipvlan/ipvlan_core.c:55:36: sparse: got restricted __be32 const [usertype] s_addr
>> drivers/net/ipvlan/ipvlan_core.c:760:22: sparse: sparse: cast from restricted __be16
>> drivers/net/ipvlan/ipvlan_core.c:760:22: sparse: sparse: incorrect type in initializer (different base types) @@ expected int ndsize @@ got restricted __be16 [usertype] @@
drivers/net/ipvlan/ipvlan_core.c:760:22: sparse: expected int ndsize
drivers/net/ipvlan/ipvlan_core.c:760:22: sparse: got restricted __be16 [usertype]
drivers/net/ipvlan/ipvlan_core.c:819:18: sparse: sparse: cast from restricted __be16
>> drivers/net/ipvlan/ipvlan_core.c:819:16: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] ndsize @@ got restricted __be16 [usertype] @@
drivers/net/ipvlan/ipvlan_core.c:819:16: sparse: expected unsigned short [usertype] ndsize
drivers/net/ipvlan/ipvlan_core.c:819:16: sparse: got restricted __be16 [usertype]
vim +760 drivers/net/ipvlan/ipvlan_core.c
753
754 static u8 *ipvlan_search_icmp6_ll_addr(struct sk_buff *skb, u8 icmp_option)
755 {
756 /* skb is ensured to pullable for all ipv6 payload_len by caller */
757 struct ipv6hdr *ip6h = ipv6_hdr(skb);
758 struct icmp6hdr *icmph = (struct icmp6hdr *)(ip6h + 1);
759 int curr_off = sizeof(*icmph);
> 760 int ndsize = htons(ip6h->payload_len);
761
762 if (icmph->icmp6_type != NDISC_ROUTER_SOLICITATION)
763 curr_off += sizeof(struct in6_addr);
764
765 while ((curr_off + 2) < ndsize) {
766 u8 *data = (u8 *)icmph + curr_off;
767 u32 opt_len = data[1] << 3;
768
769 if (unlikely(opt_len == 0))
770 return NULL;
771
772 if (data[0] != icmp_option) {
773 curr_off += opt_len;
774 continue;
775 }
776
777 if (unlikely(opt_len < ETH_ALEN + 2))
778 return NULL;
779
780 if (unlikely(curr_off + opt_len > ndsize))
781 return NULL;
782
783 return data + 2;
784 }
785
786 return NULL;
787 }
788
789 static void ipvlan_snat_patch_tx_ipv6(struct ipvl_dev *ipvlan,
790 struct sk_buff *skb)
791 {
792 struct ipv6hdr *ip6h;
793 struct icmp6hdr *icmph;
794 u8 icmp_option;
795 u8 *lladdr;
796 u16 ndsize;
797
798 if (unlikely(!pskb_may_pull(skb, sizeof(*ip6h))))
799 return;
800
801 if (ipv6_hdr(skb)->nexthdr != NEXTHDR_ICMP)
802 return;
803
804 if (unlikely(!pskb_may_pull(skb, sizeof(*ip6h) + sizeof(*icmph))))
805 return;
806
807 ip6h = ipv6_hdr(skb);
808 icmph = (struct icmp6hdr *)(ip6h + 1);
809
810 /* Patch Source-LL for solicitation, Target-LL for advertisement */
811 if (icmph->icmp6_type == NDISC_NEIGHBOUR_SOLICITATION ||
812 icmph->icmp6_type == NDISC_ROUTER_SOLICITATION)
813 icmp_option = ND_OPT_SOURCE_LL_ADDR;
814 else if (icmph->icmp6_type == NDISC_NEIGHBOUR_ADVERTISEMENT)
815 icmp_option = ND_OPT_TARGET_LL_ADDR;
816 else
817 return;
818
> 819 ndsize = htons(ip6h->payload_len);
820 if (unlikely(!pskb_may_pull(skb, sizeof(*ip6h) + ndsize)))
821 return;
822
823 lladdr = ipvlan_search_icmp6_ll_addr(skb, icmp_option);
824 if (!lladdr)
825 return;
826
827 ether_addr_copy(lladdr, ipvlan->phy_dev->dev_addr);
828
829 ip6h = ipv6_hdr(skb);
830 icmph = (struct icmp6hdr *)(ip6h + 1);
831 icmph->icmp6_cksum = 0;
832 icmph->icmp6_cksum = csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr,
833 ndsize,
834 IPPROTO_ICMPV6,
835 csum_partial(icmph,
836 ndsize,
837 0));
838 skb->ip_summed = CHECKSUM_COMPLETE;
839 }
840 #else
841 static void ipvlan_snat_patch_tx_ipv6(struct ipvl_dev *ipvlan,
842 struct sk_buff *skb)
843 {
844 }
845 #endif
846
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Powered by blists - more mailing lists