diff options
Diffstat (limited to 'drivers/media/dvb-frontends/itd1000.c')
| -rw-r--r-- | drivers/media/dvb-frontends/itd1000.c | 13 | 
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);  | 
