staging: most: prevent DMA on stack
authorChristian Gromm <christian.gromm@microchip.com>
Mon, 28 Sep 2015 15:18:43 +0000 (17:18 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 29 Sep 2015 01:18:50 +0000 (03:18 +0200)
This patch is needed to avoid having DMA on the stack.

Signed-off-by: Andrey Shvetsov <andrey.shvetsov@k2l.de>
Signed-off-by: Christian Gromm <christian.gromm@microchip.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/most/hdm-usb/hdm_usb.c

index 01ea91b0c6c50c6b7a133154fa9b60ba6d967a7f..7722212c8654c170411f8c489b88ede1acc9f33d 100644 (file)
@@ -146,17 +146,23 @@ static void wq_netinfo(struct work_struct *wq_obj);
  *
  * This is reads data from INIC's direct register communication interface
  */
-static inline int drci_rd_reg(struct usb_device *dev, u16 reg, void *buf)
+static inline int drci_rd_reg(struct usb_device *dev, u16 reg, u16 *buf)
 {
-       return usb_control_msg(dev,
-                              usb_rcvctrlpipe(dev, 0),
-                              DRCI_READ_REQ,
-                              USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
-                              0x0000,
-                              reg,
-                              buf,
-                              2,
-                              5 * HZ);
+       int retval;
+       u16 *dma_buf = kzalloc(sizeof(u16), GFP_KERNEL);
+       u8 req_type = USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE;
+
+       if (!dma_buf)
+               return -ENOMEM;
+
+       retval = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
+                                DRCI_READ_REQ, req_type,
+                                0x0000,
+                                reg, dma_buf, sizeof(u16), 5 * HZ);
+       *buf = *dma_buf;
+       kfree(dma_buf);
+
+       return retval;
 }
 
 /**