All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net] net: bridge: multicast: use rcu to access port list from br_multicast_start_querier
@ 2019-04-11 12:08 ` Nikolay Aleksandrov
  0 siblings, 0 replies; 4+ messages in thread
From: Nikolay Aleksandrov @ 2019-04-11 12:08 UTC (permalink / raw)
  To: netdev; +Cc: herbert, roopa, bridge, Nikolay Aleksandrov

br_multicast_start_querier() walks over the port list but it can be
called from a timer with only multicast_lock held which doesn't protect
the port list, so use RCU to walk over it.

Fixes: c83b8fab06fc ("bridge: Restart queries when last querier expires")
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 net/bridge/br_multicast.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index 02da21d771c9..45e7f4173bba 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -2031,7 +2031,8 @@ static void br_multicast_start_querier(struct net_bridge *br,
 
 	__br_multicast_open(br, query);
 
-	list_for_each_entry(port, &br->port_list, list) {
+	rcu_read_lock();
+	list_for_each_entry_rcu(port, &br->port_list, list) {
 		if (port->state == BR_STATE_DISABLED ||
 		    port->state == BR_STATE_BLOCKING)
 			continue;
@@ -2043,6 +2044,7 @@ static void br_multicast_start_querier(struct net_bridge *br,
 			br_multicast_enable(&port->ip6_own_query);
 #endif
 	}
+	rcu_read_unlock();
 }
 
 int br_multicast_toggle(struct net_bridge *br, unsigned long val)
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Bridge] [PATCH net] net: bridge: multicast: use rcu to access port list from br_multicast_start_querier
@ 2019-04-11 12:08 ` Nikolay Aleksandrov
  0 siblings, 0 replies; 4+ messages in thread
From: Nikolay Aleksandrov @ 2019-04-11 12:08 UTC (permalink / raw)
  To: netdev; +Cc: Nikolay Aleksandrov, roopa, bridge, herbert

br_multicast_start_querier() walks over the port list but it can be
called from a timer with only multicast_lock held which doesn't protect
the port list, so use RCU to walk over it.

Fixes: c83b8fab06fc ("bridge: Restart queries when last querier expires")
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
---
 net/bridge/br_multicast.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index 02da21d771c9..45e7f4173bba 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -2031,7 +2031,8 @@ static void br_multicast_start_querier(struct net_bridge *br,
 
 	__br_multicast_open(br, query);
 
-	list_for_each_entry(port, &br->port_list, list) {
+	rcu_read_lock();
+	list_for_each_entry_rcu(port, &br->port_list, list) {
 		if (port->state == BR_STATE_DISABLED ||
 		    port->state == BR_STATE_BLOCKING)
 			continue;
@@ -2043,6 +2044,7 @@ static void br_multicast_start_querier(struct net_bridge *br,
 			br_multicast_enable(&port->ip6_own_query);
 #endif
 	}
+	rcu_read_unlock();
 }
 
 int br_multicast_toggle(struct net_bridge *br, unsigned long val)
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net] net: bridge: multicast: use rcu to access port list from br_multicast_start_querier
  2019-04-11 12:08 ` [Bridge] " Nikolay Aleksandrov
@ 2019-04-11 18:16   ` David Miller
  -1 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2019-04-11 18:16 UTC (permalink / raw)
  To: nikolay; +Cc: netdev, herbert, roopa, bridge

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Date: Thu, 11 Apr 2019 15:08:25 +0300

> br_multicast_start_querier() walks over the port list but it can be
> called from a timer with only multicast_lock held which doesn't protect
> the port list, so use RCU to walk over it.
> 
> Fixes: c83b8fab06fc ("bridge: Restart queries when last querier expires")
> Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

Applied and queued up for -stable, thanks.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Bridge] [PATCH net] net: bridge: multicast: use rcu to access port list from br_multicast_start_querier
@ 2019-04-11 18:16   ` David Miller
  0 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2019-04-11 18:16 UTC (permalink / raw)
  To: nikolay; +Cc: netdev, roopa, bridge, herbert

From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Date: Thu, 11 Apr 2019 15:08:25 +0300

> br_multicast_start_querier() walks over the port list but it can be
> called from a timer with only multicast_lock held which doesn't protect
> the port list, so use RCU to walk over it.
> 
> Fixes: c83b8fab06fc ("bridge: Restart queries when last querier expires")
> Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

Applied and queued up for -stable, thanks.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-04-11 18:16 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-11 12:08 [PATCH net] net: bridge: multicast: use rcu to access port list from br_multicast_start_querier Nikolay Aleksandrov
2019-04-11 12:08 ` [Bridge] " Nikolay Aleksandrov
2019-04-11 18:16 ` David Miller
2019-04-11 18:16   ` [Bridge] " David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.