On 25/03/2020 10:01, Xiaolong Huang wrote: > In bttv_probe if some functions such as pci_enable_device, > pci_set_dma_mask and request_mem_region fails the allocated > memory for btv should be released. > > Signed-off-by: Xiaolong Huang <butterflyhuangxx@xxxxxxxxx> > --- > drivers/media/pci/bt8xx/bttv-driver.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/media/pci/bt8xx/bttv-driver.c b/drivers/media/pci/bt8xx/bttv-driver.c > index a359da7773a9..37ac59110383 100644 > --- a/drivers/media/pci/bt8xx/bttv-driver.c > +++ b/drivers/media/pci/bt8xx/bttv-driver.c > @@ -4013,10 +4013,14 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id) > btv->id = dev->device; > if (pci_enable_device(dev)) { > pr_warn("%d: Can't enable device\n", btv->c.nr); > + bttvs[btv->c.nr] = NULL; > + kfree(btv); > return -EIO; Let's change this... > } > if (pci_set_dma_mask(dev, DMA_BIT_MASK(32))) { > pr_warn("%d: No suitable DMA available\n", btv->c.nr); > + bttvs[btv->c.nr] = NULL; > + kfree(btv); > return -EIO; this... > } > if (!request_mem_region(pci_resource_start(dev,0), > @@ -4025,6 +4029,8 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id) > pr_warn("%d: can't request iomem (0x%llx)\n", > btv->c.nr, > (unsigned long long)pci_resource_start(dev, 0)); > + bttvs[btv->c.nr] = NULL; > + kfree(btv); > return -EBUSY; and this to a goto free_mem. > } > pci_set_master(dev); > @@ -4211,6 +4217,8 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id) > release_mem_region(pci_resource_start(btv->c.pci,0), > pci_resource_len(btv->c.pci,0)); > pci_disable_device(btv->c.pci); And add the free_mem: label here. > + bttvs[btv->c.nr] = NULL; > + kfree(btv); > return result; > } > > Regards, Hans