[Intel-gfx] [PATCH 3/4] drm/i915/bios: make sure to check vbt size

Jani Nikula jani.nikula at linux.intel.com
Fri Nov 8 10:08:52 UTC 2019


On Thu, 07 Nov 2019, Lucas De Marchi <lucas.demarchi at intel.com> wrote:
> When we call intel_bios_is_valid_vbt(), size may not actually be the
> size of the VBT, but rather the size of the blob the VBT is contained
> in. For example, when mapping the PCI oprom, size will be the entire
> oprom size. We don't want to read beyond what is reported to be the
> VBT. So make sure we vbt->vbt_size makes sense and use that for
> the latter checks.
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_bios.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> index 1f83616cfc32..671bbce6ba5b 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -1777,11 +1777,13 @@ bool intel_bios_is_valid_vbt(const void *buf, size_t size)
>  	if (!vbt)
>  		return false;
>  
> -	if (sizeof(struct vbt_header) > size) {
> +	if (sizeof(struct vbt_header) > size || vbt->vbt_size > size) {
>  		DRM_DEBUG_DRIVER("VBT header incomplete\n");

Nitpick #1, semantically you should check the VBT signature before you
know ->vbt_size might make sense.

Nitpick #2, the debug message becomes increasingly non-informative. But
basically most messages in this function are less than stellar.

In any case, the goal is sane,

Reviewed-by: Jani Nikula <jani.nikula at intel.com>

>  		return false;
>  	}
>  
> +	size = vbt->vbt_size;
> +
>  	if (memcmp(vbt->signature, "$VBT", 4)) {
>  		DRM_DEBUG_DRIVER("VBT invalid signature\n");
>  		return false;

-- 
Jani Nikula, Intel Open Source Graphics Center


More information about the Intel-gfx mailing list