[media] media: stk1160: Avoid stack-allocated buffer for control URBs
Currently stk1160_read_reg() uses a stack-allocated char to get the read control value. This is wrong because usb_control_msg() requires a kmalloc-ed buffer. This commit fixes such issue by kmalloc'ating a 1-byte buffer to receive the read value. While here, let's remove the urb_buf array which was meant for a similar purpose, but never really used. Cc: Alan Stern <stern@rowland.harvard.edu> Reported-by: Sander Eikelenboom <linux@eikelenboom.it> Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Cc: stable@vger.kernel.org # for v3.7 and up Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
8774bed9ce
commit
85ac1a1772
|
@ -67,17 +67,25 @@ int stk1160_read_reg(struct stk1160 *dev, u16 reg, u8 *value)
|
|||
{
|
||||
int ret;
|
||||
int pipe = usb_rcvctrlpipe(dev->udev, 0);
|
||||
u8 *buf;
|
||||
|
||||
*value = 0;
|
||||
|
||||
buf = kmalloc(sizeof(u8), GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
ret = usb_control_msg(dev->udev, pipe, 0x00,
|
||||
USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
||||
0x00, reg, value, sizeof(u8), HZ);
|
||||
0x00, reg, buf, sizeof(u8), HZ);
|
||||
if (ret < 0) {
|
||||
stk1160_err("read failed on reg 0x%x (%d)\n",
|
||||
reg, ret);
|
||||
kfree(buf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
*value = *buf;
|
||||
kfree(buf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -143,7 +143,6 @@ struct stk1160 {
|
|||
int num_alt;
|
||||
|
||||
struct stk1160_isoc_ctl isoc_ctl;
|
||||
char urb_buf[255]; /* urb control msg buffer */
|
||||
|
||||
/* frame properties */
|
||||
int width; /* current frame width */
|
||||
|
|
Loading…
Reference in New Issue