Skip to content

Commit

Permalink
drm/radeon: Add the missed acpi_put_table() to fix memory leak
Browse files Browse the repository at this point in the history
When the radeon driver reads the bios information from ACPI
table in radeon_acpi_vfct_bios(), it misses to call acpi_put_table()
to release the ACPI memory after the init, so add acpi_put_table()
properly to fix the memory leak.

v2: fix text formatting (Alex)

Fixes: 268ba0a ("drm/radeon: implement ACPI VFCT vbios fetch (v3)")
Signed-off-by: Hanjun Guo <guohanjun@huawei.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
  • Loading branch information
Hanjun Guo authored and Alex Deucher committed Nov 9, 2022
1 parent 4b31b92 commit 10276a2
Showing 1 changed file with 11 additions and 7 deletions.
18 changes: 11 additions & 7 deletions drivers/gpu/drm/radeon/radeon_bios.c
Original file line number Diff line number Diff line change
Expand Up @@ -612,13 +612,14 @@ static bool radeon_acpi_vfct_bios(struct radeon_device *rdev)
acpi_size tbl_size;
UEFI_ACPI_VFCT *vfct;
unsigned offset;
bool r = false;

if (!ACPI_SUCCESS(acpi_get_table("VFCT", 1, &hdr)))
return false;
tbl_size = hdr->length;
if (tbl_size < sizeof(UEFI_ACPI_VFCT)) {
DRM_ERROR("ACPI VFCT table present but broken (too short #1)\n");
return false;
goto out;
}

vfct = (UEFI_ACPI_VFCT *)hdr;
Expand All @@ -631,13 +632,13 @@ static bool radeon_acpi_vfct_bios(struct radeon_device *rdev)
offset += sizeof(VFCT_IMAGE_HEADER);
if (offset > tbl_size) {
DRM_ERROR("ACPI VFCT image header truncated\n");
return false;
goto out;
}

offset += vhdr->ImageLength;
if (offset > tbl_size) {
DRM_ERROR("ACPI VFCT image truncated\n");
return false;
goto out;
}

if (vhdr->ImageLength &&
Expand All @@ -649,15 +650,18 @@ static bool radeon_acpi_vfct_bios(struct radeon_device *rdev)
rdev->bios = kmemdup(&vbios->VbiosContent,
vhdr->ImageLength,
GFP_KERNEL);
if (rdev->bios)
r = true;

if (!rdev->bios)
return false;
return true;
goto out;
}
}

DRM_ERROR("ACPI VFCT table present but broken (too short #2)\n");
return false;

out:
acpi_put_table(hdr);
return r;
}
#else
static inline bool radeon_acpi_vfct_bios(struct radeon_device *rdev)
Expand Down

0 comments on commit 10276a2

Please sign in to comment.