Re: [PATCH net v1] igmp: use copy-on-write RCU updates in ip_mc_source()

From: kernel test robot

Date: Mon Nov 02 2026 - 16:45:44 EST


Hi Binbin,

kernel test robot noticed the following build errors:

[auto build test ERROR on net/main]

url: https://github.com/intel-lab-lkp/linux/commits/Binbin-Deng/igmp-use-copy-on-write-RCU-updates-in-ip_mc_source/20261102-175312
base: net/main
patch link: https://lore.kernel.org/r/20261102095312.47767-1-18983559317%40163.com
patch subject: [PATCH net v1] igmp: use copy-on-write RCU updates in ip_mc_source()
config: hexagon-defconfig (https://download.01.org/0day-ci/archive/20261103/202611030103.U23Q9Kyn-lkp@xxxxxxxxx/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project 65303e81f481bbfe386b8596423f94c43198ba94)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261103/202611030103.U23Q9Kyn-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/202611030103.U23Q9Kyn-lkp@xxxxxxxxx/

All errors (new ones prefixed by >>):

net/ipv4/igmp.c:2084:6: warning: variable 'changerec' set but not used [-Wunused-but-set-variable]
2084 | int changerec = 0;
| ^
>> net/ipv4/igmp.c:2646:1: error: function definition is not allowed here
2646 | {
| ^
net/ipv4/igmp.c:2737:1: error: function definition is not allowed here
2737 | {
| ^
net/ipv4/igmp.c:2802:1: error: function definition is not allowed here
2802 | {
| ^
net/ipv4/igmp.c:2851:1: error: function definition is not allowed here
2851 | {
| ^
net/ipv4/igmp.c:2898:1: error: function definition is not allowed here
2898 | {
| ^
net/ipv4/igmp.c:2924:1: error: function definition is not allowed here
2924 | {
| ^
net/ipv4/igmp.c:2977:1: error: function definition is not allowed here
2977 | {
| ^
net/ipv4/igmp.c:2999:1: error: function definition is not allowed here
2999 | {
| ^
net/ipv4/igmp.c:3018:1: error: function definition is not allowed here
3018 | {
| ^
net/ipv4/igmp.c:3028:1: error: function definition is not allowed here
3028 | {
| ^
net/ipv4/igmp.c:3034:1: error: function definition is not allowed here
3034 | {
| ^
net/ipv4/igmp.c:3046:1: error: function definition is not allowed here
3046 | {
| ^
net/ipv4/igmp.c:3055:1: error: function definition is not allowed here
3055 | {
| ^
>> net/ipv4/igmp.c:3094:11: error: use of undeclared identifier 'igmp_mc_seq_start'; did you mean 'igmp_mc_seq_ops'?
3094 | .start = igmp_mc_seq_start,
| ^~~~~~~~~~~~~~~~~
| igmp_mc_seq_ops
net/ipv4/igmp.c:3093:36: note: 'igmp_mc_seq_ops' declared here
3093 | static const struct seq_operations igmp_mc_seq_ops = {
| ^
>> net/ipv4/igmp.c:3095:10: error: use of undeclared identifier 'igmp_mc_seq_next'; did you mean 'igmp_mc_seq_ops'?
3095 | .next = igmp_mc_seq_next,
| ^~~~~~~~~~~~~~~~
| igmp_mc_seq_ops
net/ipv4/igmp.c:3093:36: note: 'igmp_mc_seq_ops' declared here
3093 | static const struct seq_operations igmp_mc_seq_ops = {
| ^
>> net/ipv4/igmp.c:3096:10: error: use of undeclared identifier 'igmp_mc_seq_stop'; did you mean 'igmp_mc_seq_ops'?
3096 | .stop = igmp_mc_seq_stop,
| ^~~~~~~~~~~~~~~~
| igmp_mc_seq_ops
net/ipv4/igmp.c:3093:36: note: 'igmp_mc_seq_ops' declared here
3093 | static const struct seq_operations igmp_mc_seq_ops = {
| ^
>> net/ipv4/igmp.c:3097:10: error: use of undeclared identifier 'igmp_mc_seq_show'; did you mean 'igmp_mc_seq_ops'?
3097 | .show = igmp_mc_seq_show,
| ^~~~~~~~~~~~~~~~
| igmp_mc_seq_ops
net/ipv4/igmp.c:3093:36: note: 'igmp_mc_seq_ops' declared here
3093 | static const struct seq_operations igmp_mc_seq_ops = {
| ^
>> net/ipv4/igmp.c:3094:11: error: initializing 'void *(*)(struct seq_file *, loff_t *)' (aka 'void *(*)(struct seq_file *, long long *)') with an expression of incompatible type 'const struct seq_operations'
3094 | .start = igmp_mc_seq_start,
| ^~~~~~~~~~~~~~~~~
>> net/ipv4/igmp.c:3095:10: error: initializing 'void *(*)(struct seq_file *, void *, loff_t *)' (aka 'void *(*)(struct seq_file *, void *, long long *)') with an expression of incompatible type 'const struct seq_operations'
3095 | .next = igmp_mc_seq_next,
| ^~~~~~~~~~~~~~~~
fatal error: too many errors emitted, stopping now [-ferror-limit=]
1 warning and 20 errors generated.


vim +2646 net/ipv4/igmp.c

^1da177e4c3f41 Linus Torvalds 2005-04-16 2644
^1da177e4c3f41 Linus Torvalds 2005-04-16 2645 int ip_mc_msfilter(struct sock *sk, struct ip_msfilter *msf, int ifindex)
^1da177e4c3f41 Linus Torvalds 2005-04-16 @2646 {
9951f036fe8a4e David L Stevens 2005-07-08 2647 int err = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2648 struct ip_mreqn imr;
63007727e0bb09 Al Viro 2006-09-27 2649 __be32 addr = msf->imsf_multiaddr;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2650 struct ip_mc_socklist *pmc;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2651 struct in_device *in_dev;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2652 struct inet_sock *inet = inet_sk(sk);
^1da177e4c3f41 Linus Torvalds 2005-04-16 2653 struct ip_sf_socklist *newpsl, *psl;
877acedc0d3ea0 Daniel Lezcano 2008-08-13 2654 struct net *net = sock_net(sk);
9951f036fe8a4e David L Stevens 2005-07-08 2655 int leavegroup = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2656
f97c1e0c6ebdb6 Joe Perches 2007-12-16 2657 if (!ipv4_is_multicast(addr))
^1da177e4c3f41 Linus Torvalds 2005-04-16 2658 return -EINVAL;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2659 if (msf->imsf_fmode != MCAST_INCLUDE &&
^1da177e4c3f41 Linus Torvalds 2005-04-16 2660 msf->imsf_fmode != MCAST_EXCLUDE)
^1da177e4c3f41 Linus Torvalds 2005-04-16 2661 return -EINVAL;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2662
54ff9ef36bdf84 Marcelo Ricardo Leitner 2015-03-18 2663 ASSERT_RTNL();
^1da177e4c3f41 Linus Torvalds 2005-04-16 2664
^1da177e4c3f41 Linus Torvalds 2005-04-16 2665 imr.imr_multiaddr.s_addr = msf->imsf_multiaddr;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2666 imr.imr_address.s_addr = msf->imsf_interface;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2667 imr.imr_ifindex = ifindex;
877acedc0d3ea0 Daniel Lezcano 2008-08-13 2668 in_dev = ip_mc_find_dev(net, &imr);
^1da177e4c3f41 Linus Torvalds 2005-04-16 2669
^1da177e4c3f41 Linus Torvalds 2005-04-16 2670 if (!in_dev) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 2671 err = -ENODEV;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2672 goto done;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2673 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 2674
9951f036fe8a4e David L Stevens 2005-07-08 2675 /* special case - (INCLUDE, empty) == LEAVE_GROUP */
9951f036fe8a4e David L Stevens 2005-07-08 2676 if (msf->imsf_fmode == MCAST_INCLUDE && msf->imsf_numsrc == 0) {
9951f036fe8a4e David L Stevens 2005-07-08 2677 leavegroup = 1;
9951f036fe8a4e David L Stevens 2005-07-08 2678 goto done;
9951f036fe8a4e David L Stevens 2005-07-08 2679 }
9951f036fe8a4e David L Stevens 2005-07-08 2680
1d7138de878d1d Eric Dumazet 2010-11-12 2681 for_each_pmc_rtnl(inet, pmc) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 2682 if (pmc->multi.imr_multiaddr.s_addr == msf->imsf_multiaddr &&
^1da177e4c3f41 Linus Torvalds 2005-04-16 2683 pmc->multi.imr_ifindex == imr.imr_ifindex)
^1da177e4c3f41 Linus Torvalds 2005-04-16 2684 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2685 }
917f2f105ea4bb David L Stevens 2005-07-08 2686 if (!pmc) { /* must have a prior join */
917f2f105ea4bb David L Stevens 2005-07-08 2687 err = -EINVAL;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2688 goto done;
917f2f105ea4bb David L Stevens 2005-07-08 2689 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 2690 if (msf->imsf_numsrc) {
e6a1f7e0b0fe59 Gustavo A. R. Silva 2021-08-04 2691 newpsl = sock_kmalloc(sk, struct_size(newpsl, sl_addr,
e6a1f7e0b0fe59 Gustavo A. R. Silva 2021-08-04 2692 msf->imsf_numsrc),
8b3a70058bfe71 Kris Katterjohn 2006-01-11 2693 GFP_KERNEL);
^1da177e4c3f41 Linus Torvalds 2005-04-16 2694 if (!newpsl) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 2695 err = -ENOBUFS;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2696 goto done;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2697 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 2698 newpsl->sl_max = newpsl->sl_count = msf->imsf_numsrc;
2d3e5caf96b944 Gustavo A. R. Silva 2021-07-31 2699 memcpy(newpsl->sl_addr, msf->imsf_slist_flex,
2d3e5caf96b944 Gustavo A. R. Silva 2021-07-31 2700 flex_array_size(msf, imsf_slist_flex, msf->imsf_numsrc));
^1da177e4c3f41 Linus Torvalds 2005-04-16 2701 err = ip_mc_add_src(in_dev, &msf->imsf_multiaddr,
^1da177e4c3f41 Linus Torvalds 2005-04-16 2702 msf->imsf_fmode, newpsl->sl_count, newpsl->sl_addr, 0);
^1da177e4c3f41 Linus Torvalds 2005-04-16 2703 if (err) {
e6a1f7e0b0fe59 Gustavo A. R. Silva 2021-08-04 2704 sock_kfree_s(sk, newpsl,
e6a1f7e0b0fe59 Gustavo A. R. Silva 2021-08-04 2705 struct_size(newpsl, sl_addr,
e6a1f7e0b0fe59 Gustavo A. R. Silva 2021-08-04 2706 newpsl->sl_max));
^1da177e4c3f41 Linus Torvalds 2005-04-16 2707 goto done;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2708 }
8713dbf05754aa Yan Zheng 2005-10-28 2709 } else {
^1da177e4c3f41 Linus Torvalds 2005-04-16 2710 newpsl = NULL;
8713dbf05754aa Yan Zheng 2005-10-28 2711 (void) ip_mc_add_src(in_dev, &msf->imsf_multiaddr,
8713dbf05754aa Yan Zheng 2005-10-28 2712 msf->imsf_fmode, 0, NULL, 0);
8713dbf05754aa Yan Zheng 2005-10-28 2713 }
1d7138de878d1d Eric Dumazet 2010-11-12 2714 psl = rtnl_dereference(pmc->sflist);
^1da177e4c3f41 Linus Torvalds 2005-04-16 2715 if (psl) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 2716 (void) ip_mc_del_src(in_dev, &msf->imsf_multiaddr, pmc->sfmode,
^1da177e4c3f41 Linus Torvalds 2005-04-16 2717 psl->sl_count, psl->sl_addr, 0);
c85bb41e93184b Flavio Leitner 2010-02-02 2718 /* decrease mem now to avoid the memleak warning */
e6a1f7e0b0fe59 Gustavo A. R. Silva 2021-08-04 2719 atomic_sub(struct_size(psl, sl_addr, psl->sl_max),
e6a1f7e0b0fe59 Gustavo A. R. Silva 2021-08-04 2720 &sk->sk_omem_alloc);
dba5bdd57bea58 Eric Dumazet 2022-04-29 2721 } else {
^1da177e4c3f41 Linus Torvalds 2005-04-16 2722 (void) ip_mc_del_src(in_dev, &msf->imsf_multiaddr, pmc->sfmode,
^1da177e4c3f41 Linus Torvalds 2005-04-16 2723 0, NULL, 0);
dba5bdd57bea58 Eric Dumazet 2022-04-29 2724 }
cf778b00e96df6 Eric Dumazet 2012-01-12 2725 rcu_assign_pointer(pmc->sflist, newpsl);
dba5bdd57bea58 Eric Dumazet 2022-04-29 2726 if (psl)
dba5bdd57bea58 Eric Dumazet 2022-04-29 2727 kfree_rcu(psl, rcu);
^1da177e4c3f41 Linus Torvalds 2005-04-16 2728 pmc->sfmode = msf->imsf_fmode;
917f2f105ea4bb David L Stevens 2005-07-08 2729 err = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2730 done:
9951f036fe8a4e David L Stevens 2005-07-08 2731 if (leavegroup)
9951f036fe8a4e David L Stevens 2005-07-08 2732 err = ip_mc_leave_group(sk, &imr);
^1da177e4c3f41 Linus Torvalds 2005-04-16 2733 return err;
^1da177e4c3f41 Linus Torvalds 2005-04-16 2734 }
e12e04f5ab54cd Breno Leitao 2026-09-14 2735

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