lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 16 Feb 2016 16:59:42 +0100
From:	Arnd Bergmann <arnd@...db.de>
To:	"David S. Miller" <davem@...emloft.net>,
	Alexey Kuznetsov <kuznet@....inr.ac.ru>,
	James Morris <jmorris@...ei.org>,
	Hideaki YOSHIFUJI <yoshfuji@...ux-ipv6.org>,
	Patrick McHardy <kaber@...sh.net>
Cc:	linux-arm-kernel@...ts.infradead.org,
	Arnd Bergmann <arnd@...db.de>,
	Nikolay Borisov <n.borisov@...eground.com>,
	netdev@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: [PATCH] net: igmp: use IS_ENABLED(CONFIG_IP_MULTICAST) instead of ifdef

A recent change to use correct network namespace in net/ipv4/igmp.c
caused a couple of harmless build warnings when CONFIG_MULTICAST is
disabled:

net/ipv4/igmp.c: In function 'igmp_group_added':
net/ipv4/igmp.c:1227:14: error: unused variable 'net' [-Werror=unused-variable]
net/ipv4/igmp.c: In function 'ip_mc_inc_group':
net/ipv4/igmp.c:1319:14: error: unused variable 'net' [-Werror=unused-variable]
net/ipv4/igmp.c: In function 'ip_mc_init_dev':
net/ipv4/igmp.c:1646:14: error: unused variable 'net' [-Werror=unused-variable]
net/ipv4/igmp.c: In function 'ip_mc_up':
net/ipv4/igmp.c:1665:14: error: unused variable 'net' [-Werror=unused-variable]

This reworks the entire file to change each instance if '#ifdef
CONFIG_IP_MULTICAST' to 'if (IS_ENABLED(CONFIG_IP_MULTICAST)', which
should avoid these problems forever, and makes the whole file more
readable.

Build-tested only.

Signed-off-by: Arnd Bergmann <arnd@...db.de>
Fixes: 87a8a2ae65b7 ("igmp: Namespaceify igmp_llm_reports sysctl knob")
---
 net/ipv4/igmp.c | 141 ++++++++++++++++++++++++--------------------------------
 1 file changed, 59 insertions(+), 82 deletions(-)

diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
index 7c95335bf85e..bb485b3e2baa 100644
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
@@ -107,7 +107,6 @@
 #include <linux/seq_file.h>
 #endif
 
-#ifdef CONFIG_IP_MULTICAST
 /* Parameter names and values are taken from igmp-v2-06 draft */
 
 #define IGMP_V1_ROUTER_PRESENT_TIMEOUT		(400*HZ)
@@ -166,7 +165,6 @@ static void igmpv3_del_delrec(struct in_device *in_dev, __be32 multiaddr);
 static void igmpv3_clear_delrec(struct in_device *in_dev);
 static int sf_setstate(struct ip_mc_list *pmc);
 static void sf_markstate(struct ip_mc_list *pmc);
-#endif
 static void ip_mc_clear_src(struct ip_mc_list *pmc);
 static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
 			 int sfcount, __be32 *psfsrc, int delta);
@@ -189,8 +187,6 @@ static void ip_ma_put(struct ip_mc_list *im)
 	     pmc != NULL;					\
 	     pmc = rtnl_dereference(pmc->next_rcu))
 
-#ifdef CONFIG_IP_MULTICAST
-
 /*
  *	Timer management
  */
@@ -763,7 +759,9 @@ static void igmp_ifc_timer_expire(unsigned long data)
 static void igmp_ifc_event(struct in_device *in_dev)
 {
 	struct net *net = dev_net(in_dev->dev);
-	if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev))
+
+	if (!IS_ENABLED(CONFIG_IP_MULTICAST) ||
+	    IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev))
 		return;
 	in_dev->mr_ifc_count = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
 	igmp_ifc_start_timer(in_dev, 1);
@@ -1044,9 +1042,6 @@ drop:
 	return 0;
 }
 
-#endif
-
-
 /*
  *	Add a filter to a device
  */
@@ -1080,7 +1075,6 @@ static void ip_mc_filter_del(struct in_device *in_dev, __be32 addr)
 		dev_mc_del(dev, buf);
 }
 
-#ifdef CONFIG_IP_MULTICAST
 /*
  * deleted ip_mc_list manipulation
  */
@@ -1181,22 +1175,20 @@ static void igmpv3_clear_delrec(struct in_device *in_dev)
 	}
 	rcu_read_unlock();
 }
