[media] stk-webcam: don't use stack for DMA
authorMauro Carvalho Chehab <mchehab@osg.samsung.com>
Mon, 10 Oct 2016 14:17:15 +0000 (11:17 -0300)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Fri, 14 Oct 2016 15:52:29 +0000 (12:52 -0300)
The USB control messages require DMA to work. We cannot pass
a stack-allocated buffer, as it is not warranted that the
stack would be into a DMA enabled area.

Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/usb/stkwebcam/stk-webcam.c

index db200c9d796d3683d23b9279db73d6eb625420da..22a9aae16291b31adb5eeae0af4cd14c747c0ec5 100644 (file)
@@ -147,20 +147,26 @@ int stk_camera_write_reg(struct stk_camera *dev, u16 index, u8 value)
 int stk_camera_read_reg(struct stk_camera *dev, u16 index, int *value)
 {
        struct usb_device *udev = dev->udev;
+       unsigned char *buf;
        int ret;
 
+       buf = kmalloc(sizeof(u8), GFP_KERNEL);
+       if (!buf)
+               return -ENOMEM;
+
        ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
                        0x00,
                        USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
                        0x00,
                        index,
-                       (u8 *) value,
+                       buf,
                        sizeof(u8),
                        500);
-       if (ret < 0)
-               return ret;
-       else
-               return 0;
+       if (ret >= 0)
+               memcpy(value, buf, sizeof(u8));
+
+       kfree(buf);
+       return ret;
 }
 
 static int stk_start_stream(struct stk_camera *dev)