[Nouveau] [PATCH] drm/nouveau/bios: use size provided by _ROM method

Marcin Slusarz marcin.slusarz at gmail.com
Sun Oct 21 05:20:05 PDT 2012


On Sun, Oct 21, 2012 at 12:53:15PM +0200, Lekensteyn wrote:
> From: Peter Wu <lekensteyn at 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 <lekensteyn at 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


More information about the Nouveau mailing list