From: Ben Skeggs Date: Mon, 22 Oct 2012 00:08:19 +0000 (+1000) Subject: drm/nouveau/bios: fetch full 4KiB block to determine ACPI ROM image size X-Git-Tag: v5.15~21340^2~7^2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d1626a965141b1e600efad29947b6c36dab183c3;p=platform%2Fkernel%2Flinux-starfive.git drm/nouveau/bios: fetch full 4KiB block to determine ACPI ROM image size Buggy firmware leads to bad things happening otherwise.. Signed-off-by: Ben Skeggs --- diff --git a/drivers/gpu/drm/nouveau/core/subdev/bios/base.c b/drivers/gpu/drm/nouveau/core/subdev/bios/base.c index 3a84ad4..70ca7d5a 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/bios/base.c +++ b/drivers/gpu/drm/nouveau/core/subdev/bios/base.c @@ -192,7 +192,6 @@ nouveau_bios_shadow_acpi(struct nouveau_bios *bios) { struct pci_dev *pdev = nv_device(bios)->pdev; int ret, cnt, i; - u8 data[3]; if (!nouveau_acpi_rom_supported(pdev)) { bios->data = NULL; @@ -200,8 +199,13 @@ nouveau_bios_shadow_acpi(struct nouveau_bios *bios) } bios->size = 0; - if (nouveau_acpi_get_bios_chunk(data, 0, 3) == 3) - bios->size = data[2] * 512; + bios->data = kmalloc(4096, GFP_KERNEL); + if (bios->data) { + if (nouveau_acpi_get_bios_chunk(bios->data, 0, 4096) == 4096) + bios->size = bios->data[2] * 512; + kfree(bios->data); + } + if (!bios->size) return;