Patch "HID: corsair: fix DMA buffers on stack" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
HID: corsair: fix DMA buffers on stack
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
hid-corsair-fix-dma-buffers-on-stack.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6d104af38b570d37aa32a5803b04c354f8ed513dMon Sep 17 00:00:00 2001
From: Johan Hovold <[email protected]>
Date: Thu, 12 Jan 2017 18:17:42 +0100
Subject: HID: corsair: fix DMA buffers on stack
From: Johan Hovold <[email protected]>
commit 6d104af38b570d37aa32a5803b04c354f8ed513d upstream.
Not all platforms support DMA to the stack, and specifically since v4.9 this is no longer supported on x86 with VMAP_STACK either.
Note that the macro-mode buffer was larger than necessary.
--- drivers/hid/hid-corsair.c | 54 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 12 deletions(-)
drivers/hid/hid-corsair.c +42 -12
@@ -148,7 +148,11 @@ static enum led_brightness k90_backlightstruct usb_interface *usbif =to_usb_interface (dev->parent);struct usb_device *usbdev =interface_to_usbdev (usbif);int brightness; -char data[8 ]; +char *data; + + data =kmalloc (8 ,GFP_KERNEL ); +if (!data) +return -ENOMEM ; ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), K90_REQUEST_STATUS,
@@ -158,16 +162,22 @@ static enum led_brightness k90_backlightif (ret <0 ) {dev_warn (dev,"Failed to get K90 initial state (error %d).\n" , ret); -return -EIO ; + ret = -EIO ; + goto out; } brightness = data[4 ];if (brightness <0 || brightness >3 ) {dev_warn (dev,"Read invalid backlight brightness: %02hhx.\n" , data[4 ]); -return -EIO ; + ret = -EIO ; + goto out; } -return brightness; + ret = brightness; +out: +kfree (data); + +return ret; }static enum led_brightness k90_record_led_get (struct led_classdev *led_cdev)
@@ -253,7 +263,11 @@ static ssize_t k90_show_macro_mode(strucstruct usb_interface *usbif =to_usb_interface (dev->parent);struct usb_device *usbdev =interface_to_usbdev (usbif);const char *macro_mode; -char data[8 ]; +char *data; + + data =kmalloc (2 ,GFP_KERNEL ); +if (!data) +return -ENOMEM ; ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), K90_REQUEST_GET_MODE,
@@ -263,7 +277,8 @@ static ssize_t k90_show_macro_mode(strucif (ret <0 ) {dev_warn (dev,"Failed to get K90 initial mode (error %d).\n" , ret); -return -EIO ; + ret = -EIO ; + goto out; }switch (data[0 ]) {
@@ -277,10 +292,15 @@ static ssize_t k90_show_macro_mode(strucdefault :dev_warn (dev,"K90 in unknown mode: %02hhx.\n" , data[0 ]); -return -EIO ; + ret = -EIO ; + goto out; } -return snprintf (buf,PAGE_SIZE ,"%s\n" , macro_mode); + ret =snprintf (buf,PAGE_SIZE ,"%s\n" , macro_mode); +out: +kfree (data); + +return ret; } static ssize_t k90_store_macro_mode(struct device *dev,
@@ -320,7 +340,11 @@ static ssize_t k90_show_current_profile(struct usb_interface *usbif =to_usb_interface (dev->parent);struct usb_device *usbdev =interface_to_usbdev (usbif);int current_profile; -char data[8 ]; +char *data; + + data =kmalloc (8 ,GFP_KERNEL ); +if (!data) +return -ENOMEM ; ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), K90_REQUEST_STATUS,
@@ -330,16 +354,22 @@ static ssize_t k90_show_current_profile(if (ret <0 ) {dev_warn (dev,"Failed to get K90 initial state (error %d).\n" , ret); -return -EIO ; + ret = -EIO ; + goto out; } current_profile = data[7 ];if (current_profile <1 || current_profile >3 ) {dev_warn (dev,"Read invalid current profile: %02hhx.\n" , data[7 ]); -return -EIO ; + ret = -EIO ; + goto out; } -return snprintf (buf,PAGE_SIZE ,"%d\n" , current_profile); + ret =snprintf (buf,PAGE_SIZE ,"%d\n" , current_profile); +out: +kfree (data); + +return ret; } static ssize_t k90_store_current_profile(struct device *dev,
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/hid-corsair-fix-dma-buffers-on-stack.patch queue-4.9/hid-corsair-fix-control-transfer-error-handling.patch