-#endif
 
 static void igmp_group_dropped(struct ip_mc_list *im)
 {
 	struct in_device *in_dev = im->interface;
-#ifdef CONFIG_IP_MULTICAST
 	struct net *net = dev_net(in_dev->dev);
 	int reporter;
-#endif
 
 	if (im->loaded) {
 		im->loaded = 0;
 		ip_mc_filter_del(in_dev, im->multiaddr);
 	}
 
-#ifdef CONFIG_IP_MULTICAST
+	if (!IS_ENABLED(CONFIG_IP_MULTICAST))
+		return;
 	if (im->multiaddr == IGMP_ALL_HOSTS)
 		return;
 	if (ipv4_is_local_multicast(im->multiaddr) && !net->ipv4.sysctl_igmp_llm_reports)
@@ -1218,7 +1210,6 @@ static void igmp_group_dropped(struct ip_mc_list *im)
 
 		igmp_ifc_event(in_dev);
 	}
-#endif
 }
 
 static void igmp_group_added(struct ip_mc_list *im)
@@ -1231,7 +1222,9 @@ static void igmp_group_added(struct ip_mc_list *im)
 		ip_mc_filter_add(in_dev, im->multiaddr);
 	}
 
-#ifdef CONFIG_IP_MULTICAST
+	if (!IS_ENABLED(CONFIG_IP_MULTICAST))
+		return;
+
 	if (im->multiaddr == IGMP_ALL_HOSTS)
 		return;
 	if (ipv4_is_local_multicast(im->multiaddr) && !net->ipv4.sysctl_igmp_llm_reports)
@@ -1249,7 +1242,6 @@ static void igmp_group_added(struct ip_mc_list *im)
 
 	im->crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
 	igmp_ifc_event(in_dev);
-#endif
 }
 
 
@@ -1341,10 +1333,10 @@ void ip_mc_inc_group(struct in_device *in_dev, __be32 addr)
 	im->sfcount[MCAST_EXCLUDE] = 1;
 	atomic_set(&im->refcnt, 1);
 	spin_lock_init(&im->lock);
-#ifdef CONFIG_IP_MULTICAST
-	setup_timer(&im->timer, igmp_timer_expire, (unsigned long)im);
-	im->unsolicit_count = net->ipv4.sysctl_igmp_qrv;
-#endif
+	if (IS_ENABLED(CONFIG_IP_MULTICAST)) {
+		setup_timer(&im->timer, igmp_timer_expire, (unsigned long)im);
+		im->unsolicit_count = net->ipv4.sysctl_igmp_qrv;
+	}
 
 	im->next_rcu = in_dev->mc_list;
 	in_dev->mc_count++;
@@ -1352,9 +1344,9 @@ void ip_mc_inc_group(struct in_device *in_dev, __be32 addr)
 
 	ip_mc_hash_add(in_dev, im);
 
-#ifdef CONFIG_IP_MULTICAST
-	igmpv3_del_delrec(in_dev, im->multiaddr);
-#endif
+	if (IS_ENABLED(CONFIG_IP_MULTICAST))
+		igmpv3_del_delrec(in_dev, im->multiaddr);
+
 	igmp_group_added(im);
 	if (!in_dev->dead)
 		ip_rt_multicast_event(in_dev);
