mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
	akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
	Sarah Sharp <sarah.a.sharp@linux.intel.com>
Subject: [038/107] xhci: Reject double add of active endpoints.
Date: Thu, 07 Jul 2011 17:16:10 -0700	[thread overview]
Message-ID: <20110708001656.414151586@clark.kroah.org> (raw)
In-Reply-To: <20110708001740.GA14031@kroah.com>

2.6.39-stable review patch.  If anyone has any objections, please let us know.

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

From: Sarah Sharp <sarah.a.sharp@linux.intel.com>

commit fa75ac379e63c2864e9049b5e8615e40f65c1e70 upstream.

While trying to switch a UAS device from the BOT configuration to the UAS
configuration via the bConfigurationValue file, Tanya ran into an issue in
the USB core.  usb_disable_device() sets entries in udev->ep_out and
udev->ep_out to NULL, but doesn't call into the xHCI bandwidth management
functions to remove the BOT configuration endpoints from the xHCI host's
internal structures.

The USB core would then attempt to add endpoints for the UAS
configuration, and some of the endpoints had the same address as endpoints
in the BOT configuration.  The xHCI driver blindly added the endpoints
again, but the xHCI host controller rejected the Configure Endpoint
command because active endpoints were added without being dropped.

Make the xHCI driver reject calls to xhci_add_endpoint() that attempt to
add active endpoints without first calling xhci_drop_endpoint().

