From 1e904efe9dd1ab98a7984493e64dae99bca3a1fb Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Wed, 24 Mar 2004 23:06:22 -0800 Subject: [PATCH] [IGMP]: Do nothing in ip_mc_down() if ip_mc_up() was not called previously. --- include/linux/inetdevice.h | 2 ++ net/ipv4/igmp.c | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h index c23cd45da7eb7..2620f45ca1f67 100644 --- a/include/linux/inetdevice.h +++ b/include/linux/inetdevice.h @@ -36,6 +36,8 @@ struct in_device rwlock_t lock; int dead; struct in_ifaddr *ifa_list; /* IP ifaddr chain */ + int mc_initted; + struct ip_mc_list *mc_list; /* IP multicast filter chain */ rwlock_t mc_lock; /* for mc_tomb */ struct ip_mc_list *mc_tomb; diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index 99e67b2cf9f78..a96d403c7ec78 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c @@ -1217,6 +1217,9 @@ void ip_mc_down(struct in_device *in_dev) ASSERT_RTNL(); + if (!in_dev->mc_initted) + return; + #ifdef CONFIG_IP_MULTICAST in_dev->mr_ifc_count = 0; if (del_timer(&in_dev->mr_ifc_timer)) @@ -1262,6 +1265,8 @@ void ip_mc_up(struct in_device *in_dev) for (i=in_dev->mc_list; i; i=i->next) igmp_group_added(i); + + in_dev->mc_initted = 1; } /* -- 2.53.0