summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorFlavio Leitner <fleitner@redhat.com>2010-02-02 07:32:29 -0800
committerDavid S. Miller <davem@davemloft.net>2010-02-02 07:32:29 -0800
commitc85bb41e93184bf5494dde6d8fe5a81b564c84c8 (patch)
tree2a5daec2aecc3fb3eedfba3f63a2156f38575b2d /include
parent8b64056dacf6ec81986d63dff96fca039fe95f6e (diff)
downloadlwn-c85bb41e93184bf5494dde6d8fe5a81b564c84c8.tar.gz
lwn-c85bb41e93184bf5494dde6d8fe5a81b564c84c8.zip
igmp: fix ip_mc_sf_allow race [v5]
Almost all igmp functions accessing inet->mc_list are protected by rtnl_lock(), but there is one exception which is ip_mc_sf_allow(), so there is a chance of either ip_mc_drop_socket or ip_mc_leave_group remove an entry while ip_mc_sf_allow is running causing a crash. Signed-off-by: Flavio Leitner <fleitner@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/linux/igmp.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/igmp.h b/include/linux/igmp.h
index 724c27e5d173..93fc2449af10 100644
--- a/include/linux/igmp.h
+++ b/include/linux/igmp.h
@@ -153,6 +153,7 @@ extern int sysctl_igmp_max_msf;
struct ip_sf_socklist {
unsigned int sl_max;
unsigned int sl_count;
+ struct rcu_head rcu;
__be32 sl_addr[0];
};
@@ -170,6 +171,7 @@ struct ip_mc_socklist {
struct ip_mreqn multi;
unsigned int sfmode; /* MCAST_{INCLUDE,EXCLUDE} */
struct ip_sf_socklist *sflist;
+ struct rcu_head rcu;
};
struct ip_sf_list {