aboutsummaryrefslogtreecommitdiffstats
path: root/usb.current
diff options
authorGreg Kroah-Hartman <gregkh@suse.de>2009-10-15 15:59:40 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2009-10-15 15:59:40 -0700
commit27ac7645a17575a6ba4f34bca80e30aa184245b1 (patch)
tree78a26884752f1666d258537afc4f63e8982b53bc /usb.current
parent76d7714c08a8cb320ddb9e97b3db263957e44b5b (diff)
downloadpatches-27ac7645a17575a6ba4f34bca80e30aa184245b1.tar.gz
remove patches now in linus's tree
Diffstat (limited to 'usb.current')
-rw-r--r--usb.current/usb-ehci-fix-ist-boundary-checking-interval-math.patch62
-rw-r--r--usb.current/usb-gadget-fix-eem-driver-comments-and-vid-pid.patch42
-rw-r--r--usb.current/usb-option-support-for-airplus-mcd650-datacard.patch41
-rw-r--r--usb.current/usb-rename-documentation-abi-...-sysfs-class-usb_host.patch76
-rw-r--r--usb.current/usb-storage-workaround-devices-with-bogus-sense-size.patch66
-rw-r--r--usb.current/usb-whci-hcd-always-do-an-update-after-processing-a-halted-qtd.patch46
-rw-r--r--usb.current/usb-whci-hcd-handle-early-deletion-of-endpoints.patch104
-rw-r--r--usb.current/usb-wusb-don-t-use-the-stack-to-read-security-descriptor.patch103
8 files changed, 0 insertions, 540 deletions
diff --git a/usb.current/usb-ehci-fix-ist-boundary-checking-interval-math.patch b/usb.current/usb-ehci-fix-ist-boundary-checking-interval-math.patch
deleted file mode 100644
index 76b82cef1fb1ee..00000000000000
--- a/usb.current/usb-ehci-fix-ist-boundary-checking-interval-math.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From sarah.a.sharp@linux.intel.com Mon Oct 12 15:13:10 2009
-From: Sarah Sharp <sarah.a.sharp@linux.intel.com>
-Date: Fri, 9 Oct 2009 12:28:41 -0700
-Subject: USB: ehci: Fix IST boundary checking interval math.
-To: Greg KH <gregkh@suse.de>
-Cc: linux-usb@vger.kernel.org, Alan Stern <stern@rowland.harvard.edu>, David Brownell <david-b@pacbell.net>
-Message-ID: <20091009192841.GA5279@gamba.jf.intel.com>
-Content-Disposition: inline
-
-
-When the EHCI driver falls behind in its scheduling, the active stream's
-first empty microframe may be in the past with respect to the current
-microframe. The code attempts to move the starting microframe ("start") N
-number of microframes forward, where N is the interval of endpoint.
-However, stream->interval is a copy of the endpoint's bInterval, which is
-designated in frames for FS devices, and microframes for HS devices.
-Convert stream->interval to microframes before using it to move the
-starting microframe forward.
-
-Acked-by: Alan Stern <stern@rowland.harvard.edu>
-Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/usb/host/ehci-sched.c | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
---- a/drivers/usb/host/ehci-sched.c
-+++ b/drivers/usb/host/ehci-sched.c
-@@ -1400,6 +1400,10 @@ iso_stream_schedule (
- goto fail;
- }
-
-+ period = urb->interval;
-+ if (!stream->highspeed)
-+ period <<= 3;
-+
- now = ehci_readl(ehci, &ehci->regs->frame_index) % mod;
-
- /* when's the last uframe this urb could start? */
-@@ -1417,8 +1421,8 @@ iso_stream_schedule (
-
- /* Fell behind (by up to twice the slop amount)? */
- if (start >= max - 2 * 8 * SCHEDULE_SLOP)
-- start += stream->interval * DIV_ROUND_UP(
-- max - start, stream->interval) - mod;
-+ start += period * DIV_ROUND_UP(
-+ max - start, period) - mod;
-
- /* Tried to schedule too far into the future? */
- if (unlikely((start + sched->span) >= max)) {
-@@ -1441,10 +1445,6 @@ iso_stream_schedule (
-
- /* NOTE: assumes URB_ISO_ASAP, to limit complexity/bugs */
-
-- period = urb->interval;
-- if (!stream->highspeed)
-- period <<= 3;
--
- /* find a uframe slot with enough bandwidth */
- for (; start < (stream->next_uframe + period); start++) {
- int enough_space;
diff --git a/usb.current/usb-gadget-fix-eem-driver-comments-and-vid-pid.patch b/usb.current/usb-gadget-fix-eem-driver-comments-and-vid-pid.patch
deleted file mode 100644
index 296d264a58e847..00000000000000
--- a/usb.current/usb-gadget-fix-eem-driver-comments-and-vid-pid.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From bniebuhr3@gmail.com Wed Oct 14 10:35:52 2009
-From: Brian Niebuhr <bniebuhr3@gmail.com>
-Date: Wed, 14 Oct 2009 12:04:33 -0500
-Subject: USB: gadget: Fix EEM driver comments and VID/PID
-To: linux-usb@vger.kernel.org
-Cc: Brian Niebuhr <bniebuhr@efjohnson.com>
-Message-ID: <1255539874-9418-1-git-send-email-bniebuhr@efjohnson.com>
-
-
-Remove expository comments and fix USB VID and PID
-
-Signed-off-by: Brian Niebuhr <bniebuhr@efjohnson.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
----
- drivers/usb/gadget/ether.c | 9 ++-------
- 1 file changed, 2 insertions(+), 7 deletions(-)
-
---- a/drivers/usb/gadget/ether.c
-+++ b/drivers/usb/gadget/ether.c
-@@ -61,11 +61,6 @@
- * simpler, Microsoft pushes their own approach: RNDIS. The published
- * RNDIS specs are ambiguous and appear to be incomplete, and are also
- * needlessly complex. They borrow more from CDC ACM than CDC ECM.
-- *
-- * While CDC ECM, CDC Subset, and RNDIS are designed to extend the ethernet
-- * interface to the target, CDC EEM was designed to use ethernet over the USB
-- * link between the host and target. CDC EEM is implemented as an alternative
-- * to those other protocols when that communication model is more appropriate
- */
-
- #define DRIVER_DESC "Ethernet Gadget"
-@@ -157,8 +152,8 @@ static inline bool has_rndis(void)
- #define RNDIS_PRODUCT_NUM 0xa4a2 /* Ethernet/RNDIS Gadget */
-
- /* For EEM gadgets */
--#define EEM_VENDOR_NUM 0x0525 /* INVALID - NEEDS TO BE ALLOCATED */
--#define EEM_PRODUCT_NUM 0xa4a1 /* INVALID - NEEDS TO BE ALLOCATED */
-+#define EEM_VENDOR_NUM 0x1d6b /* Linux Foundation */
-+#define EEM_PRODUCT_NUM 0x0102 /* EEM Gadget */
-
- /*-------------------------------------------------------------------------*/
-
diff --git a/usb.current/usb-option-support-for-airplus-mcd650-datacard.patch b/usb.current/usb-option-support-for-airplus-mcd650-datacard.patch
deleted file mode 100644
index 6648d6bee3449a..00000000000000
--- a/usb.current/usb-option-support-for-airplus-mcd650-datacard.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From sidhpurwala.huzaifa@gmail.com Mon Oct 12 15:08:28 2009
-From: Huzaifa Sidhpurwala <sidhpurwala.huzaifa@gmail.com>
-Date: Mon, 12 Oct 2009 14:34:45 +0530
-Subject: USB: option: Support for AIRPLUS MCD650 Datacard
-To: greg@kroah.org
-Cc: linux-usb@vger.kernel.org
-Message-ID: <4AD2F12D.1010800@gmail.com>
-
-
-Here is a patch for Airplus MCD 650 card
-
-Note: This device is with Victor V Kudlak, and he confirmed that this
-device works with the patch.
-
-Signed-off-by: Huzaifa Sidhpurwala <sidhpurwala.huzaifa@gmail.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/usb/serial/option.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
---- a/drivers/usb/serial/option.c
-+++ b/drivers/usb/serial/option.c
-@@ -328,6 +328,9 @@ static int option_resume(struct usb_ser
- #define ALCATEL_VENDOR_ID 0x1bbb
- #define ALCATEL_PRODUCT_X060S 0x0000
-
-+/* Airplus products */
-+#define AIRPLUS_VENDOR_ID 0x1011
-+#define AIRPLUS_PRODUCT_MCD650 0x3198
-
- static struct usb_device_id option_ids[] = {
- { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
-@@ -589,6 +592,7 @@ static struct usb_device_id option_ids[]
- { USB_DEVICE(ALINK_VENDOR_ID, 0x9000) },
- { USB_DEVICE_AND_INTERFACE_INFO(ALINK_VENDOR_ID, ALINK_PRODUCT_3GU, 0xff, 0xff, 0xff) },
- { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S) },
-+ { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) },
- { } /* Terminating entry */
- };
- MODULE_DEVICE_TABLE(usb, option_ids);
diff --git a/usb.current/usb-rename-documentation-abi-...-sysfs-class-usb_host.patch b/usb.current/usb-rename-documentation-abi-...-sysfs-class-usb_host.patch
deleted file mode 100644
index 9c6c765950a30b..00000000000000
--- a/usb.current/usb-rename-documentation-abi-...-sysfs-class-usb_host.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From david.vrabel@csr.com Mon Oct 12 15:06:53 2009
-From: David Vrabel <david.vrabel@csr.com>
-Date: Mon, 12 Oct 2009 15:45:13 +0000
-Subject: USB: rename Documentation/ABI/.../sysfs-class-usb_host
-To: Greg KH <gregkh@suse.de>
-Cc: linux-usb@vger.kernel.org, David Vrabel <david.vrabel@csr.com>
-Message-ID: <1255362318-10226-2-git-send-email-david.vrabel@csr.com>
-
-
-The usb_host class is no more. Rename its documentation file (which
-only contained WUSB specific files) to .../sysfs-class-uwb_rc-wusbhc.
-
-Signed-off-by: David Vrabel <david.vrabel@csr.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- Documentation/ABI/testing/sysfs-class-usb_host | 25 --------------------
- Documentation/ABI/testing/sysfs-class-uwb_rc-wusbhc | 25 ++++++++++++++++++++
- 2 files changed, 25 insertions(+), 25 deletions(-)
-
---- a/Documentation/ABI/testing/sysfs-class-usb_host
-+++ /dev/null
-@@ -1,25 +0,0 @@
--What: /sys/class/usb_host/usb_hostN/wusb_chid
--Date: July 2008
--KernelVersion: 2.6.27
--Contact: David Vrabel <david.vrabel@csr.com>
--Description:
-- Write the CHID (16 space-separated hex octets) for this host controller.
-- This starts the host controller, allowing it to accept connection from
-- WUSB devices.
--
-- Set an all zero CHID to stop the host controller.
--
--What: /sys/class/usb_host/usb_hostN/wusb_trust_timeout
--Date: July 2008
--KernelVersion: 2.6.27
--Contact: David Vrabel <david.vrabel@csr.com>
--Description:
-- Devices that haven't sent a WUSB packet to the host
-- within 'wusb_trust_timeout' ms are considered to have
-- disconnected and are removed. The default value of
-- 4000 ms is the value required by the WUSB
-- specification.
--
-- Since this relates to security (specifically, the
-- lifetime of PTKs and GTKs) it should not be changed
-- from the default.
---- /dev/null
-+++ b/Documentation/ABI/testing/sysfs-class-uwb_rc-wusbhc
-@@ -0,0 +1,25 @@
-+What: /sys/class/uwb_rc/uwbN/wusbhc/wusb_chid
-+Date: July 2008
-+KernelVersion: 2.6.27
-+Contact: David Vrabel <david.vrabel@csr.com>
-+Description:
-+ Write the CHID (16 space-separated hex octets) for this host controller.
-+ This starts the host controller, allowing it to accept connection from
-+ WUSB devices.
-+
-+ Set an all zero CHID to stop the host controller.
-+
-+What: /sys/class/uwb_rc/uwbN/wusbhc/wusb_trust_timeout
-+Date: July 2008
-+KernelVersion: 2.6.27
-+Contact: David Vrabel <david.vrabel@csr.com>
-+Description:
-+ Devices that haven't sent a WUSB packet to the host
-+ within 'wusb_trust_timeout' ms are considered to have
-+ disconnected and are removed. The default value of
-+ 4000 ms is the value required by the WUSB
-+ specification.
-+
-+ Since this relates to security (specifically, the
-+ lifetime of PTKs and GTKs) it should not be changed
-+ from the default.
diff --git a/usb.current/usb-storage-workaround-devices-with-bogus-sense-size.patch b/usb.current/usb-storage-workaround-devices-with-bogus-sense-size.patch
deleted file mode 100644
index 9cd127734a229f..00000000000000
--- a/usb.current/usb-storage-workaround-devices-with-bogus-sense-size.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From benh@kernel.crashing.org Wed Oct 14 10:17:59 2009
-From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-Date: Tue, 13 Oct 2009 15:53:47 +1100
-Subject: usb-storage: Workaround devices with bogus sense size
-To: Alan Stern <stern@rowland.harvard.edu>
-Cc: Ben Efros <ben@pc-doctor.com>, Josua Dietze <digidietze@draisberghof.de>, fangxiaozhi <huananhu@huawei.com>, Greg KH <greg@kroah.com>, Hugh Blemings <hugh@blemings.org>
-Message-ID: <1255409627.2192.172.camel@pasglop>
-
-
-usb-storage: Workaround devices with bogus sense size
-
-Some devices, such as Huawei E169, advertise more than the standard
-amount of sense data, causing us to set US_FL_SANE_SENSE, assuming
-they support it. However, they subsequently fail the request sense
-with that size.
-
-This works around it generically. When a sense request fails due to
-a device returning an error, US_FL_SANE_SENSE was set, and that sense
-request used a larger sense size, we retry with a smaller size before
-giving up.
-
-Based on an original patch by Ben Efros <ben@pc-doctor.com>
-
-Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-Acked-by: Alan Stern <stern@rowland.harvard.edu>
-Cc: stable <stable@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
-
----
- drivers/usb/storage/transport.c | 17 ++++++++++++++++-
- 1 file changed, 16 insertions(+), 1 deletion(-)
-
---- a/drivers/usb/storage/transport.c
-+++ b/drivers/usb/storage/transport.c
-@@ -696,7 +696,7 @@ void usb_stor_invoke_transport(struct sc
- /* device supports and needs bigger sense buffer */
- if (us->fflags & US_FL_SANE_SENSE)
- sense_size = ~0;
--
-+Retry_Sense:
- US_DEBUGP("Issuing auto-REQUEST_SENSE\n");
-
- scsi_eh_prep_cmnd(srb, &ses, NULL, 0, sense_size);
-@@ -720,6 +720,21 @@ void usb_stor_invoke_transport(struct sc
- srb->result = DID_ABORT << 16;
- goto Handle_Errors;
- }
-+
-+ /* Some devices claim to support larger sense but fail when
-+ * trying to request it. When a transport failure happens
-+ * using US_FS_SANE_SENSE, we always retry with a standard
-+ * (small) sense request. This fixes some USB GSM modems
-+ */
-+ if (temp_result == USB_STOR_TRANSPORT_FAILED &&
-+ (us->fflags & US_FL_SANE_SENSE) &&
-+ sense_size != US_SENSE_SIZE) {
-+ US_DEBUGP("-- auto-sense failure, retry small sense\n");
-+ sense_size = US_SENSE_SIZE;
-+ goto Retry_Sense;
-+ }
-+
-+ /* Other failures */
- if (temp_result != USB_STOR_TRANSPORT_GOOD) {
- US_DEBUGP("-- auto-sense failure\n");
-
diff --git a/usb.current/usb-whci-hcd-always-do-an-update-after-processing-a-halted-qtd.patch b/usb.current/usb-whci-hcd-always-do-an-update-after-processing-a-halted-qtd.patch
deleted file mode 100644
index 6dcc31e7de095c..00000000000000
--- a/usb.current/usb-whci-hcd-always-do-an-update-after-processing-a-halted-qtd.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From david.vrabel@csr.com Mon Oct 12 15:07:50 2009
-From: David Vrabel <david.vrabel@csr.com>
-Date: Mon, 12 Oct 2009 15:45:16 +0000
-Subject: USB: whci-hcd: always do an update after processing a halted qTD
-To: Greg KH <gregkh@suse.de>
-Cc: linux-usb@vger.kernel.org, David Vrabel <david.vrabel@csr.com>
-Message-ID: <1255362318-10226-5-git-send-email-david.vrabel@csr.com>
-
-
-A halted qTD always triggers a hardware list update because the qset was
-either removed or reactivated.
-
-Signed-off-by: David Vrabel <david.vrabel@csr.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/usb/host/whci/asl.c | 4 ++++
- drivers/usb/host/whci/pzl.c | 4 ++++
- 2 files changed, 8 insertions(+)
-
---- a/drivers/usb/host/whci/asl.c
-+++ b/drivers/usb/host/whci/asl.c
-@@ -115,6 +115,10 @@ static uint32_t process_qset(struct whc
- if (status & QTD_STS_HALTED) {
- /* Ug, an error. */
- process_halted_qtd(whc, qset, td);
-+ /* A halted qTD always triggers an update
-+ because the qset was either removed or
-+ reactivated. */
-+ update |= WHC_UPDATE_UPDATED;
- goto done;
- }
-
---- a/drivers/usb/host/whci/pzl.c
-+++ b/drivers/usb/host/whci/pzl.c
-@@ -121,6 +121,10 @@ static enum whc_update pzl_process_qset(
- if (status & QTD_STS_HALTED) {
- /* Ug, an error. */
- process_halted_qtd(whc, qset, td);
-+ /* A halted qTD always triggers an update
-+ because the qset was either removed or
-+ reactivated. */
-+ update |= WHC_UPDATE_UPDATED;
- goto done;
- }
-
diff --git a/usb.current/usb-whci-hcd-handle-early-deletion-of-endpoints.patch b/usb.current/usb-whci-hcd-handle-early-deletion-of-endpoints.patch
deleted file mode 100644
index fe592724a4e813..00000000000000
--- a/usb.current/usb-whci-hcd-handle-early-deletion-of-endpoints.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-From david.vrabel@csr.com Mon Oct 12 15:07:32 2009
-From: David Vrabel <david.vrabel@csr.com>
-Date: Mon, 12 Oct 2009 15:45:15 +0000
-Subject: USB: whci-hcd: handle early deletion of endpoints
-To: Greg KH <gregkh@suse.de>
-Cc: linux-usb@vger.kernel.org, David Vrabel <david.vrabel@csr.com>
-Message-ID: <1255362318-10226-4-git-send-email-david.vrabel@csr.com>
-
-
-If an endpoint is deleted before it's been fully added to the hardware
-list, the associated qset will not be fully initialized and an oops will
-occur when complete(&qset->remove_complete) is called. This can happen
-if a queued URB is cancelled.
-
-Fix this by only removing the qset from the hardware list if the
-cancelled URB had qTDs.
-
-Signed-off-by: David Vrabel <david.vrabel@csr.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/usb/host/whci/asl.c | 19 ++++++++++++-------
- drivers/usb/host/whci/pzl.c | 20 +++++++++++++-------
- 2 files changed, 25 insertions(+), 14 deletions(-)
-
---- a/drivers/usb/host/whci/asl.c
-+++ b/drivers/usb/host/whci/asl.c
-@@ -305,6 +305,7 @@ int asl_urb_dequeue(struct whc *whc, str
- struct whc_urb *wurb = urb->hcpriv;
- struct whc_qset *qset = wurb->qset;
- struct whc_std *std, *t;
-+ bool has_qtd = false;
- int ret;
- unsigned long flags;
-
-@@ -315,17 +316,21 @@ int asl_urb_dequeue(struct whc *whc, str
- goto out;
-
- list_for_each_entry_safe(std, t, &qset->stds, list_node) {
-- if (std->urb == urb)
-+ if (std->urb == urb) {
-+ if (std->qtd)
-+ has_qtd = true;
- qset_free_std(whc, std);
-- else
-+ } else
- std->qtd = NULL; /* so this std is re-added when the qset is */
- }
-
-- asl_qset_remove(whc, qset);
-- wurb->status = status;
-- wurb->is_async = true;
-- queue_work(whc->workqueue, &wurb->dequeue_work);
--
-+ if (has_qtd) {
-+ asl_qset_remove(whc, qset);
-+ wurb->status = status;
-+ wurb->is_async = true;
-+ queue_work(whc->workqueue, &wurb->dequeue_work);
-+ } else
-+ qset_remove_urb(whc, qset, urb, status);
- out:
- spin_unlock_irqrestore(&whc->lock, flags);
-
---- a/drivers/usb/host/whci/pzl.c
-+++ b/drivers/usb/host/whci/pzl.c
-@@ -333,6 +333,7 @@ int pzl_urb_dequeue(struct whc *whc, str
- struct whc_urb *wurb = urb->hcpriv;
- struct whc_qset *qset = wurb->qset;
- struct whc_std *std, *t;
-+ bool has_qtd = false;
- int ret;
- unsigned long flags;
-
-@@ -343,17 +344,22 @@ int pzl_urb_dequeue(struct whc *whc, str
- goto out;
-
- list_for_each_entry_safe(std, t, &qset->stds, list_node) {
-- if (std->urb == urb)
-+ if (std->urb == urb) {
-+ if (std->qtd)
-+ has_qtd = true;
- qset_free_std(whc, std);
-- else
-+ } else
- std->qtd = NULL; /* so this std is re-added when the qset is */
- }
-
-- pzl_qset_remove(whc, qset);
-- wurb->status = status;
-- wurb->is_async = false;
-- queue_work(whc->workqueue, &wurb->dequeue_work);
--
-+ if (has_qtd) {
-+ pzl_qset_remove(whc, qset);
-+ update_pzl_hw_view(whc);
-+ wurb->status = status;
-+ wurb->is_async = false;
-+ queue_work(whc->workqueue, &wurb->dequeue_work);
-+ } else
-+ qset_remove_urb(whc, qset, urb, status);
- out:
- spin_unlock_irqrestore(&whc->lock, flags);
-
diff --git a/usb.current/usb-wusb-don-t-use-the-stack-to-read-security-descriptor.patch b/usb.current/usb-wusb-don-t-use-the-stack-to-read-security-descriptor.patch
deleted file mode 100644
index 16b4b5446ac69e..00000000000000
--- a/usb.current/usb-wusb-don-t-use-the-stack-to-read-security-descriptor.patch
+++ /dev/null
@@ -1,103 +0,0 @@
-From david.vrabel@csr.com Mon Oct 12 15:07:12 2009
-From: David Vrabel <david.vrabel@csr.com>
-Date: Mon, 12 Oct 2009 15:45:14 +0000
-Subject: USB: wusb: don't use the stack to read security descriptor
-To: Greg KH <gregkh@suse.de>
-Cc: linux-usb@vger.kernel.org, David Vrabel <david.vrabel@csr.com>
-Message-ID: <1255362318-10226-3-git-send-email-david.vrabel@csr.com>
-
-
-From: Stefano Panella <stefano.panella@csr.com>
-
-An urb's transfer buffer must be kmalloc'd memory and not point to the
-stack or a DMA API warning results.
-
-Signed-off-by: David Vrabel <david.vrabel@csr.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/usb/wusbcore/security.c | 41 ++++++++++++++++++----------------------
- 1 file changed, 19 insertions(+), 22 deletions(-)
-
---- a/drivers/usb/wusbcore/security.c
-+++ b/drivers/usb/wusbcore/security.c
-@@ -200,35 +200,40 @@ int wusb_dev_sec_add(struct wusbhc *wusb
- {
- int result, bytes, secd_size;
- struct device *dev = &usb_dev->dev;
-- struct usb_security_descriptor secd;
-+ struct usb_security_descriptor *secd;
- const struct usb_encryption_descriptor *etd, *ccm1_etd = NULL;
-- void *secd_buf;
- const void *itr, *top;
- char buf[64];
-
-+ secd = kmalloc(sizeof(struct usb_security_descriptor), GFP_KERNEL);
-+ if (secd == NULL) {
-+ result = -ENOMEM;
-+ goto out;
-+ }
-+
- result = usb_get_descriptor(usb_dev, USB_DT_SECURITY,
-- 0, &secd, sizeof(secd));
-+ 0, secd, sizeof(struct usb_security_descriptor));
- if (result < sizeof(secd)) {
- dev_err(dev, "Can't read security descriptor or "
- "not enough data: %d\n", result);
-- goto error_secd;
-+ goto out;
- }
-- secd_size = le16_to_cpu(secd.wTotalLength);
-- secd_buf = kmalloc(secd_size, GFP_KERNEL);
-- if (secd_buf == NULL) {
-+ secd_size = le16_to_cpu(secd->wTotalLength);
-+ secd = krealloc(secd, secd_size, GFP_KERNEL);
-+ if (secd == NULL) {
- dev_err(dev, "Can't allocate space for security descriptors\n");
-- goto error_secd_alloc;
-+ goto out;
- }
- result = usb_get_descriptor(usb_dev, USB_DT_SECURITY,
-- 0, secd_buf, secd_size);
-+ 0, secd, secd_size);
- if (result < secd_size) {
- dev_err(dev, "Can't read security descriptor or "
- "not enough data: %d\n", result);
-- goto error_secd_all;
-+ goto out;
- }
- bytes = 0;
-- itr = secd_buf + sizeof(secd);
-- top = secd_buf + result;
-+ itr = &secd[1];
-+ top = (void *)secd + result;
- while (itr < top) {
- etd = itr;
- if (top - itr < sizeof(*etd)) {
-@@ -259,24 +264,16 @@ int wusb_dev_sec_add(struct wusbhc *wusb
- dev_err(dev, "WUSB device doesn't support CCM1 encryption, "
- "can't use!\n");
- result = -EINVAL;
-- goto error_no_ccm1;
-+ goto out;
- }
- wusb_dev->ccm1_etd = *ccm1_etd;
- dev_dbg(dev, "supported encryption: %s; using %s (0x%02x/%02x)\n",
- buf, wusb_et_name(ccm1_etd->bEncryptionType),
- ccm1_etd->bEncryptionValue, ccm1_etd->bAuthKeyIndex);
- result = 0;
-- kfree(secd_buf);
- out:
-+ kfree(secd);
- return result;
--
--
--error_no_ccm1:
--error_secd_all:
-- kfree(secd_buf);
--error_secd_alloc:
--error_secd:
-- goto out;
- }
-
- void wusb_dev_sec_rm(struct wusb_dev *wusb_dev)