@@ -1533,11 +1525,13 @@ EXPORT_SYMBOL(ip_mc_check_igmp);
  */
 static void ip_mc_rejoin_groups(struct in_device *in_dev)
 {
-#ifdef CONFIG_IP_MULTICAST
 	struct ip_mc_list *im;
 	int type;
 	struct net *net = dev_net(in_dev->dev);
 
+	if (!IS_ENABLED(CONFIG_IP_MULTICAST))
+		return;
+
 	ASSERT_RTNL();
 
 	for_each_pmc_rtnl(in_dev, im) {
@@ -1558,7 +1552,6 @@ static void ip_mc_rejoin_groups(struct in_device *in_dev)
 			type = IGMPV3_HOST_MEMBERSHIP_REPORT;
 		igmp_send_report(in_dev, im, type);
 	}
-#endif
 }
 
 /*
@@ -1628,15 +1621,15 @@ void ip_mc_down(struct in_device *in_dev)
 	for_each_pmc_rtnl(in_dev, pmc)
 		igmp_group_dropped(pmc);
 
-#ifdef CONFIG_IP_MULTICAST
-	in_dev->mr_ifc_count = 0;
-	if (del_timer(&in_dev->mr_ifc_timer))
-		__in_dev_put(in_dev);
-	in_dev->mr_gq_running = 0;
-	if (del_timer(&in_dev->mr_gq_timer))
-		__in_dev_put(in_dev);
-	igmpv3_clear_delrec(in_dev);
-#endif
+	if (IS_ENABLED(CONFIG_IP_MULTICAST)) {
+		in_dev->mr_ifc_count = 0;
+		if (del_timer(&in_dev->mr_ifc_timer))
+			__in_dev_put(in_dev);
+		in_dev->mr_gq_running = 0;
+		if (del_timer(&in_dev->mr_gq_timer))
+			__in_dev_put(in_dev);
+		igmpv3_clear_delrec(in_dev);
+	}
 
 	ip_mc_dec_group(in_dev, IGMP_ALL_HOSTS);
 }
@@ -1646,13 +1639,13 @@ void ip_mc_init_dev(struct in_device *in_dev)
 	struct net *net = dev_net(in_dev->dev);
 	ASSERT_RTNL();
 
-#ifdef CONFIG_IP_MULTICAST
-	setup_timer(&in_dev->mr_gq_timer, igmp_gq_timer_expire,
-			(unsigned long)in_dev);
-	setup_timer(&in_dev->mr_ifc_timer, igmp_ifc_timer_expire,
-			(unsigned long)in_dev);
-	in_dev->mr_qrv = net->ipv4.sysctl_igmp_qrv;
-#endif
+	if (IS_ENABLED(CONFIG_IP_MULTICAST)) {
+		setup_timer(&in_dev->mr_gq_timer, igmp_gq_timer_expire,
+				(unsigned long)in_dev);
+		setup_timer(&in_dev->mr_ifc_timer, igmp_ifc_timer_expire,
+				(unsigned long)in_dev);
+		in_dev->mr_qrv = net->ipv4.sysctl_igmp_qrv;
+	}
 
 	spin_lock_init(&in_dev->mc_tomb_lock);
 }
@@ -1666,9 +1659,9 @@ void ip_mc_up(struct in_device *in_dev)
 
 	ASSERT_RTNL();
 
-#ifdef CONFIG_IP_MULTICAST
-	in_dev->mr_qrv = net->ipv4.sysctl_igmp_qrv;
-#endif
+	if (IS_ENABLED(CONFIG_IP_MULTICAST))
+		in_dev->mr_qrv = net->ipv4.sysctl_igmp_qrv;
+
 	ip_mc_inc_group(in_dev, IGMP_ALL_HOSTS);
 
 	for_each_pmc_rtnl(in_dev, pmc)
@@ -1755,34 +1748,27 @@ static int ip_mc_del1_src(struct ip_mc_list *pmc, int sfmode,
 		ip_rt_multicast_event(pmc->interface);
 	}
 	if (!psf->sf_count[MCAST_INCLUDE] && !psf->sf_count[MCAST_EXCLUDE]) {
-#ifdef CONFIG_IP_MULTICAST
 		struct in_device *in_dev = pmc->interface;
 		struct net *net = dev_net(in_dev->dev);
-#endif
 
 		/* no more filters for this source */
 		if (psf_prev)
 			psf_prev->sf_next = psf->sf_next;
 		else
 			pmc->sources = psf->sf_next;
-#ifdef CONFIG_IP_MULTICAST
-		if (psf->sf_oldin &&
+		if (IS_ENABLED(CONFIG_IP_MULTICAST) && psf->sf_oldin &&
 		    !IGMP_V1_SEEN(in_dev) && !IGMP_V2_SEEN(in_dev)) {
 			psf->sf_crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
 			psf->sf_next = pmc->tomb;
 			pmc->tomb = psf;
 			rv = 1;
-		} else
-#endif
+		} else {
 			kfree(psf);
+		}
 	}
 	return rv;
 }
 
-#ifndef CONFIG_IP_MULTICAST
-#define igmp_ifc_event(x)	do { } while (0)
-#endif
-
 static int ip_mc_del_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
 			 int sfcount, __be32 *psfsrc, int delta)
 {
@@ -1804,9 +1790,9 @@ static int ip_mc_del_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
 	}
 	spin_lock_bh(&pmc->lock);
 	rcu_read_unlock();
-#ifdef CONFIG_IP_MULTICAST
-	sf_markstate(pmc);
-#endif
+	if (IS_ENABLED(CONFIG_IP_MULTICAST))
+		sf_markstate(pmc);
+
 	if (!delta) {
 		err = -EINVAL;
 		if (!pmc->sfcount[sfmode])
@@ -1821,17 +1807,15 @@ static int ip_mc_del_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
 		if (!err && rv < 0)
 			err = rv;
 	}
