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,
Daniel Mack <daniel@caiaq.de>,
Alan Stern <stern@rowland.harvard.edu>
Subject: [patch 17/71] USB: fix LANGID=0 regression
Date: Tue, 28 Jul 2009 16:40:46 -0700 [thread overview]
Message-ID: <20090728234153.843240873@mini.kroah.org> (raw)
In-Reply-To: <20090728234756.GA11917@kroah.com>
[-- Attachment #1: usb-fix-langid-0-regression.patch --]
[-- Type: text/plain, Size: 3406 bytes --]
2.6.30-stable review patch. If anyone has any objections, please let us know.
------------------
From: Daniel Mack <daniel@caiaq.de>
commit 0cce2eda19923e5e5ccc8b042dec5af87b3ffad0 upstream.
commit b7af0bb ("USB: allow malformed LANGID descriptors") broke support
for devices without string descriptor support.
Reporting string descriptors is optional to USB devices, and a device
lets us know it can't deal with strings by responding to the LANGID
request with a STALL token.
The kernel handled that correctly before b7af0bb came in, but failed
hard if the LANGID was reported but broken. More than that, if a device
was not able to provide string descriptors, the LANGID was retrieved
over and over again at each string read request.
This patch changes the behaviour so that
a) the LANGID is only queried once
b) devices which can't handle string requests are not asked again
c) devices with malformed LANGID values have a sane fallback to 0x0409
Signed-off-by: Daniel Mack <daniel@caiaq.de>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/usb/core/message.c | 63 ++++++++++++++++++++++++++++++++-------------
1 file changed, 45 insertions(+), 18 deletions(-)
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -758,6 +758,48 @@ static int usb_string_sub(struct usb_dev
return rc;
}
+static int usb_get_langid(struct usb_device *dev, unsigned char *tbuf)
+{
+ int err;
+
+ if (dev->have_langid)
+ return 0;
+
+ if (dev->string_langid < 0)
+ return -EPIPE;
+
+ err = usb_string_sub(dev, 0, 0, tbuf);
+
+ /* If the string was reported but is malformed, default to english
+ * (0x0409) */
+ if (err == -ENODATA || (err > 0 && err < 4)) {
+ dev->string_langid = 0x0409;
+ dev->have_langid = 1;
+ dev_err(&dev->dev,
+ "string descriptor 0 malformed (err = %d), "
+ "defaulting to 0x%04x\n",
+ err, dev->string_langid);
+ return 0;
+ }
+
+ /* In case of all other errors, we assume the device is not able to
+ * deal with strings at all. Set string_langid to -1 in order to
+ * prevent any string to be retrieved from the device */
+ if (err < 0) {
+ dev_err(&dev->dev, "string descriptor 0 read error: %d\n",
+ err);
+ dev->string_langid = -1;
+ return -EPIPE;
+ }
+
+ /* always use the first langid listed */
+ dev->string_langid = tbuf[2] | (tbuf[3] << 8);
+ dev->have_langid = 1;
+ dev_dbg(&dev->dev, "default language 0x%04x\n",
+ dev->string_langid);
+ return 0;
+}
+
/**
* usb_string - returns ISO 8859-1 version of a string descriptor
* @dev: the device whose string descriptor is being retrieved
@@ -797,24 +839,9 @@ int usb_string(struct usb_device *dev, i
if (!tbuf)
return -ENOMEM;
- /* get langid for strings if it's not yet known */
- if (!dev->have_langid) {
- err = usb_string_sub(dev, 0, 0, tbuf);
- if (err < 0) {
- dev_err(&dev->dev,
- "string descriptor 0 read error: %d\n",
- err);
- } else if (err < 4) {
- dev_err(&dev->dev, "string descriptor 0 too short\n");
- } else {
- dev->string_langid = tbuf[2] | (tbuf[3] << 8);
- /* always use the first langid listed */
- dev_dbg(&dev->dev, "default language 0x%04x\n",
- dev->string_langid);
- }
-
- dev->have_langid = 1;
- }
+ err = usb_get_langid(dev, tbuf);
+ if (err < 0)
+ goto errout;
err = usb_string_sub(dev, dev->string_langid, index, tbuf);
if (err < 0)
next prev parent reply other threads:[~2009-07-28 23:49 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20090728234029.868717854@mini.kroah.org>
2009-07-28 23:47 ` [patch 00/71] [00/@num@] 2.6.30.4-stable review Greg KH
2009-07-28 23:40 ` [patch 01/71] SCSI: zalon: fix oops on attach failure Greg KH
2009-07-28 23:40 ` [patch 02/71] NFSD: Dont hold unrefcounted creds over call to nfsd_setuser() Greg KH
2009-07-28 23:40 ` [patch 03/71] sound: virtuoso: fix Xonar D1/DX silence after resume Greg KH
2009-07-28 23:40 ` [patch 04/71] sound: usb-audio: add workaround for Blue Microphones devices Greg KH
2009-07-28 23:40 ` [patch 05/71] fix RCU-callback-after-kmem_cache_destroy problem in sl[aou]b Greg KH
2009-07-28 23:40 ` [patch 06/71] dsa: fix 88e6xxx statistics counter snapshotting Greg KH
2009-07-28 23:40 ` [patch 07/71] gigaset: accept connection establishment messages in any order Greg KH
2009-07-28 23:40 ` [patch 08/71] cfg80211: fix refcount leak Greg KH
2009-07-28 23:40 ` [patch 09/71] Staging: prevent rtl8187se from crashing dev_ioctl() in SIOCGIWNAME Greg KH
2009-07-28 23:40 ` [patch 10/71] USB: handle zero-length usbfs submissions correctly Greg KH
2009-07-28 23:40 ` [patch 11/71] USB: ti_usb_3410_5052: fix duplicate device ids Greg KH
2009-07-28 23:40 ` [patch 12/71] USB: fix uninitialised variable in ti_do_download Greg KH
2009-07-28 23:40 ` [patch 13/71] USB: fix the clear_tt_buffer interface Greg KH
2009-07-28 23:40 ` [patch 14/71] USB: EHCI: use the new " Greg KH
2009-07-29 13:56 ` Alan Stern
2009-07-29 14:03 ` Greg KH
2009-07-29 14:24 ` Alan Stern
2009-07-29 14:44 ` Greg KH
2009-07-28 23:40 ` [patch 15/71] USB: fix memleak in usbfs Greg KH
2009-07-28 23:40 ` [patch 16/71] USB: RNDIS gadget, fix issues talking from PXA Greg KH
2009-07-28 23:40 ` Greg KH [this message]
2009-07-28 23:40 ` [patch 18/71] USB: EHCI: report actual_length for iso transfers Greg KH
2009-07-28 23:40 ` [patch 19/71] cifs: fix regression with O_EXCL creates and optimize away lookup Greg KH
2009-07-28 23:40 ` [patch 20/71] cifs: free nativeFileSystem field before allocating a new one Greg KH
2009-07-28 23:40 ` [patch 21/71] ALSA: ca0106 - Fix the max capture buffer size Greg KH
2009-07-28 23:40 ` [patch 22/71] ALSA: hda - Fix pin-setup for Sony VAIO with STAC9872 codecs Greg KH
2009-07-28 23:40 ` [patch 23/71] ALSA: hda - Add quirk for Gateway T6834c laptop Greg KH
2009-07-28 23:40 ` [patch 24/71] ALSA: hda - Fix mute control with some ALC262 models Greg KH
2009-07-28 23:40 ` [patch 25/71] HID: hiddev, fix lock imbalance Greg KH
2009-07-28 23:40 ` [patch 26/71] mvsdio: fix handling of partial word at the end of PIO transfer Greg KH
2009-07-28 23:40 ` [patch 27/71] ASoC: Fix register cache initialisation for WM8753 Greg KH
2009-07-28 23:40 ` [patch 28/71] partitions: fix broken uevent_suppress conversion Greg KH
2009-07-28 23:40 ` [patch 29/71] vc: create vcs(a) devices for consoles Greg KH
2009-07-28 23:40 ` [patch 30/71] x86: Fix fixmap ordering Greg KH
2009-07-28 23:41 ` [patch 31/71] x86: Fix fixmap page order for FIX_TEXT_POKE0,1 Greg KH
2009-07-28 23:41 ` [patch 32/71] block: fix sg SG_DXFER_TO_FROM_DEV regression Greg KH
2009-07-28 23:41 ` [patch 33/71] nilfs2: remove unlikely directive causing mis-conversion of error code Greg KH
2009-07-28 23:41 ` [patch 34/71] nilfs2: fix hang problem of log writer which occurs after write failures Greg KH
2009-07-28 23:41 ` [patch 35/71] nilfs2: fix incorrect KERN_CRIT messages in case of " Greg KH
2009-07-28 23:41 ` [patch 36/71] nilfs2: fix disorder in cp count on error during deleting checkpoints Greg KH
2009-07-28 23:41 ` [patch 37/71] sched_rt: Fix overload bug on rt group scheduling Greg KH
2009-07-28 23:41 ` [patch 38/71] tracing/function: Fix the return value of ftrace_trace_onoff_callback() Greg KH
2009-07-28 23:41 ` [patch 39/71] x86/pci: insert ioapic resource before assigning unassigned resources Greg KH
2009-07-28 23:41 ` [patch 40/71] sched: fix nr_uninterruptible accounting of frozen tasks really Greg KH
2009-07-28 23:41 ` [patch 41/71] dm raid1: wake kmirrord when requeueing delayed bios after remote recovery Greg KH
2009-07-28 23:41 ` [patch 42/71] x86: geode: Mark mfgpt irq IRQF_TIMER to prevent resume failure Greg KH
2009-07-28 23:41 ` [patch 43/71] x86: Fix movq immediate operand constraints in uaccess_64.h Greg KH
2009-07-28 23:41 ` [patch 44/71] x86: Fix movq immediate operand constraints in uaccess.h Greg KH
2009-07-28 23:41 ` [patch 45/71] x86: Add quirk for Intel DG45ID board to avoid low memory corruption Greg KH
2009-07-28 23:41 ` [patch 46/71] x86-64: Fix bad_srat() to clear all state Greg KH
2009-07-28 23:41 ` [patch 47/71] parisc: ensure broadcast tlb purge runs single threaded Greg KH
2009-07-28 23:41 ` [patch 48/71] parisc: fix ldcw inline assembler Greg KH
2009-07-28 23:41 ` [patch 49/71] x86, setup (2.6.30-stable) fix 80x34 and 80x60 console modes Greg KH
2009-07-28 23:41 ` [patch 50/71] Staging: rt2870: Add USB ID for Sitecom WL-608 Greg KH
2009-07-28 23:41 ` [patch 51/71] vmscan: do not unconditionally treat zones that fail zone_reclaim() as full Greg KH
2009-07-28 23:41 ` [patch 52/71] x86: dont use access_ok() as a range check in get_user_pages_fast() Greg KH
2009-07-28 23:41 ` [patch 53/71] mm: mark page accessed before we write_end() Greg KH
2009-07-28 23:41 ` [patch 54/71] elf: fix one check-after-use Greg KH
2009-07-28 23:41 ` [patch 55/71] hwmon: (max6650) Fix lock imbalance Greg KH
2009-07-28 23:41 ` [patch 56/71] powerpc/mpic: Fix mapping of "DCR" based MPIC variants Greg KH
2009-07-28 23:41 ` [patch 57/71] netfilter: nf_log: fix sleeping function called from invalid context Greg KH
2009-07-28 23:41 ` [patch 58/71] netfilter: nf_conntrack: fix confirmation race condition Greg KH
2009-07-28 23:41 ` [patch 59/71] netfilter: nf_conntrack: fix conntrack lookup race Greg KH
2009-07-28 23:41 ` [patch 60/71] netfilter: nf_log: fix direct userspace memory access in proc handler Greg KH
2009-07-28 23:41 ` [patch 61/71] netfilter: xt_quota: fix incomplete initialization Greg KH
2009-07-28 23:41 ` [patch 62/71] netfilter: xt_rateest: fix comparison with self Greg KH
2009-07-28 23:41 ` [patch 63/71] netfilter: tcp conntrack: fix unacknowledged data detection with NAT Greg KH
2009-07-28 23:41 ` [patch 64/71] nf_conntrack: nf_conntrack_alloc() fixes Greg KH
2009-07-28 23:41 ` [patch 65/71] netdev: restore MAC address set and validate operations Greg KH
2009-07-28 23:41 ` [patch 66/71] netdev: restore MTU change operation Greg KH
2009-07-28 23:41 ` [patch 67/71] Input: wistron_btns - recognize Maxdata Pro 7000 notebooks Greg KH
2009-07-28 23:41 ` [patch 68/71] libata: fix follow-up SRST failure path Greg KH
2009-07-28 23:41 ` [patch 69/71] nommu: Provide mmap_min_addr definition Greg KH
2009-07-28 23:41 ` [patch 70/71] eCryptfs: Check Tag 11 literal data buffer size (CVE-2009-2406) Greg KH
2009-07-28 23:41 ` [patch 71/71] eCryptfs: parse_tag_3_packet check tag 3 packet encrypted key size (CVE-2009-2407) 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=20090728234153.843240873@mini.kroah.org \
--to=gregkh@suse.de \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=daniel@caiaq.de \
--cc=linux-kernel@vger.kernel.org \
--cc=stable-review@kernel.org \
--cc=stable@kernel.org \
--cc=stern@rowland.harvard.edu \
--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