On Fri, Jul 10, 2015 at 02:10:54PM +0300, Antti Koskipaa wrote:
> VBT version 196 increased the size of common_child_dev_config. The parser
> code assumed that the size of this structure would not change.
> 
> So now, instead of checking for smaller size, check that the VBT entry is
> not too large and memcpy only child_dev_size amount of data, leaving any
> trailing entries as zero. If this is not good enough for the future,
> we can always sprinkle extra version checks in there.
> 
> Signed-off-by: Antti Koskipaa <antti.koski...@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_bios.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_bios.c 
> b/drivers/gpu/drm/i915/intel_bios.c
> index 2ff9eb0..763a636 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -1022,10 +1022,15 @@ parse_device_mapping(struct drm_i915_private 
> *dev_priv,
>               DRM_DEBUG_KMS("No general definition block is found, no devices 
> defined.\n");
>               return;
>       }
> -     if (p_defs->child_dev_size < sizeof(*p_child)) {
> +     /* Historically, child_dev_size has to be at least 33 bytes in size. */
> +     if (p_defs->child_dev_size < 33) {
>               DRM_ERROR("General definiton block child device size is too 
> small.\n");

"definition"

>               return;
>       }
> +     if (p_defs->child_dev_size > sizeof(*p_child)) {
> +             DRM_ERROR("General definiton block child device size is too 
> large.\n");

"definition"

> +             return;
> +     }
>       /* get the block size of general definitions */
>       block_size = get_blocksize(p_defs);
>       /* get the number of child device */
> @@ -1070,7 +1075,7 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
>  
>               child_dev_ptr = dev_priv->vbt.child_dev + count;
>               count++;
> -             memcpy(child_dev_ptr, p_child, sizeof(*p_child));
> +             memcpy(child_dev_ptr, p_child, p_defs->child_dev_size);
>       }
>       return;
>  }
> -- 
> 2.3.6
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to