V4L/DVB (8071): tda10023: Fix possible kernel oops during initialisation
If the i2c write fails during initialisation, an oops happens because state->frontend.dvb is still undefined. Fixed. Thanks to Sigmund Augdal for reporting this bug, and to Hartmut Birr for suggesting the fix. Thanks-to: Sigmund Augdal <sigmund@snap.tv> Thanks-to: Hartmut Birr <e9hack@gmail.com> Signed-off-by: Oliver Endriss <o.endriss@gmx.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
ad907fa395
commit
c9fa2b1eee
1 changed files with 12 additions and 8 deletions
|
@ -116,9 +116,12 @@ static u8 tda10023_readreg (struct tda10023_state* state, u8 reg)
|
|||
int ret;
|
||||
|
||||
ret = i2c_transfer (state->i2c, msg, 2);
|
||||
if (ret != 2)
|
||||
printk("DVB: TDA10023: %s: readreg error (ret == %i)\n",
|
||||
__func__, ret);
|
||||
if (ret != 2) {
|
||||
int num = state->frontend.dvb ? state->frontend.dvb->num : -1;
|
||||
printk(KERN_ERR "DVB: TDA10023(%d): %s: readreg error "
|
||||
"(reg == 0x%02x, ret == %i)\n",
|
||||
num, __func__, reg, ret);
|
||||
}
|
||||
return b1[0];
|
||||
}
|
||||
|
||||
|
@ -129,11 +132,12 @@ static int tda10023_writereg (struct tda10023_state* state, u8 reg, u8 data)
|
|||
int ret;
|
||||
|
||||
ret = i2c_transfer (state->i2c, &msg, 1);
|
||||
if (ret != 1)
|
||||
printk("DVB: TDA10023(%d): %s, writereg error "
|
||||
if (ret != 1) {
|
||||
int num = state->frontend.dvb ? state->frontend.dvb->num : -1;
|
||||
printk(KERN_ERR "DVB: TDA10023(%d): %s, writereg error "
|
||||
"(reg == 0x%02x, val == 0x%02x, ret == %i)\n",
|
||||
state->frontend.dvb->num, __func__, reg, data, ret);
|
||||
|
||||
num, __func__, reg, data, ret);
|
||||
}
|
||||
return (ret != 1) ? -EREMOTEIO : 0;
|
||||
}
|
||||
|
||||
|
@ -464,7 +468,7 @@ struct dvb_frontend* tda10023_attach(const struct tda1002x_config* config,
|
|||
int i;
|
||||
|
||||
/* allocate memory for the internal state */
|
||||
state = kmalloc(sizeof(struct tda10023_state), GFP_KERNEL);
|
||||
state = kzalloc(sizeof(struct tda10023_state), GFP_KERNEL);
|
||||
if (state == NULL) goto error;
|
||||
|
||||
/* setup the state */
|
||||
|
|
Loading…
Reference in a new issue