(submitted to Dmitry/input ml on 13 Oct 2006) [PATCH] fix fm801_gp_probe() ignoring return value from pci_enable_device() Fix fm801_gp_probe() not handling pci_enable_device() return value correctly. Signed-off-by: Jiri Kosina --- drivers/input/gameport/fm801-gp.c | 23 ++++++++++++++++------- 1 files changed, 16 insertions(+), 7 deletions(-) diff --git a/drivers/input/gameport/fm801-gp.c b/drivers/input/gameport/fm801-gp.c index 90de5af..5ac9e15 100644 --- a/drivers/input/gameport/fm801-gp.c +++ b/drivers/input/gameport/fm801-gp.c @@ -82,17 +82,22 @@ static int __devinit fm801_gp_probe(stru { struct fm801_gp *gp; struct gameport *port; + int err; gp = kzalloc(sizeof(struct fm801_gp), GFP_KERNEL); port = gameport_allocate_port(); if (!gp || !port) { printk(KERN_ERR "fm801-gp: Memory allocation failed\n"); - kfree(gp); - gameport_free_port(port); - return -ENOMEM; + err = -ENOMEM; + goto out_err; } - pci_enable_device(pci); + err = pci_enable_device(pci); + if (err) { + printk(KERN_ERR "fm801: Cannot enable PCI device\n"); + goto out_err; + + } port->open = fm801_gp_open; #ifdef HAVE_COOKED @@ -108,9 +113,8 @@ #endif if (!gp->res_port) { printk(KERN_DEBUG "fm801-gp: unable to grab region 0x%x-0x%x\n", port->io, port->io + 0x0f); - gameport_free_port(port); - kfree(gp); - return -EBUSY; + err = -EBUSY; + goto out_err; } pci_set_drvdata(pci, gp); @@ -119,6 +123,11 @@ #endif gameport_register_port(port); return 0; +out_err: + gameport_free_port(port); + kfree(gp); + + return err; } static void __devexit fm801_gp_remove(struct pci_dev *pci)