Skip to contentSkip to conversation

dereferencing uninitialized variable in anysee_probe()

DISCUSSION Dan Carpenter 2 participants 3 messages May 31, 2010 Media (V4L/DVB)

lore
Share & tools
lore
#0 lore raw

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

#1 lore raw

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 +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.

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/
#2 lore raw
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 +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.

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