aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/misc/isight_firmware.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2011-12-05 17:02:59 -0500
committerBrad Figg <brad.figg@canonical.com>2012-01-23 18:36:34 -0500
commit638bc693245d6126329554ef13785044106fbd7c (patch)
treea9468b237146ce1be30ee1f06e197727934832b8 /drivers/usb/misc/isight_firmware.c
parent870ddf62b6dadc455f4adea7b58ebb732c7520ba (diff)
USB: isight: fix kernel bug when loading firmware
BugLink: http://bugs.launchpad.net/bugs/915926 commit 59bf5cf94f0fa3b08fb1258b52649077b7d0914d upstream. We were sending data on the stack when uploading firmware, which causes some machines fits, and is not allowed. Fix this by using the buffer we already had around for this very purpose. Reported-by: Wouter M. Koolen <wmkoolen@cwi.nl> Tested-by: Wouter M. Koolen <wmkoolen@cwi.nl> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com> Signed-off-by: Brad Figg <brad.figg@canonical.com>
Diffstat (limited to 'drivers/usb/misc/isight_firmware.c')
-rw-r--r--drivers/usb/misc/isight_firmware.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/usb/misc/isight_firmware.c b/drivers/usb/misc/isight_firmware.c
index fe1d44319d0..8f725f65191 100644
--- a/drivers/usb/misc/isight_firmware.c
+++ b/drivers/usb/misc/isight_firmware.c
@@ -55,8 +55,9 @@ static int isight_firmware_load(struct usb_interface *intf,
55 55
56 ptr = firmware->data; 56 ptr = firmware->data;
57 57
58 buf[0] = 0x01;
58 if (usb_control_msg 59 if (usb_control_msg
59 (dev, usb_sndctrlpipe(dev, 0), 0xa0, 0x40, 0xe600, 0, "\1", 1, 60 (dev, usb_sndctrlpipe(dev, 0), 0xa0, 0x40, 0xe600, 0, buf, 1,
60 300) != 1) { 61 300) != 1) {
61 printk(KERN_ERR 62 printk(KERN_ERR
62 "Failed to initialise isight firmware loader\n"); 63 "Failed to initialise isight firmware loader\n");
@@ -100,8 +101,9 @@ static int isight_firmware_load(struct usb_interface *intf,
100 } 101 }
101 } 102 }
102 103
104 buf[0] = 0x00;
103 if (usb_control_msg 105 if (usb_control_msg
104 (dev, usb_sndctrlpipe(dev, 0), 0xa0, 0x40, 0xe600, 0, "\0", 1, 106 (dev, usb_sndctrlpipe(dev, 0), 0xa0, 0x40, 0xe600, 0, buf, 1,
105 300) != 1) { 107 300) != 1) {
106 printk(KERN_ERR "isight firmware loading completion failed\n"); 108 printk(KERN_ERR "isight firmware loading completion failed\n");
107 ret = -ENODEV; 109 ret = -ENODEV;