From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Joe Lawrence <joe.lawrence@stratus.com>,
Jiri Pirko <jiri@resnulli.us>,
"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 3.17 03/25] team: avoid race condition in scheduling delayed work
Date: Mon, 13 Oct 2014 04:24:56 +0200 [thread overview]
Message-ID: <20141013022454.429780782@linuxfoundation.org> (raw)
In-Reply-To: <20141013022454.289398272@linuxfoundation.org>
3.17-stable review patch. If anyone has any objections, please let me know.
------------------
From: Joe Lawrence <Joe.Lawrence@stratus.com>
[ Upstream commit 47549650abd13d873fd2e5fc218db19e21031074 ]
When team_notify_peers and team_mcast_rejoin are called, they both reset
their respective .count_pending atomic variable. Then when the actual
worker function is executed, the variable is atomically decremented.
This pattern introduces a potential race condition where the
.count_pending rolls over and the worker function keeps rescheduling
until .count_pending decrements to zero again:
THREAD 1 THREAD 2
======== ========
team_notify_peers(teamX)
atomic_set count_pending = 1
schedule_delayed_work
team_notify_peers(teamX)
atomic_set count_pending = 1
team_notify_peers_work
atomic_dec_and_test
count_pending = 0
(return)
schedule_delayed_work
team_notify_peers_work
atomic_dec_and_test
count_pending = -1
schedule_delayed_work
(repeat until count_pending = 0)
Instead of assigning a new value to .count_pending, use atomic_add to
tack-on the additional desired worker function invocations.
Signed-off-by: Joe Lawrence <joe.lawrence@stratus.com>
Acked-by: Jiri Pirko <jiri@resnulli.us>
Fixes: fc423ff00df3a19554414ee ("team: add peer notification")
Fixes: 492b200efdd20b8fcfdac87 ("team: add support for sending multicast rejoins")
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/team/team.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -647,7 +647,7 @@ static void team_notify_peers(struct tea
{
if (!team->notify_peers.count || !netif_running(team->dev))
return;
- atomic_set(&team->notify_peers.count_pending, team->notify_peers.count);
+ atomic_add(team->notify_peers.count, &team->notify_peers.count_pending);
schedule_delayed_work(&team->notify_peers.dw, 0);
}
@@ -687,7 +687,7 @@ static void team_mcast_rejoin(struct tea
{
if (!team->mcast_rejoin.count || !netif_running(team->dev))
return;
- atomic_set(&team->mcast_rejoin.count_pending, team->mcast_rejoin.count);
+ atomic_add(team->mcast_rejoin.count, &team->mcast_rejoin.count_pending);
schedule_delayed_work(&team->mcast_rejoin.dw, 0);
}
next prev parent reply other threads:[~2014-10-13 2:34 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-13 2:24 [PATCH 3.17 00/25] 3.17.1-stable review Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.17 01/25] ip6_gre: fix flowi6_proto value in xmit path Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.17 02/25] net: systemport: fix bcm_sysport_insert_tsb() Greg Kroah-Hartman
2014-10-13 2:24 ` Greg Kroah-Hartman [this message]
2014-10-13 2:24 ` [PATCH 3.17 04/25] hyperv: Fix a bug in netvsc_send() Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.17 05/25] sctp: handle association restarts when the socket is closed Greg Kroah-Hartman
2014-10-13 2:24 ` [PATCH 3.17 06/25] 3c59x: fix bad split of cpu_to_le32(pci_map_single()) Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 07/25] net_sched: copy exts->type in tcf_exts_change() Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 08/25] irq_work: Introduce arch_irq_work_has_interrupt() Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 09/25] irq_work: Force raised irq work to run on irq work interrupt Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 10/25] x86: Tell irq work about self IPI support Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 11/25] arm: " Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 12/25] PCI: pciehp: Fix wait time in timeout message Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 13/25] uas: Add a quirk for rejecting ATA_12 and ATA_16 commands Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 14/25] uas: Add no-report-opcodes quirk Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 15/25] uas: Add US_FL_NO_ATA_1X quirk for Seagate (0bc2:ab20) drives Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 16/25] uas: Add another ASM1051 usb-id to the uas blacklist Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 17/25] usb: gadget: f_fs: signedness bug in __ffs_func_bind_do_descs() Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 18/25] Revert "usb: gadget: composite: dequeue cdev->req before free it in composite_dev_cleanup" Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 19/25] USB: serial: cp210x: added Ketra N1 wireless interface support Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 20/25] USB: cp210x: add support for Seluxit USB dongle Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 21/25] usb: musb: dsps: kill OTG timer on suspend Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 22/25] USB: Add device quirk for ASUS T100 Base Station keyboard Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 23/25] crypto: caam - fix addressing of struct member Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 24/25] driver/base/node: remove unnecessary kfree of node struct from unregister_one_node Greg Kroah-Hartman
2014-10-13 2:25 ` [PATCH 3.17 25/25] serial: 8250: Add Quark X1000 to 8250_pci.c Greg Kroah-Hartman
2014-10-13 11:28 ` [PATCH 3.17 00/25] 3.17.1-stable review Henrique de Moraes Holschuh
2014-10-13 13:23 ` Chuck Ebbert
2014-10-14 1:30 ` Greg Kroah-Hartman
2014-11-19 17:22 ` Greg Kroah-Hartman
2014-11-19 19:44 ` Paul E. McKenney
2014-11-19 20:16 ` Greg Kroah-Hartman
2014-11-19 20:35 ` Paul E. McKenney
2014-11-19 20:43 ` Greg Kroah-Hartman
2014-11-19 20:19 ` Holger Hoffstätte
2014-11-20 0:13 ` Frederic Weisbecker
2014-11-20 0:38 ` Greg Kroah-Hartman
2014-10-13 15:25 ` Linus Torvalds
2014-10-14 1:27 ` Greg Kroah-Hartman
2014-10-13 15:19 ` Guenter Roeck
2014-10-14 2:39 ` Greg Kroah-Hartman
2014-10-14 3:26 ` Greg Kroah-Hartman
2014-10-14 10:37 ` Satoru Takeuchi
2014-10-13 15:44 ` Romain Francoise
2014-10-13 15:57 ` Guenter Roeck
2014-10-13 21:03 ` George Spelvin
2014-10-14 1:27 ` Greg KH
2014-10-13 20:35 ` Shuah Khan
2014-10-14 2:40 ` Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20141013022454.429780782@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=davem@davemloft.net \
--cc=jiri@resnulli.us \
--cc=joe.lawrence@stratus.com \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.