When the number of extension blocks in EDID is too big, it's more likely a broken data, thus better to skip them.
We've got a bug report that a machine spews "invalid block EDID" errors at boot for 400 times which delays the boot very much, and this patch fixes it. Certainly it's a hardware-specific problem, but it's anyway safer to avoid such almost unrealistic setups. Signed-off-by: Takashi Iwai <tiwai at suse.de> --- drivers/gpu/drm/drm_edid.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index eb92fe2..61e4cf1 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -321,6 +321,13 @@ drm_do_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter) if (i == 4) goto carp; + if (block[0x7e] > 20) { + /* too many extensions -- something is wrong */ + DRM_DEBUG_KMS("drm: %s: ignoring too many extensions %d\n", + adapter->name, block[0x7e]); + block[0x7e] = 0; + } + /* if there's no extensions, we're done */ if (block[0x7e] == 0) return block; -- 1.7.10.3