intel-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: David Weinehall <david.weinehall@linux.intel.com>
To: Antti Koskipaa <antti.koskipaa@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 1/2 v2] drm/i915: Allow parsing of variable size child device entries from VBT
Date: Tue, 4 Aug 2015 16:55:52 +0300	[thread overview]
Message-ID: <20150804135552.GC6150@boom> (raw)
In-Reply-To: <1436526655-2965-2-git-send-email-antti.koskipaa@linux.intel.com>

VBT version 196 increased the size of common_child_dev_config. The parser
code assumed that the size of this structure would not change.

The modified code now copies the amount needed based on the VBT version,
and emits a debug message if the VBT version is unknown (too new);
since the struct config block won't shrink in newer versions it should
be harmless to copy the maximum known size in such cases, so that's
what we do, but emitting the warning is probably sensible anyway.

In the longer run it might make sense to modify the parser code to
use a version/feature mapping, rather than hardcoding things like this,
but for now the variants are fairly managable.

v2: Stricter size checks

Signed-off-by: David Weinehall <david.weinehall@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_bios.c |   26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 2ff9eb00fdec..8a1f3e1fc598 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -1015,15 +1015,33 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
 	const union child_device_config *p_child;
 	union child_device_config *child_dev_ptr;
 	int i, child_device_num, count;
-	u16	block_size;
+	u8 expected_size;
+	u16 block_size;
 
 	p_defs = find_section(bdb, BDB_GENERAL_DEFINITIONS);
 	if (!p_defs) {
 		DRM_DEBUG_KMS("No general definition block is found, no devices defined.\n");
 		return;
 	}
-	if (p_defs->child_dev_size < sizeof(*p_child)) {
-		DRM_ERROR("General definiton block child device size is too small.\n");
+	if (bdb->version < 195) {
+		expected_size = 33;
+	} else if (bdb->version == 195) {
+		expected_size = 37;
+	} else if (bdb->version <= 197) {
+		expected_size = 38;
+	} else {
+		expected_size = 38;
+		DRM_DEBUG_DRIVER("Expected child_device_config size for BDB version %u not known; assuming %u\n", expected_size);
+	}
+
+	if (expected_size > sizeof(*p_child)) {
+		DRM_ERROR("child_device_config cannot fit in p_child\n");
+		return;
+	}
+
+	if (p_defs->child_dev_size != expected_size) {
+		DRM_ERROR("Size mismatch; child_device_config size=%u (expected %u); bdb->version: %u\n",
+			  p_defs->child_dev_size, expected_size, bdb->version);
 		return;
 	}
 	/* get the block size of general definitions */
@@ -1070,7 +1088,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;
 }
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

  parent reply	other threads:[~2015-08-04 13:55 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-10 11:10 [PATCH 0/2] VBT and I_boost fixes Antti Koskipaa
2015-07-10 11:10 ` [PATCH 1/2] drm/i915: Allow parsing of variable size child device entries from VBT Antti Koskipaa
2015-07-10 12:32   ` David Weinehall
2015-07-13  9:24   ` Daniel Vetter
2015-07-14  7:11     ` David Weinehall
2015-07-14  8:01       ` Daniel Vetter
2015-08-04 13:55   ` David Weinehall [this message]
2015-08-05  8:59     ` [PATCH 1/2 v2] " Daniel Vetter
2015-08-05 15:32       ` David Weinehall
2015-08-06 12:18         ` Daniel Vetter
2015-08-06 14:12           ` David Weinehall
2015-08-06 13:59       ` Michel Thierry
2015-08-06 14:08         ` David Weinehall
2015-08-06 15:31           ` Daniel Vetter
2015-08-12 10:29             ` [PATCH 1/2 v2 addendum] " David Weinehall
2015-08-12 12:13               ` Jani Nikula
2015-08-13 10:30                 ` David Weinehall
2015-08-13 11:35                   ` Jani Nikula
2015-08-12 14:19               ` Jani Nikula
2015-08-13 13:14                 ` [PATCH 1/2 v2 addendum v2] " David Weinehall
2015-08-14  8:07                   ` Timo Aaltonen
2015-08-14  8:42                   ` Jani Nikula
2015-08-14  9:40                     ` Jani Nikula
2015-07-10 11:10 ` [PATCH 2/2] drm/i915: Per-DDI I_boost override Antti Koskipaa
2015-08-06 14:11   ` David Weinehall
2015-08-06 15:31     ` Daniel Vetter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150804135552.GC6150@boom \
    --to=david.weinehall@linux.intel.com \
    --cc=antti.koskipaa@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).