aboutsummaryrefslogtreecommitdiff
path: root/drivers/media/dvb-frontends/itd1000.c
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2013-12-05 10:15:16 +0000
committerMark Brown <broonie@linaro.org>2013-12-05 10:15:16 +0000
commitdffe2a3eed105c631500778dfaba0998d7bf8512 (patch)
tree4c2492d710e0b101f57a7f399b3e891129b1c8b4 /drivers/media/dvb-frontends/itd1000.c
parent3b21b35761de8348dd2f7cff9752449281d7a17b (diff)
parent538069756ce13f9d0e0ccb7a17b6935a0bfb7cad (diff)
Merge tag 'v3.10.22' into linux-linaro-lsk
This is the 3.10.22 stable release
Diffstat (limited to 'drivers/media/dvb-frontends/itd1000.c')
-rw-r--r--drivers/media/dvb-frontends/itd1000.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/media/dvb-frontends/itd1000.c b/drivers/media/dvb-frontends/itd1000.c
index c1c3400b217..cadcae4cff8 100644
--- a/drivers/media/dvb-frontends/itd1000.c
+++ b/drivers/media/dvb-frontends/itd1000.c
@@ -31,6 +31,9 @@
#include "itd1000.h"
#include "itd1000_priv.h"
+/* Max transfer size done by I2C transfer functions */
+#define MAX_XFER_SIZE 64
+
static int debug;
module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
@@ -52,10 +55,18 @@ MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
/* don't write more than one byte with flexcop behind */
static int itd1000_write_regs(struct itd1000_state *state, u8 reg, u8 v[], u8 len)
{
- u8 buf[1+len];
+ u8 buf[MAX_XFER_SIZE];
struct i2c_msg msg = {
.addr = state->cfg->i2c_address, .flags = 0, .buf = buf, .len = len+1
};
+
+ if (1 + len > sizeof(buf)) {
+ printk(KERN_WARNING
+ "itd1000: i2c wr reg=%04x: len=%d is too big!\n",
+ reg, len);
+ return -EINVAL;
+ }
+
buf[0] = reg;
memcpy(&buf[1], v, len);