Skip to content

Commit 73d79aa

Browse files
Jesper Juhlgregkh
authored andcommitted
USB: mem leak fixes for AMD 5536 UDC high/full speed USB device controller driver
In drivers/usb/gadget/amd5536udc.c::udc_pci_probe(), sizeof(struct udc) storage is allocated for 'dev'. There are many exit points from the function where 'dev' is not free'd but has also not yet been used for anything. The following patch free's 'dev' at the return points where it has not yet been used. Signed-off-by: Jesper Juhl <[email protected]> Cc: David Brownell <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 148d9fe commit 73d79aa

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

drivers/usb/gadget/amd5536udc.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3248,6 +3248,8 @@ static int udc_pci_probe(
32483248

32493249
/* pci setup */
32503250
if (pci_enable_device(pdev) < 0) {
3251+
kfree(dev);
3252+
dev = 0;
32513253
retval = -ENODEV;
32523254
goto finished;
32533255
}
@@ -3259,6 +3261,8 @@ static int udc_pci_probe(
32593261

32603262
if (!request_mem_region(resource, len, name)) {
32613263
dev_dbg(&pdev->dev, "pci device used already\n");
3264+
kfree(dev);
3265+
dev = 0;
32623266
retval = -EBUSY;
32633267
goto finished;
32643268
}
@@ -3267,18 +3271,24 @@ static int udc_pci_probe(
32673271
dev->virt_addr = ioremap_nocache(resource, len);
32683272
if (dev->virt_addr == NULL) {
32693273
dev_dbg(&pdev->dev, "start address cannot be mapped\n");
3274+
kfree(dev);
3275+
dev = 0;
32703276
retval = -EFAULT;
32713277
goto finished;
32723278
}
32733279

32743280
if (!pdev->irq) {
32753281
dev_err(&dev->pdev->dev, "irq not set\n");
3282+
kfree(dev);
3283+
dev = 0;
32763284
retval = -ENODEV;
32773285
goto finished;
32783286
}
32793287

32803288
if (request_irq(pdev->irq, udc_irq, IRQF_SHARED, name, dev) != 0) {
32813289
dev_dbg(&dev->pdev->dev, "request_irq(%d) fail\n", pdev->irq);
3290+
kfree(dev);
3291+
dev = 0;
32823292
retval = -EBUSY;
32833293
goto finished;
32843294
}

0 commit comments

Comments
 (0)