[patch V3 01/20] PCI/switchtec: Fix init_completion race condition with poll_wait()
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
- To: LKML <linux-kernel@xxxxxxxxxxxxxxx>
- Subject: [patch V3 01/20] PCI/switchtec: Fix init_completion race condition with poll_wait()
- From: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
- Date: Sat, 21 Mar 2020 12:25:45 +0100
- Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>, Sebastian Siewior <bigeasy@xxxxxxxxxxxxx>, Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>, Joel Fernandes <joel@xxxxxxxxxxxxxxxxx>, Oleg Nesterov <oleg@xxxxxxxxxx>, Davidlohr Bueso <dave@xxxxxxxxxxxx>, Logan Gunthorpe <logang@xxxxxxxxxxxx>, Bjorn Helgaas <bhelgaas@xxxxxxxxxx>, Kurt Schwemmer <kurt.schwemmer@xxxxxxxxxxxxx>, linux-pci@xxxxxxxxxxxxxxx, Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>, Felipe Balbi <balbi@xxxxxxxxxx>, linux-usb@xxxxxxxxxxxxxxx, Kalle Valo <kvalo@xxxxxxxxxxxxxx>, "David S. Miller" <davem@xxxxxxxxxxxxx>, linux-wireless@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx, Darren Hart <dvhart@xxxxxxxxxxxxx>, Andy Shevchenko <andy@xxxxxxxxxxxxx>, platform-driver-x86@xxxxxxxxxxxxxxx, Zhang Rui <rui.zhang@xxxxxxxxx>, "Rafael J. Wysocki" <rafael.j.wysocki@xxxxxxxxx>, linux-pm@xxxxxxxxxxxxxxx, Len Brown <lenb@xxxxxxxxxx>, linux-acpi@xxxxxxxxxxxxxxx, kbuild test robot <lkp@xxxxxxxxx>, Nick Hu <nickhu@xxxxxxxxxxxxx>, Greentime Hu <green.hu@xxxxxxxxx>, Vincent Chen <deanbo422@xxxxxxxxx>, Guo Ren <guoren@xxxxxxxxxx>, linux-csky@xxxxxxxxxxxxxxx, Brian Cain <bcain@xxxxxxxxxxxxxx>, linux-hexagon@xxxxxxxxxxxxxxx, Tony Luck <tony.luck@xxxxxxxxx>, Fenghua Yu <fenghua.yu@xxxxxxxxx>, linux-ia64@xxxxxxxxxxxxxxx, Michal Simek <monstr@xxxxxxxxx>, Michael Ellerman <mpe@xxxxxxxxxxxxxx>, Arnd Bergmann <arnd@xxxxxxxx>, Geoff Levand <geoff@xxxxxxxxxxxxx>, linuxppc-dev@xxxxxxxxxxxxxxxx, "Paul E . McKenney" <paulmck@xxxxxxxxxx>, Jonathan Corbet <corbet@xxxxxxx>, Randy Dunlap <rdunlap@xxxxxxxxxxxxx>, Davidlohr Bueso <dbueso@xxxxxxx>
- References: <20200321112544.878032781@linutronix.de>
- User-agent: quilt/0.65
From: Logan Gunthorpe <logang@xxxxxxxxxxxx>
The call to init_completion() in mrpc_queue_cmd() can theoretically
race with the call to poll_wait() in switchtec_dev_poll().
poll() write()
switchtec_dev_poll() switchtec_dev_write()
poll_wait(&s->comp.wait); mrpc_queue_cmd()
init_completion(&s->comp)
init_waitqueue_head(&s->comp.wait)
To my knowledge, no one has hit this bug.
Fix this by using reinit_completion() instead of init_completion() in
mrpc_queue_cmd().
Fixes: 080b47def5e5 ("MicroSemi Switchtec management interface driver")
Reported-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
Signed-off-by: Logan Gunthorpe <logang@xxxxxxxxxxxx>
Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Acked-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
Cc: Kurt Schwemmer <kurt.schwemmer@xxxxxxxxxxxxx>
Cc: linux-pci@xxxxxxxxxxxxxxx
Link: https://lkml.kernel.org/r/20200313183608.2646-1-logang@xxxxxxxxxxxx
---
drivers/pci/switch/switchtec.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/pci/switch/switchtec.c b/drivers/pci/switch/switchtec.c
index a823b4b8ef8a..81dc7ac01381 100644
--- a/drivers/pci/switch/switchtec.c
+++ b/drivers/pci/switch/switchtec.c
@@ -175,7 +175,7 @@ static int mrpc_queue_cmd(struct switchtec_user *stuser)
kref_get(&stuser->kref);
stuser->read_len = sizeof(stuser->data);
stuser_set_state(stuser, MRPC_QUEUED);
- init_completion(&stuser->comp);
+ reinit_completion(&stuser->comp);
list_add_tail(&stuser->list, &stdev->mrpc_queue);
mrpc_cmd_submit(stdev);
--
2.20.1
[Index of Archives]
[Linux Kernel]
[Sparc Linux]
[DCCP]
[Linux ARM]
[Yosemite News]
[Linux SCSI]
[Linux x86_64]
[Linux for Ham Radio]