-	if (pmc->sfmode == MCAST_EXCLUDE &&
+	if (IS_ENABLED(CONFIG_IP_MULTICAST) &&
+	    pmc->sfmode == MCAST_EXCLUDE &&
 	    pmc->sfcount[MCAST_EXCLUDE] == 0 &&
 	    pmc->sfcount[MCAST_INCLUDE]) {
-#ifdef CONFIG_IP_MULTICAST
 		struct ip_sf_list *psf;
 		struct net *net = dev_net(in_dev->dev);
-#endif
 
 		/* filter mode change */
 		pmc->sfmode = MCAST_INCLUDE;
-#ifdef CONFIG_IP_MULTICAST
 		pmc->crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
 		in_dev->mr_ifc_count = pmc->crcount;
 		for (psf = pmc->sources; psf; psf = psf->sf_next)
@@ -1839,7 +1823,6 @@ static int ip_mc_del_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
 		igmp_ifc_event(pmc->interface);
 	} else if (sf_setstate(pmc) || changerec) {
 		igmp_ifc_event(pmc->interface);
-#endif
 	}
 out_unlock:
 	spin_unlock_bh(&pmc->lock);
@@ -1877,12 +1860,14 @@ static int ip_mc_add1_src(struct ip_mc_list *pmc, int sfmode,
 	return 0;
 }
 
-#ifdef CONFIG_IP_MULTICAST
 static void sf_markstate(struct ip_mc_list *pmc)
 {
 	struct ip_sf_list *psf;
 	int mca_xcount = pmc->sfcount[MCAST_EXCLUDE];
 
+	if (!IS_ENABLED(CONFIG_IP_MULTICAST))
+		return;
+
 	for (psf = pmc->sources; psf; psf = psf->sf_next)
 		if (pmc->sfcount[MCAST_EXCLUDE]) {
 			psf->sf_oldin = mca_xcount ==
@@ -1950,7 +1935,6 @@ static int sf_setstate(struct ip_mc_list *pmc)
 	}
 	return rv;
 }
-#endif
 
 /*
  * Add multicast source filter list to the interface list
@@ -1977,9 +1961,7 @@ static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
 	spin_lock_bh(&pmc->lock);
 	rcu_read_unlock();
 
-#ifdef CONFIG_IP_MULTICAST
 	sf_markstate(pmc);
-#endif
 	isexclude = pmc->sfmode == MCAST_EXCLUDE;
 	if (!delta)
 		pmc->sfcount[sfmode]++;
@@ -1997,28 +1979,26 @@ static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
 		for (j = 0; j < i; j++)
 			(void) ip_mc_del1_src(pmc, sfmode, &psfsrc[j]);
 	} else if (isexclude != (pmc->sfcount[MCAST_EXCLUDE] != 0)) {
-#ifdef CONFIG_IP_MULTICAST
 		struct ip_sf_list *psf;
 		struct net *net = dev_net(pmc->interface->dev);
 		in_dev = pmc->interface;
-#endif
 
 		/* filter mode change */
 		if (pmc->sfcount[MCAST_EXCLUDE])
 			pmc->sfmode = MCAST_EXCLUDE;
 		else if (pmc->sfcount[MCAST_INCLUDE])
 			pmc->sfmode = MCAST_INCLUDE;
-#ifdef CONFIG_IP_MULTICAST
 		/* else no filters; keep old mode for reports */
-
-		pmc->crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
-		in_dev->mr_ifc_count = pmc->crcount;
-		for (psf = pmc->sources; psf; psf = psf->sf_next)
-			psf->sf_crcount = 0;
-		igmp_ifc_event(in_dev);
-	} else if (sf_setstate(pmc)) {
+		if (IS_ENABLED(CONFIG_IP_MULTICAST)) {
+			pmc->crcount = in_dev->mr_qrv ?:
+				       net->ipv4.sysctl_igmp_qrv;
+			in_dev->mr_ifc_count = pmc->crcount;
+			for (psf = pmc->sources; psf; psf = psf->sf_next)
+				psf->sf_crcount = 0;
+			igmp_ifc_event(in_dev);
+		}
+	} else if (IS_ENABLED(CONFIG_IP_MULTICAST) && sf_setstate(pmc)) {
 		igmp_ifc_event(in_dev);
-#endif
 	}
 	spin_unlock_bh(&pmc->lock);
 	return err;
@@ -2711,13 +2691,10 @@ static int igmp_mc_seq_show(struct seq_file *seq, void *v)
 		char   *querier;
 		long delta;
 
-#ifdef CONFIG_IP_MULTICAST
-		querier = IGMP_V1_SEEN(state->in_dev) ? "V1" :
+		querier = !IS_ENABLED(CONFIG_IP_MULTICAST) ? "NONE" :
+			  IGMP_V1_SEEN(state->in_dev) ? "V1" :
 			  IGMP_V2_SEEN(state->in_dev) ? "V2" :
 			  "V3";
-#else
-		querier = "NONE";
-#endif
 
 		if (rcu_access_pointer(state->in_dev->mc_list) == im) {
 			seq_printf(seq, "%d\t%-10s: %5d %7s\n",
-- 
2.7.0

Powered by blists - more mailing lists