This should be backported to kernels as old as 2.6.31.

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Reported-by: Tanya Brokhman <tlinder@codeaurora.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/usb/host/xhci.c |   22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -1396,6 +1396,7 @@ int xhci_add_endpoint(struct usb_hcd *hc
 	u32 added_ctxs;
 	unsigned int last_ctx;
 	u32 new_add_flags, new_drop_flags, new_slot_info;
+	struct xhci_virt_device *virt_dev;
 	int ret = 0;
 
 	ret = xhci_check_args(hcd, udev, ep, 1, true, __func__);
@@ -1418,11 +1419,25 @@ int xhci_add_endpoint(struct usb_hcd *hc
 		return 0;
 	}
 
-	in_ctx = xhci->devs[udev->slot_id]->in_ctx;
-	out_ctx = xhci->devs[udev->slot_id]->out_ctx;
+	virt_dev = xhci->devs[udev->slot_id];
+	in_ctx = virt_dev->in_ctx;
+	out_ctx = virt_dev->out_ctx;
 	ctrl_ctx = xhci_get_input_control_ctx(xhci, in_ctx);
 	ep_index = xhci_get_endpoint_index(&ep->desc);
 	ep_ctx = xhci_get_ep_ctx(xhci, out_ctx, ep_index);
+
+	/* If this endpoint is already in use, and the upper layers are trying
+	 * to add it again without dropping it, reject the addition.
+	 */
+	if (virt_dev->eps[ep_index].ring &&
+			!(le32_to_cpu(ctrl_ctx->drop_flags) &
+				xhci_get_endpoint_flag(&ep->desc))) {
+		xhci_warn(xhci, "Trying to add endpoint 0x%x "
+				"without dropping it.\n",
+				(unsigned int) ep->desc.bEndpointAddress);
+		return -EINVAL;
+	}
+
 	/* If the HCD has already noted the endpoint is enabled,
 	 * ignore this request.
 	 */
@@ -1437,8 +1452,7 @@ int xhci_add_endpoint(struct usb_hcd *hc
 	 * process context, not interrupt context (or so documenation
 	 * for usb_set_interface() and usb_set_configuration() claim).
 	 */
-	if (xhci_endpoint_init(xhci, xhci->devs[udev->slot_id],
-				udev, ep, GFP_NOIO) < 0) {
+	if (xhci_endpoint_init(xhci, virt_dev, udev, ep, GFP_NOIO) < 0) {
 		dev_dbg(&udev->dev, "%s - could not initialize ep %#x\n",
 				__func__, ep->desc.bEndpointAddress);
 		return -ENOMEM;



  parent reply	other threads:[~2011-07-08  5:02 UTC|newest]

Thread overview: 117+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-08  0:17 [000/107] 2.6.39.3 review Greg KH
2011-07-08  0:15 ` [001/107] netfilter: ipset: Use proper timeout value to jiffies conversion Greg KH
2011-07-08  0:15 ` [002/107] net: fix ETHTOOL_SFEATURES compatibility with old ethtool_ops.set_flags Greg KH
2011-07-08  0:15 ` [003/107] netfilter: ipset: remove unused variable from type_pf_tdel() Greg KH
2011-07-08  0:15 ` [004/107] netfilter: ipset: fix ip_set_flush return code Greg KH
2011-07-08  0:15 ` [005/107] bug.h: Add WARN_RATELIMIT Greg KH
2011-07-08  0:15 ` [006/107] net: filter: Use WARN_RATELIMIT Greg KH
2011-07-08  0:15 ` [007/107] bug.h: Fix build with CONFIG_PRINTK disabled Greg KH
2011-07-08  0:15 ` [008/107] bug.h: Move ratelimit warn interfaces to ratelimit.h Greg KH
2011-07-08  0:15 ` [009/107] IPVS: bug in ip_vs_ftp, same list heaad used in all netns Greg KH
2011-07-08  0:15 ` [010/107] inetpeer: fix race in unused_list manipulations Greg KH
2011-07-08  0:15 ` [011/107] bridge: provide a cow_metrics method for fake_ops Greg KH
2011-07-08  0:15 ` [012/107] af_packet: prevent information leak Greg KH
2011-07-08  0:15 ` [013/107] inet_diag: fix inet_diag_bc_audit() Greg KH
2011-07-08  0:15 ` [014/107] net/ipv4: Check for mistakenly passed in non-IPv4 address Greg KH
2011-07-08  0:15 ` [015/107] ipv6/udp: Use the correct variable to determine non-blocking condition Greg KH
2011-07-08  0:15 ` [016/107] udp/recvmsg: Clear MSG_TRUNC flag when starting over for a new packet Greg KH
2011-07-08  0:15 ` [017/107] ksm: fix NULL pointer dereference in scan_get_next_rmap_item() Greg KH
2011-07-08  0:15 ` [018/107] drivers/tty/serial/pch_uart.c: dont oops if dmi_get_system_info returns NULL Greg KH
2011-07-08  0:15 ` [019/107] migrate: dont account swapcache as shmem Greg KH
2011-07-08  0:15 ` [020/107] hwmon: (ibmaem) Initialize sysfs attributes Greg KH
2011-07-08  0:15 ` [021/107] hwmon: (s3c) " Greg KH
2011-07-08  0:15 ` [022/107] hwmon: (ibmpex) " Greg KH
2011-07-08  0:15 ` [023/107] Revert "drm/i915: Enable GMBUS for post-gen2 chipsets" Greg KH
2011-07-08  0:15 ` [024/107] drm/radeon/kms/atom: fix duallink on some early DCE3.2 cards Greg KH
2011-07-08  0:15 ` [025/107] drm/radeon/kms: Fix chremap setup on RV770 CE Greg KH
2011-07-08  0:15 ` [026/107] drm/i915: Fix gen6 (SNB) missed BLT ring interrupts Greg KH
2011-07-08  6:13   ` Keith Packard
2011-07-08 14:45     ` Greg KH
2011-07-08  0:15 ` [027/107] drm: populate irq_by_busid-member for pci Greg KH
2011-07-08  0:16 ` [028/107] xen: support CONFIG_MAXSMP Greg KH
2011-07-08  0:16 ` [029/107] xen: partially revert "xen: set max_pfn_mapped to the last pfn mapped" Greg KH
2011-07-08  0:16 ` [030/107] xen/pci: Use the INT_SRC_OVR IRQ (instead of GSI) to preset the ACPI SCI IRQ Greg KH
2011-07-08  0:16 ` [031/107] xen/mmu: Fix for linker errors when CONFIG_SMP is not defined Greg KH
2011-07-08  0:16 ` [032/107] xen/pci: Move check for acpi_sci_override_gsi to xen_setup_acpi_sci Greg KH
2011-07-08  0:16 ` [033/107] clocksource: Make watchdog robust vs. interruption Greg KH
2011-07-08  0:16 ` [034/107] ARM: SAMSUNG: serial: Fix on handling of one clock source for UART Greg KH
2011-07-08  0:16 ` [035/107] TTY: ldisc, do not close until there are readers Greg KH
2011-07-08  0:16 ` [036/107] Connector: Set the CN_NETLINK_USERS correctly Greg KH
2011-07-08  0:16 ` [037/107] Connector: Correctly set the error code in case of success when dispatching receive callbacks Greg KH
2011-07-08  0:16 ` Greg KH [this message]
2011-07-08  0:16 ` [039/107] xhci: Add reset on resume quirk for asrock p67 host Greg KH
2011-07-08  0:16 ` [040/107] xhci: Always set urb->status to zero for isoc endpoints Greg KH
2011-07-08  0:16 ` [041/107] USB: Free bandwidth when usb_disable_device is called Greg KH
2011-07-08  0:16 ` [042/107] USB: Add new FT232H chip to drivers/usb/serial/ftdi_sio.c Greg KH
2011-07-08  0:16 ` [043/107] mm/memory-failure.c: fix page isolated count mismatch Greg KH
2011-07-08  0:16 ` [044/107] PM: Free memory bitmaps if opening /dev/snapshot fails Greg KH
2011-07-08  0:16 ` [045/107] ath5k: fix memory leak when fewer than N_PD_CURVES are in use Greg KH
2011-07-08  0:16 ` [046/107] ath5k: Disable fast channel switching by default Greg KH
2011-07-08  0:16 ` [047/107] pxa168_eth: fix race in transmit path Greg KH
2011-07-08  6:20   ` Sachin Sanap
2011-07-08 14:43     ` Greg KH
2011-07-08  0:16 ` [048/107] ath9k: Fix suspend/resume when no interface is UP Greg KH
2011-07-08  0:16 ` [049/107] x86, suspend: Restore MISC_ENABLE MSR in realmode wakeup Greg KH
2011-07-08  0:16 ` [050/107] oprofile, x86: Fix race in nmi handler while starting counters Greg KH
2011-07-08  0:16 ` [051/107] mmc: tmio: fix regression in TMIO_MMC_WRPROTECT_DISABLE handling Greg KH
2011-07-08  0:16 ` [052/107] mmc: Add PCI fixup quirks for Ricoh 1180:e823 reader Greg KH
2011-07-08  0:16 ` [053/107] mm: fix negative commitlimit when gigantic hugepages are allocated Greg KH
2011-07-08  0:16 ` [054/107] block: add REQ_SECURE to REQ_COMMON_MASK Greg KH
2011-07-08  0:16 ` [055/107] NFS41: do not update isize if inode needs layoutcommit Greg KH
2011-07-08  0:16 ` [056/107] mm, hotplug: fix error handling in mem_online_node() Greg KH
2011-07-08  0:16 ` [057/107] ALSA: HDA: Remove quirk for an HP device Greg KH
2011-07-08  0:16 ` [058/107] ALSA: HDA: Add a new Conexant codec ID (506c) Greg KH
2011-07-08  0:16 ` [059/107] [media] rc: fix ghost keypresses with certain hw Greg KH
2011-07-08  0:16 ` [060/107] [media] lirc_zilog: fix spinning rx thread Greg KH
2011-07-08  0:16 ` [061/107] [media] keymaps: fix table for pinnacle pctv hd devices Greg KH
2011-07-08  0:16 ` [062/107] [media] uvcvideo: Remove buffers from the queues when freeing Greg KH
2011-07-08  0:16 ` [063/107] [media] ite-cir: 8709 needs to use pnp resource 2 Greg KH
2011-07-08  0:16 ` [064/107] watchdog: mtx1-wdt: request gpio before using it Greg KH
2011-07-08  0:16 ` [065/107] nfsd: v4 support requires CRYPTO Greg KH
2011-07-08  0:16 ` [066/107] nfsd: fix dependency of nfsd on auth_rpcgss Greg KH
2011-07-08  0:16 ` [067/107] nfsd: link returns nfserr_delay when breaking lease Greg KH
2011-07-08  0:16 ` [068/107] nfsd4: fix break_lease flags on nfsd open Greg KH
2011-07-08  0:16 ` [069/107] NFSv4.1: allow nfs_fhget to succeed with mounted on fileid Greg KH
2011-07-08  0:16 ` [070/107] NFSv4.1: allow zero fh array in filelayout decode layout Greg KH
2011-07-08  0:16 ` [071/107] NFSv4: Fix a readdir regression Greg KH
2011-07-08  0:16 ` [072/107] Input: properly assign return value of clamp() macro Greg KH
2011-07-08  0:16 ` [073/107] debugobjects: Fix boot crash when kmemleak and debugobjects enabled Greg KH
2011-07-08  0:16 ` [074/107] cfq-iosched: fix locking around ioc->ioc_data assignment Greg KH
2011-07-08  0:16 ` [075/107] cfq-iosched: fix a rcu warning Greg KH
2011-07-08  0:16 ` [076/107] cfq-iosched: make code consistent Greg KH
2011-07-08  0:16 ` [077/107] block: use the passed in @bdev when claiming if partno is zero Greg KH
2011-07-08  0:16 ` [078/107] PCI / PM: Block races between runtime PM and system sleep Greg KH
2011-07-08  0:16 ` [079/107] PM: Rename dev_pm_info.in_suspend to is_prepared Greg KH
2011-07-08  0:16 ` [080/107] PM: Fix async resume following suspend failure Greg KH
2011-07-08  0:16 ` [081/107] PM / Hibernate: Fix free_unnecessary_pages() Greg KH
2011-07-08  0:16 ` [082/107] KEYS: Fix error handling in construct_key_and_link() Greg KH
2011-07-08  0:16 ` [083/107] i2c-taos-evm: Fix log messages Greg KH
2011-07-08  0:16 ` [084/107] i2c/pca954x: Initialize the mux to disconnected state Greg KH
2011-07-08  0:16 ` [085/107] hfsplus: add missing call to bio_put() Greg KH
2011-07-08  0:16 ` [086/107] md: avoid endless recovery loop when waiting for fail device to complete Greg KH
2011-07-08  0:16 ` [087/107] SUNRPC: Ensure the RPC client only quits on fatal signals Greg KH
2011-07-08  0:17 ` [088/107] ASoC: pxa-ssp: Correct check for stream presence Greg KH
2011-07-08  0:17 ` [089/107] drivers/base/platform.c: dont mark platform_device_register_resndata() as __init_or_module Greg KH
2011-07-08  6:47   ` Uwe Kleine-König
2011-07-08 14:43     ` Greg KH
2011-07-08  0:17 ` [090/107] fs: fix lock initialization Greg KH
2011-07-08  0:17 ` [091/107] FS-Cache: Add a helper to bulk uncache pages on an inode Greg KH
2011-07-08  0:17 ` [092/107] 6pack,mkiss: fix lock inconsistency Greg KH
2011-07-08  0:17 ` [093/107] iwlagn: fix change_interface for P2P types Greg KH
2011-07-08  0:17 ` [094/107] drivers/misc/lkdtm.c: fix race when crashpoint is hit multiple times before checking count Greg KH
2011-07-08  0:17 ` [095/107] taskstats: dont allow duplicate entries in listener mode Greg KH
2011-07-08  0:17 ` [096/107] Fix CPU spinlock lockups on secondary CPU bringup Greg KH
2011-07-08  0:17 ` [097/107] NLM: Dont hang forever on NLM unlock requests Greg KH
2011-07-08  0:17 ` [098/107] USB: dont let errors prevent system sleep Greg KH
2011-07-08  0:17 ` [099/107] USB: dont let the hub driver " Greg KH
2011-07-08  0:17 ` [100/107] USB: fix regression occurring during device removal Greg KH
2011-07-08  0:17 ` [101/107] ipv4: fix multicast losses Greg KH
2011-07-08  0:17 ` [102/107] netfilter: Fix ip_route_me_harder triggering ip_rt_bug Greg KH
2011-07-08  0:17 ` [103/107] vlan: fix typo in vlan_dev_hard_start_xmit() Greg KH
2011-07-08  0:17 ` [104/107] xfrm: Fix off by one in the replay advance functions Greg KH
2011-07-08  0:17 ` [105/107] Revert "KVM: Save/restore state of assigned PCI device" Greg KH
2011-07-08  0:17 ` [106/107] KVM: Fix register corruption in pvclock_scale_delta Greg KH
2011-07-08  0:17 ` [107/107] IPVS netns exit causes crash in conntrack Greg KH
2011-07-08  2:06 ` [000/107] 2.6.39.3 review Stefan Lippers-Hollmann
2011-07-08  2:49   ` Greg KH
2011-07-08  2:53   ` Greg KH

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=20110708001656.414151586@clark.kroah.org \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sarah.a.sharp@linux.intel.com \
    --cc=stable-review@kernel.org \
    --cc=stable@kernel.org \
    --cc=torvalds@linux-foundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®