Messages in this thread Patch in this message | | | Date | Wed, 18 Jul 2007 01:55:24 -0400 | From | Jeff Garzik <> | Subject | [PATCH 2/3] drivers/video/aty/radeon_base: fix radeonfb_pci_register() err handling |
| |
The following change was checked into 'warnings' branch of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/misc-2.6.git
commit 61470a24062de01853fb922ec4a81dcd1c0ba1d0 Author: Jeff Garzik <jeff@garzik.org> Date: Wed Jul 18 01:43:05 2007 -0400
drivers/video/aty/radeon_base: fix radeonfb_pci_register() err handling
* silence warnings by handling failure of sysfs_create_bin_file()
* fix leak-on-error if register_framebuffer() fails, and sysfs is active
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/video/aty/radeon_base.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-)
61470a24062de01853fb922ec4a81dcd1c0ba1d0 diff --git a/drivers/video/aty/radeon_base.c b/drivers/video/aty/radeon_base.c index 47ca62f..5a5458b 100644 --- a/drivers/video/aty/radeon_base.c +++ b/drivers/video/aty/radeon_base.c @@ -2326,10 +2326,16 @@ static int __devinit radeonfb_pci_register (struct pci_dev *pdev, radeon_check_modes(rinfo, mode_option); /* Register some sysfs stuff (should be done better) */ - if (rinfo->mon1_EDID) - sysfs_create_bin_file(&rinfo->pdev->dev.kobj, &edid1_attr); - if (rinfo->mon2_EDID) - sysfs_create_bin_file(&rinfo->pdev->dev.kobj, &edid2_attr); + if (rinfo->mon1_EDID) { + ret = sysfs_create_bin_file(&rinfo->pdev->dev.kobj,&edid1_attr); + if (ret) + goto err_unmap_fb; + } + if (rinfo->mon2_EDID) { + ret = sysfs_create_bin_file(&rinfo->pdev->dev.kobj,&edid2_attr); + if (ret) + goto err_free_mon1; + } /* save current mode regs before we switch into the new one * so we can restore this upon __exit @@ -2353,7 +2359,7 @@ static int __devinit radeonfb_pci_register (struct pci_dev *pdev, if (ret < 0) { printk (KERN_ERR "radeonfb (%s): could not register framebuffer\n", pci_name(rinfo->pdev)); - goto err_unmap_fb; + goto err_free_mon2; } #ifdef CONFIG_MTRR @@ -2372,6 +2378,13 @@ static int __devinit radeonfb_pci_register (struct pci_dev *pdev, RTRACE("radeonfb_pci_register END\n"); return 0; + +err_free_mon2: + if (rinfo->mon2_EDID) + sysfs_remove_bin_file(&rinfo->pdev->dev.kobj, &edid2_attr); +err_free_mon1: + if (rinfo->mon1_EDID) + sysfs_remove_bin_file(&rinfo->pdev->dev.kobj, &edid1_attr); err_unmap_fb: iounmap(rinfo->fb_base); err_unmap_rom: - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |