diff options
Diffstat (limited to 'drivers/media/dvb/dvb-usb/ce6230.c')
-rw-r--r-- | drivers/media/dvb/dvb-usb/ce6230.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/media/dvb/dvb-usb/ce6230.c b/drivers/media/dvb/dvb-usb/ce6230.c index 3df2045b7d2d..6d1a3041540d 100644 --- a/drivers/media/dvb/dvb-usb/ce6230.c +++ b/drivers/media/dvb/dvb-usb/ce6230.c | |||
@@ -39,7 +39,7 @@ static int ce6230_rw_udev(struct usb_device *udev, struct req_t *req) | |||
39 | u8 requesttype; | 39 | u8 requesttype; |
40 | u16 value; | 40 | u16 value; |
41 | u16 index; | 41 | u16 index; |
42 | u8 buf[req->data_len]; | 42 | u8 *buf; |
43 | 43 | ||
44 | request = req->cmd; | 44 | request = req->cmd; |
45 | value = req->value; | 45 | value = req->value; |
@@ -62,6 +62,12 @@ static int ce6230_rw_udev(struct usb_device *udev, struct req_t *req) | |||
62 | goto error; | 62 | goto error; |
63 | } | 63 | } |
64 | 64 | ||
65 | buf = kmalloc(req->data_len, GFP_KERNEL); | ||
66 | if (!buf) { | ||
67 | ret = -ENOMEM; | ||
68 | goto error; | ||
69 | } | ||
70 | |||
65 | if (requesttype == (USB_TYPE_VENDOR | USB_DIR_OUT)) { | 71 | if (requesttype == (USB_TYPE_VENDOR | USB_DIR_OUT)) { |
66 | /* write */ | 72 | /* write */ |
67 | memcpy(buf, req->data, req->data_len); | 73 | memcpy(buf, req->data, req->data_len); |
@@ -74,7 +80,7 @@ static int ce6230_rw_udev(struct usb_device *udev, struct req_t *req) | |||
74 | msleep(1); /* avoid I2C errors */ | 80 | msleep(1); /* avoid I2C errors */ |
75 | 81 | ||
76 | ret = usb_control_msg(udev, pipe, request, requesttype, value, index, | 82 | ret = usb_control_msg(udev, pipe, request, requesttype, value, index, |
77 | buf, sizeof(buf), CE6230_USB_TIMEOUT); | 83 | buf, req->data_len, CE6230_USB_TIMEOUT); |
78 | 84 | ||
79 | ce6230_debug_dump(request, requesttype, value, index, buf, | 85 | ce6230_debug_dump(request, requesttype, value, index, buf, |
80 | req->data_len, deb_xfer); | 86 | req->data_len, deb_xfer); |
@@ -88,6 +94,7 @@ static int ce6230_rw_udev(struct usb_device *udev, struct req_t *req) | |||
88 | if (!ret && requesttype == (USB_TYPE_VENDOR | USB_DIR_IN)) | 94 | if (!ret && requesttype == (USB_TYPE_VENDOR | USB_DIR_IN)) |
89 | memcpy(req->data, buf, req->data_len); | 95 | memcpy(req->data, buf, req->data_len); |
90 | 96 | ||
97 | kfree(buf); | ||
91 | error: | 98 | error: |
92 | return ret; | 99 | return ret; |
93 | } | 100 | } |