On Sun, Oct 21, 2012 at 12:53:15PM +0200, Lekensteyn wrote:
> From: Peter Wu <lekenst...@gmail.com>
> 
> Since commit "drm/nouveau/bios: attempt to fetch entire acpi rom image in one
> shot", the ACPI spec is broken in order to gain speed. In theory, since the
> _ROM method is supposed to return 4 KiB only, the returned buffer size could 
> be
> less than the requested length. This could lead to reading past the buffer
> boundaries which could make worse thing happen. To fix that, do not read more
> than the buffer contains. As an extra side-effect, the function returns the
> bytes that have really been read which is more natural.
> 
> Signed-off-by: Peter Wu <lekenst...@gmail.com>
> ---
>  drivers/gpu/drm/nouveau/nouveau_acpi.c |    1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c 
> b/drivers/gpu/drm/nouveau/nouveau_acpi.c
> index 48783e1..368e45c 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_acpi.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c
> @@ -356,6 +356,7 @@ static int nouveau_rom_call(acpi_handle rom_handle, 
> uint8_t *bios,
>               return -ENODEV;
>       }
>       obj = (union acpi_object *)buffer.pointer;
> +     len = min(len, (int)obj->buffer.size);
>       memcpy(bios+offset, obj->buffer.pointer, len);
>       kfree(buffer.pointer);
>       return len;
> -- 

BTW, _ROM method from https://lkml.org/lkml/2012/10/21/11 multiplies length
by 8, so maybe we can read 32kB in one batch?

Marcin
_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to