mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
[PATCH] intelfb: Fix freeing of nonexistent resource
Fix intelfb trying to free a non-existent resource in its error path. Signed-off-by: Antonino Daplas <adaplas@pol.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
6ee7fb7e36
commit
4b3760ce3d
2 changed files with 12 additions and 2 deletions
|
@ -41,6 +41,10 @@
|
|||
|
||||
/*** hw-related values ***/
|
||||
|
||||
/* Resource Allocation */
|
||||
#define INTELFB_FB_ACQUIRED 1
|
||||
#define INTELFB_MMIO_ACQUIRED 2
|
||||
|
||||
/* PCI ids for supported devices */
|
||||
#define PCI_DEVICE_ID_INTEL_830M 0x3577
|
||||
#define PCI_DEVICE_ID_INTEL_845G 0x2562
|
||||
|
@ -257,6 +261,7 @@ struct intelfb_info {
|
|||
int hwcursor;
|
||||
int fixed_mode;
|
||||
int ring_active;
|
||||
int flag;
|
||||
|
||||
/* hw cursor */
|
||||
int cursor_on;
|
||||
|
|
|
@ -473,9 +473,9 @@ cleanup(struct intelfb_info *dinfo)
|
|||
if (dinfo->aperture.virtual)
|
||||
iounmap((void __iomem *)dinfo->aperture.virtual);
|
||||
|
||||
if (dinfo->mmio_base_phys)
|
||||
if (dinfo->flag & INTELFB_MMIO_ACQUIRED)
|
||||
release_mem_region(dinfo->mmio_base_phys, INTEL_REG_SIZE);
|
||||
if (dinfo->aperture.physical)
|
||||
if (dinfo->flag & INTELFB_FB_ACQUIRED)
|
||||
release_mem_region(dinfo->aperture.physical,
|
||||
dinfo->aperture.size);
|
||||
framebuffer_release(dinfo->info);
|
||||
|
@ -572,6 +572,9 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
cleanup(dinfo);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
dinfo->flag |= INTELFB_FB_ACQUIRED;
|
||||
|
||||
if (!request_mem_region(dinfo->mmio_base_phys,
|
||||
INTEL_REG_SIZE,
|
||||
INTELFB_MODULE_NAME)) {
|
||||
|
@ -580,6 +583,8 @@ intelfb_pci_register(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
dinfo->flag |= INTELFB_MMIO_ACQUIRED;
|
||||
|
||||
/* Get the chipset info. */
|
||||
dinfo->pci_chipset = pdev->device;
|
||||
|
||||
|
|
Loading…
Reference in a new issue