dereferencing uninitialized variable in anysee_probe()
Hi I'm going through some smatch stuff and I had a question.
drivers/media/dvb/dvb-usb/anysee.c +482 anysee_probe(30)
warn: variable dereferenced before check 'd'
466 ret = dvb_usb_device_init(intf, &anysee_properties, THIS_MODULE, &d,
467 adapter_nr);
If we're in a cold state then dvb_usb_device_init() can return zero but d is uninitialized here.
468 if (ret)
469 return ret;
470
471 alt = usb_altnum_to_altsetting(intf, 0);
472 if (alt == NULL) {
473 deb_info("%s: no alt found!\n", __func__);
474 return -ENODEV;
475 }
476
477 ret = usb_set_interface(d->udev, alt->desc.bInterfaceNumber,
^^^^^^^
That would lead to an oops here.
478 alt->desc.bAlternateSetting);
I'm not sure how to fix this.
regards,
dan carpenter
Terve Dan,
Quoted 10 lines · Dan Carpenter
Hi I'm going through some smatch stuff and I had a question.
drivers/media/dvb/dvb-usb/anysee.c+482anysee_probe(30)
warn: variable dereferenced before check 'd'466 ret = dvb_usb_device_init(intf,&anysee_properties, THIS_MODULE,&d,
467adapter_nr);If we're in a cold state then
dvb_usb_device_init()can return zero but d is uninitialized here.
Anysee is always warm. Its USB-bridge, Cypress FX2, uploads firmware from eeprom and due to that it is never cold from the drivers point of view.
*cold means device needs firmware upload from driver
*warm means device is ready. Firmware is already uploaded or it is not needed at all.
Quoted 15 lines
468 if (ret)
469 return ret;
470
471 alt = usb_altnum_to_altsetting(intf, 0);
472 if (alt == NULL) {
473 deb_info("%s: no alt found!\n", __func__);
474 return -ENODEV;
475 }
476
477 ret = usb_set_interface(d->udev, alt->desc.bInterfaceNumber,
^^^^^^^
That would lead to an oops here.
478 alt->desc.bAlternateSetting);Quoted 1 line
I'm not sure how to fix this.
After that answer, do you still see problem?
best regards
Antti
Signature · 1 line
http://palosaari.fi/
Quoted 14 lines · Antti Palosaari
Terve Dan,
Quoted 10 lines · Dan Carpenter
Hi I'm going through some smatch stuff and I had a question.
drivers/media/dvb/dvb-usb/anysee.c+482anysee_probe(30)
warn: variable dereferenced before check 'd'466 ret = dvb_usb_device_init(intf,&anysee_properties, THIS_MODULE,&d,
467adapter_nr);If we're in a cold state then
dvb_usb_device_init()can return zero but d is uninitialized here.
Quoted 8 lines
Anysee is always warm. Its USB-bridge, Cypress FX2, uploads firmware from eeprom and due to that it is never cold from the drivers point of view.
*cold means device needs firmware upload from driver
*warm means device is ready. Firmware is already uploaded or it is not needed at all.
Wow. Thanks for the quick response. I was just auditing the code and noticed some extra null checking which made me confused. I'll send a patch for that.
regards,
dan carpenter