Skip to content

Commit

Permalink
[media] cx88-dvb avoid dangling core->gate_ctrl pointer
Browse files Browse the repository at this point in the history
dvb_register calls videobuf_dvb_register_bus, but if that returns
a failure the module will be unloaded without clearing the
value of core->gate_ctrl which will cause an oops in macros
called from video_open in cx88-video.c

Signed-off-by: David Fries <[email protected]>
Cc: Mauro Carvalho Chehab <[email protected]>
Cc: Istvan Varga <[email protected]>
Cc: Jonathan Nieder <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
  • Loading branch information
dfries authored and Mauro Carvalho Chehab committed Dec 30, 2011
1 parent b16ec6f commit 7b0962d
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions drivers/media/video/cx88/cx88-dvb.c
Original file line number Diff line number Diff line change
Expand Up @@ -954,6 +954,7 @@ static int dvb_register(struct cx8802_dev *dev)
struct cx88_core *core = dev->core;
struct videobuf_dvb_frontend *fe0, *fe1 = NULL;
int mfe_shared = 0; /* bus not shared by default */
int res = -EINVAL;

if (0 != core->i2c_rc) {
printk(KERN_ERR "%s/2: no i2c-bus available, cannot attach dvb drivers\n", core->name);
Expand Down Expand Up @@ -1566,13 +1567,16 @@ static int dvb_register(struct cx8802_dev *dev)
call_all(core, core, s_power, 0);

/* register everything */
return videobuf_dvb_register_bus(&dev->frontends, THIS_MODULE, dev,
&dev->pci->dev, adapter_nr, mfe_shared, NULL);
res = videobuf_dvb_register_bus(&dev->frontends, THIS_MODULE, dev,
&dev->pci->dev, adapter_nr, mfe_shared, NULL);
if (res)
goto frontend_detach;
return res;

frontend_detach:
core->gate_ctrl = NULL;
videobuf_dvb_dealloc_frontends(&dev->frontends);
return -EINVAL;
return res;
}

/* ----------------------------------------------------------- */
Expand Down

0 comments on commit 7b0962d

Please sign in to comment.