From 1ebcc2e20cc9183e42afdd5942b93aefee9f1152 Mon Sep 17 00:00:00 2001 From: Florian Mickler Date: Sun, 20 Mar 2011 18:50:50 -0300 Subject: [PATCH] --- yaml --- r: 250195 b: refs/heads/master c: 2a596f84e2e368a3167947b32c8ea51125f87c58 h: refs/heads/master i: 250193: ec71470ee2e4595cb65c6984dadf8df7f5d33e1a 250191: 58f6d579e975275679e69a09acbf1a297ddad31d v: v3 --- [refs] | 2 +- trunk/drivers/media/dvb/dvb-usb/au6610.c | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 7f2ca6b5a502..578fc5a3eb04 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 029461dbea04f4b6943bd24b6ae7906f28593a2f +refs/heads/master: 2a596f84e2e368a3167947b32c8ea51125f87c58 diff --git a/trunk/drivers/media/dvb/dvb-usb/au6610.c b/trunk/drivers/media/dvb/dvb-usb/au6610.c index eb34cc3894e0..2351077ff2b3 100644 --- a/trunk/drivers/media/dvb/dvb-usb/au6610.c +++ b/trunk/drivers/media/dvb/dvb-usb/au6610.c @@ -33,8 +33,16 @@ static int au6610_usb_msg(struct dvb_usb_device *d, u8 operation, u8 addr, { int ret; u16 index; - u8 usb_buf[6]; /* enough for all known requests, - read returns 5 and write 6 bytes */ + u8 *usb_buf; + + /* + * allocate enough for all known requests, + * read returns 5 and write 6 bytes + */ + usb_buf = kmalloc(6, GFP_KERNEL); + if (!usb_buf) + return -ENOMEM; + switch (wlen) { case 1: index = wbuf[0] << 8; @@ -45,14 +53,15 @@ static int au6610_usb_msg(struct dvb_usb_device *d, u8 operation, u8 addr, break; default: warn("wlen = %x, aborting.", wlen); - return -EINVAL; + ret = -EINVAL; + goto error; } ret = usb_control_msg(d->udev, usb_rcvctrlpipe(d->udev, 0), operation, USB_TYPE_VENDOR|USB_DIR_IN, addr << 1, index, - usb_buf, sizeof(usb_buf), AU6610_USB_TIMEOUT); + usb_buf, 6, AU6610_USB_TIMEOUT); if (ret < 0) - return ret; + goto error; switch (operation) { case AU6610_REQ_I2C_READ: @@ -60,7 +69,8 @@ static int au6610_usb_msg(struct dvb_usb_device *d, u8 operation, u8 addr, /* requested value is always 5th byte in buffer */ rbuf[0] = usb_buf[4]; } - +error: + kfree(usb_buf); return ret; }