All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Oliver Neukum <oneukum@suse.de>
Subject: [ 13/40] USB: cdc-wdm: fix race between interrupt handler and tasklet
Date: Tue, 24 Sep 2013 17:11:45 -0700	[thread overview]
Message-ID: <20130925001043.392073231@linuxfoundation.org> (raw)
In-Reply-To: <20130925001041.939335518@linuxfoundation.org>

3.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Oliver Neukum <oneukum@suse.de>

commit 6dd433e6cf2475ce8abec1b467720858c24450eb upstream.

Both could want to submit the same URB. Some checks of the flag
intended to prevent that were missing.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/usb/class/cdc-wdm.c |   13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

--- a/drivers/usb/class/cdc-wdm.c
+++ b/drivers/usb/class/cdc-wdm.c
@@ -233,6 +233,7 @@ skip_error:
 static void wdm_int_callback(struct urb *urb)
 {
 	int rv = 0;
+	int responding;
 	int status = urb->status;
 	struct wdm_device *desc;
 	struct usb_cdc_notification *dr;
@@ -286,8 +287,8 @@ static void wdm_int_callback(struct urb
 
 	spin_lock(&desc->iuspin);
 	clear_bit(WDM_READ, &desc->flags);
-	set_bit(WDM_RESPONDING, &desc->flags);
-	if (!test_bit(WDM_DISCONNECTING, &desc->flags)
+	responding = test_and_set_bit(WDM_RESPONDING, &desc->flags);
+	if (!responding && !test_bit(WDM_DISCONNECTING, &desc->flags)
 		&& !test_bit(WDM_SUSPENDING, &desc->flags)) {
 		rv = usb_submit_urb(desc->response, GFP_ATOMIC);
 		dev_dbg(&desc->intf->dev, "%s: usb_submit_urb %d",
@@ -687,16 +688,20 @@ static void wdm_rxwork(struct work_struc
 {
 	struct wdm_device *desc = container_of(work, struct wdm_device, rxwork);
 	unsigned long flags;
-	int rv;
+	int rv = 0;
+	int responding;
 
 	spin_lock_irqsave(&desc->iuspin, flags);
 	if (test_bit(WDM_DISCONNECTING, &desc->flags)) {
 		spin_unlock_irqrestore(&desc->iuspin, flags);
 	} else {
+		responding = test_and_set_bit(WDM_RESPONDING, &desc->flags);
 		spin_unlock_irqrestore(&desc->iuspin, flags);
-		rv = usb_submit_urb(desc->response, GFP_KERNEL);
+		if (!responding)
+			rv = usb_submit_urb(desc->response, GFP_KERNEL);
 		if (rv < 0 && rv != -EPERM) {
 			spin_lock_irqsave(&desc->iuspin, flags);
+			clear_bit(WDM_RESPONDING, &desc->flags);
 			if (!test_bit(WDM_DISCONNECTING, &desc->flags))
 				schedule_work(&desc->rxwork);
 			spin_unlock_irqrestore(&desc->iuspin, flags);



  parent reply	other threads:[~2013-09-25  1:32 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-25  0:11 [ 00/40] 3.4.63-stable review Greg Kroah-Hartman
2013-09-25  0:11 ` [ 01/40] SCSI: sd: Fix potential out-of-bounds access Greg Kroah-Hartman
2013-09-25  0:11 ` [ 02/40] crypto: api - Fix race condition in larval lookup Greg Kroah-Hartman
2013-09-25  0:11   ` Greg Kroah-Hartman
2013-09-25  0:11 ` [ 03/40] powerpc: Handle unaligned ldbrx/stdbrx Greg Kroah-Hartman
2013-09-25  0:11 ` [ 04/40] xen-gnt: prevent adding duplicate gnt callbacks Greg Kroah-Hartman
2013-09-25  0:11 ` [ 05/40] ARM: PCI: versatile: Fix SMAP register offsets Greg Kroah-Hartman
2013-09-25  0:11 ` [ 06/40] xhci-plat: Dont enable legacy PCI interrupts Greg Kroah-Hartman
2013-09-25  0:11 ` [ 07/40] usb: xhci: Disable runtime PM suspend for quirky controllers Greg Kroah-Hartman
2013-09-25  0:11 ` [ 08/40] cifs: ensure that srv_mutex is held when dealing with ssocket pointer Greg Kroah-Hartman
2013-09-25  0:11 ` [ 09/40] staging: comedi: dt282x: dt282x_ai_insn_read() always fails Greg Kroah-Hartman
2013-09-25  0:11 ` [ 10/40] USB: mos7720: use GFP_ATOMIC under spinlock Greg Kroah-Hartman
2013-09-25  0:11 ` [ 11/40] USB: mos7720: fix big-endian control requests Greg Kroah-Hartman
2013-09-25  0:11 ` [ 12/40] usb: ehci-mxc: check for pdata before dereferencing Greg Kroah-Hartman
2013-09-25  0:11 ` Greg Kroah-Hartman [this message]
2013-09-25  0:11 ` [ 14/40] usb: config->desc.bLength may not exceed amount of data returned by the device Greg Kroah-Hartman
2013-09-25  0:11 ` [ 15/40] rculist: list_first_or_null_rcu() should use list_entry_rcu() Greg Kroah-Hartman
2013-09-25  0:11 ` [ 16/40] ASoC: wm8960: Fix PLL register writes Greg Kroah-Hartman
2013-09-25  0:11 ` [ 17/40] ALSA: hda - Add Toshiba Satellite C870 to MSI blacklist Greg Kroah-Hartman
2013-09-25  0:11 ` [ 18/40] brcmsmac: Fix WARNING caused by lack of calls to dma_mapping_error() Greg Kroah-Hartman
2013-09-25  0:11 ` [ 19/40] ath9k: always clear ps filter bit on new assoc Greg Kroah-Hartman
2013-09-25  0:11 ` [ 20/40] ath9k: fix rx descriptor related race condition Greg Kroah-Hartman
2013-09-25  0:11 ` [ 21/40] ath9k: avoid accessing MRC registers on single-chain devices Greg Kroah-Hartman
2013-09-25  0:11 ` [ 22/40] HID: pantherlord: validate output report details Greg Kroah-Hartman
2013-09-25  0:11 ` [ 23/40] HID: Fix Speedlink VAD Cezanne support for some devices Greg Kroah-Hartman
2013-09-25  0:11 ` [ 24/40] HID: validate HID report id size Greg Kroah-Hartman
2013-09-25  0:11 ` [ 25/40] HID: ntrig: validate feature report details Greg Kroah-Hartman
2013-09-25  0:11 ` [ 26/40] HID: battery: dont do DMA from stack Greg Kroah-Hartman
2013-09-25  0:11 ` [ 27/40] HID: check for NULL field when setting values Greg Kroah-Hartman
2013-09-25  0:12 ` [ 28/40] HID: usbhid: quirk for N-Trig DuoSense Touch Screen Greg Kroah-Hartman
2013-09-25  0:12 ` [ 29/40] media: v4l2: added missing mutex.h include to v4l2-ctrls.h Greg Kroah-Hartman
2013-09-25  0:12 ` [ 30/40] MIPS: ath79: Fix ar933x watchdog clock Greg Kroah-Hartman
2013-09-25  0:12 ` [ 31/40] intel-iommu: Fix leaks in pagetable freeing Greg Kroah-Hartman
2013-09-25  0:12 ` [ 32/40] ocfs2: fix the end cluster offset of FIEMAP Greg Kroah-Hartman
2013-09-25  0:12 ` [ 33/40] memcg: fix multiple large threshold notifications Greg Kroah-Hartman
2013-09-25  0:12 ` [ 34/40] mm/huge_memory.c: fix potential NULL pointer dereference Greg Kroah-Hartman
2013-09-25  0:12 ` [ 35/40] isofs: Refuse RW mount of the filesystem instead of making it RO Greg Kroah-Hartman
2013-09-25  0:12 ` [ 36/40] drm/edid: add quirk for Medion MD30217PG Greg Kroah-Hartman
2013-09-25  0:12 ` [ 37/40] mmc: tmio_mmc_dma: fix PIO fallback on SDHI Greg Kroah-Hartman
2013-09-25  0:12 ` [ 38/40] of: Fix missing memory initialization on FDT unflattening Greg Kroah-Hartman
2013-09-25  0:12 ` [ 39/40] fuse: postpone end_page_writeback() in fuse_writepage_locked() Greg Kroah-Hartman
2013-09-25  0:12 ` [ 40/40] fuse: invalidate inode attributes on xattr modification Greg Kroah-Hartman
2013-09-25  4:35 ` [ 00/40] 3.4.63-stable review Guenter Roeck
2013-09-26  1:09   ` Greg Kroah-Hartman
2013-09-26  2:24 ` Shuah Khan

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=20130925001043.392073231@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oneukum@suse.de \
    --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.