From: Alex Deucher Date: Fri, 17 Apr 2015 14:50:02 +0000 (-0400) Subject: drm/amdgpu: Do not directly dereference pointers to BIOS area. X-Git-Tag: Ubuntu-5.10.0-12.13~14485^2~25^2~69 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=18da4340e651dd41d698fc54084b9139b614539b;p=mirror_ubuntu-hirsute-kernel.git drm/amdgpu: Do not directly dereference pointers to BIOS area. Use readb() and memcpy_fromio() accessors instead. Ported from radeon commit: f2c9e560b406f2f6b14b345c7da33467dee9cdf2 Acked-by: Christian König Acked-by: Jammy Zhou Signed-off-by: Alex Deucher --- diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c index d7a3ab2624f0..ceb444f6d418 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bios.c @@ -75,7 +75,7 @@ static bool igp_read_bios_from_vram(struct amdgpu_device *adev) bool amdgpu_read_bios(struct amdgpu_device *adev) { - uint8_t __iomem *bios; + uint8_t __iomem *bios, val1, val2; size_t size; adev->bios = NULL; @@ -85,15 +85,19 @@ bool amdgpu_read_bios(struct amdgpu_device *adev) return false; } - if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) { + val1 = readb(&bios[0]); + val2 = readb(&bios[1]); + + if (size == 0 || val1 != 0x55 || val2 != 0xaa) { pci_unmap_rom(adev->pdev, bios); return false; } - adev->bios = kmemdup(bios, size, GFP_KERNEL); + adev->bios = kzalloc(size, GFP_KERNEL); if (adev->bios == NULL) { pci_unmap_rom(adev->pdev, bios); return false; } + memcpy_fromio(adev->bios, bios, size); pci_unmap_rom(adev->pdev, bios); return true; }