diff options
author | Ingo Molnar <mingo@kernel.org> | 2016-11-11 08:25:07 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-11-11 08:25:07 +0100 |
commit | 4c8ee71620d734c8ad129fad085167f56f9ce351 (patch) | |
tree | 87208b0144aa664c96dd8b43bbcaaf1f25af606b /drivers/media/usb/s2255/s2255drv.c | |
parent | c7faee2109f978f3ef826c48b7e60609061fda4f (diff) | |
parent | 27bcd37e0240bbe33f0efe244b5aad52104115b3 (diff) |
Merge branch 'linus' into locking/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/media/usb/s2255/s2255drv.c')
-rw-r--r-- | drivers/media/usb/s2255/s2255drv.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/media/usb/s2255/s2255drv.c b/drivers/media/usb/s2255/s2255drv.c index c3a0e87066eb..f7bb78c1873c 100644 --- a/drivers/media/usb/s2255/s2255drv.c +++ b/drivers/media/usb/s2255/s2255drv.c @@ -1901,19 +1901,30 @@ static long s2255_vendor_req(struct s2255_dev *dev, unsigned char Request, s32 TransferBufferLength, int bOut) { int r; + unsigned char *buf; + + buf = kmalloc(TransferBufferLength, GFP_KERNEL); + if (!buf) + return -ENOMEM; + if (!bOut) { r = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), Request, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, - Value, Index, TransferBuffer, + Value, Index, buf, TransferBufferLength, HZ * 5); + + if (r >= 0) + memcpy(TransferBuffer, buf, TransferBufferLength); } else { + memcpy(buf, TransferBuffer, TransferBufferLength); r = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), Request, USB_TYPE_VENDOR | USB_RECIP_DEVICE, - Value, Index, TransferBuffer, + Value, Index, buf, TransferBufferLength, HZ * 5); } + kfree(buf); return r; } |