aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2012-06-05 19:37:46 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-08-04 06:56:26 -0400
commit0a8673569ff92d7dd6c07153696d1975d13a3b99 (patch)
treee4f3866ad401c4510fa968a2fc633d3c6d191451
parente48b2a68617cfb7881e1c5e420e1a992b1e60e89 (diff)
[media] dvb_usb_v2: ensure driver_info is not null
It could be null in case of driver does not set it properly, like missing dynamic ID handling. Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/dvb/dvb-usb/dvb_usb_init.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/media/dvb/dvb-usb/dvb_usb_init.c b/drivers/media/dvb/dvb-usb/dvb_usb_init.c
index a2beb60908d1..3078371d626b 100644
--- a/drivers/media/dvb/dvb-usb/dvb_usb_init.c
+++ b/drivers/media/dvb/dvb-usb/dvb_usb_init.c
@@ -258,10 +258,18 @@ int dvb_usbv2_device_init_(struct usb_interface *intf,
258 struct dvb_usb_device *d = NULL; 258 struct dvb_usb_device *d = NULL;
259 struct dvb_usb_driver_info *driver_info = 259 struct dvb_usb_driver_info *driver_info =
260 (struct dvb_usb_driver_info *) id->driver_info; 260 (struct dvb_usb_driver_info *) id->driver_info;
261 const struct dvb_usb_device_properties *props = driver_info->props; 261 const struct dvb_usb_device_properties *props;
262 int ret = -ENOMEM; 262 int ret = -ENOMEM;
263 bool cold = false; 263 bool cold = false;
264 264
265 if (!id->driver_info) {
266 pr_err("%s: driver_info is null", KBUILD_MODNAME);
267 ret = -ENODEV;
268 goto err;
269 }
270
271 props = driver_info->props;
272
265 d = kzalloc(sizeof(struct dvb_usb_device), GFP_KERNEL); 273 d = kzalloc(sizeof(struct dvb_usb_device), GFP_KERNEL);
266 if (d == NULL) { 274 if (d == NULL) {
267 err("no memory for 'struct dvb_usb_device'"); 275 err("no memory for 'struct dvb_usb_device'");
@@ -326,7 +334,8 @@ int dvb_usbv2_device_init_(struct usb_interface *intf,
326err_kfree: 334err_kfree:
327 kfree(d->priv); 335 kfree(d->priv);
328 kfree(d); 336 kfree(d);
329 337err:
338 pr_debug("%s: failed=%d\n", __func__, ret);
330 return ret; 339 return ret;
331} 340}
332 341