mirror of https://gitee.com/openkylin/linux.git
[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 ret;
|
||||||
int pipe = usb_rcvctrlpipe(dev->udev, 0);
|
int pipe = usb_rcvctrlpipe(dev->udev, 0);
|
||||||
|
u8 *buf;
|
||||||
|
|
||||||
*value = 0;
|
*value = 0;
|
||||||
|
|
||||||
|
buf = kmalloc(sizeof(u8), GFP_KERNEL);
|
||||||
|
if (!buf)
|
||||||
|
return -ENOMEM;
|
||||||
ret = usb_control_msg(dev->udev, pipe, 0x00,
|
ret = usb_control_msg(dev->udev, pipe, 0x00,
|
||||||
USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
||||||
0x00, reg, value, sizeof(u8), HZ);
|
0x00, reg, buf, sizeof(u8), HZ);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
stk1160_err("read failed on reg 0x%x (%d)\n",
|
stk1160_err("read failed on reg 0x%x (%d)\n",
|
||||||
reg, ret);
|
reg, ret);
|
||||||
|
kfree(buf);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*value = *buf;
|
||||||
|
kfree(buf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -143,7 +143,6 @@ struct stk1160 {
|
||||||
int num_alt;
|
int num_alt;
|
||||||
|
|
||||||
struct stk1160_isoc_ctl isoc_ctl;
|
struct stk1160_isoc_ctl isoc_ctl;
|
||||||
char urb_buf[255]; /* urb control msg buffer */
|
|
||||||
|
|
||||||
/* frame properties */
|
/* frame properties */
|
||||||
int width; /* current frame width */
|
int width; /* current frame width */
|
||||||
|
|
Loading…
Reference in New Issue