The return value of a dm1105_ir_init() call was ignored within dm1105_probe(). The error detection and exception handling was incomplete. Thus add a needed condition check. Adjust a subsequent jump target for the completion of the desired error handling. Fixes: 519a4bdcf822 ("V4L/DVB (11984): Add support for yet another SDMC DM1105 based DVB-S card.") Cc: stable@vger.kernel.org Signed-off-by: Chen Changcheng --- Changes in v2: - Added Fixes: tag and Cc: stable@vger.kernel.org. Changes in v3: - Refined commit message wording per suggestion from Markus Elfring. drivers/media/pci/dm1105/dm1105.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/media/pci/dm1105/dm1105.c b/drivers/media/pci/dm1105/dm1105.c index ae4544042a74..9d49e95c8182 100644 --- a/drivers/media/pci/dm1105/dm1105.c +++ b/drivers/media/pci/dm1105/dm1105.c @@ -1125,14 +1125,16 @@ static int dm1105_probe(struct pci_dev *pdev, if (ret < 0) goto err_dvb_net; - dm1105_ir_init(dev); + ret = dm1105_ir_init(dev); + if (ret) + goto err_dvb_net; INIT_WORK(&dev->work, dm1105_dmx_buffer); sprintf(dev->wqn, "%s/%d", dvb_adapter->name, dvb_adapter->num); dev->wq = create_singlethread_workqueue(dev->wqn); if (!dev->wq) { ret = -ENOMEM; - goto err_dvb_net; + goto err_dm1105_ir_exit; } ret = request_irq(pdev->irq, dm1105_irq, IRQF_SHARED, @@ -1144,6 +1146,8 @@ static int dm1105_probe(struct pci_dev *pdev, err_workqueue: destroy_workqueue(dev->wq); +err_dm1105_ir_exit: + dm1105_ir_exit(dev); err_dvb_net: dvb_net_release(&dev->dvbnet); err_disconnect_frontend: -- 2.25.1