From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com ([192.55.52.93]:47211 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751768AbeDKJBE (ORCPT ); Wed, 11 Apr 2018 05:01:04 -0400 From: Jani Nikula To: intel-gfx@lists.freedesktop.org Cc: jani.nikula@intel.com, stable@vger.kernel.org, Fei Li Subject: [PATCH] drm/i915/bios: filter out invalid DDC pins from VBT child devices Date: Wed, 11 Apr 2018 12:01:46 +0300 Message-Id: <20180411090146.12689-1-jani.nikula@intel.com> Sender: stable-owner@vger.kernel.org List-ID: The VBT contains the DDC pin to use for specific ports. Alas, sometimes the field appears to contain bogus data, and while we check for it later on in intel_gmbus_get_adapter() we fail to check the returned NULL on errors. Oops results. The simplest approach seems to be to catch and ignore the bogus DDC pins already at the VBT parsing phase, reverting to fixed per port default pins. This doesn't guarantee display working, but at least it prevents the oops. And we continue to be fuzzed by VBT. One affected machine is Dell Latitude 5590 where a BIOS upgrade added invalid DDC pins. Typical backtrace: [ 35.461411] WARN_ON(!intel_gmbus_is_valid_pin(dev_priv, pin)) [ 35.461432] WARNING: CPU: 6 PID: 411 at drivers/gpu/drm/i915/intel_i2c.c:844 intel_gmbus_get_adapter+0x32/0x37 [i915] [ 35.461437] Modules linked in: i915 ahci libahci dm_snapshot dm_bufio dm_raid raid456 async_raid6_recov async_pq raid6_pq async_xor xor async_memcpy async_tx [ 35.461445] CPU: 6 PID: 411 Comm: kworker/u16:2 Not tainted 4.16.0-rc7.x64-g1cda370ffded #1 [ 35.461447] Hardware name: Dell Inc. Latitude 5590/0MM81M, BIOS 1.1.9 03/13/2018 [ 35.461450] Workqueue: events_unbound async_run_entry_fn [ 35.461465] RIP: 0010:intel_gmbus_get_adapter+0x32/0x37 [i915] [ 35.461467] RSP: 0018:ffff9b4e43d47c40 EFLAGS: 00010286 [ 35.461469] RAX: 0000000000000000 RBX: ffff98f90639f800 RCX: ffffffffae051960 [ 35.461471] RDX: 0000000000000001 RSI: 0000000000000092 RDI: 0000000000000246 [ 35.461472] RBP: ffff98f905410000 R08: 0000004d062a83f6 R09: 00000000000003bd [ 35.461474] R10: 0000000000000031 R11: ffffffffad4eda58 R12: ffff98f905410000 [ 35.461475] R13: ffff98f9064c1000 R14: ffff9b4e43d47cf0 R15: ffff98f905410000 [ 35.461477] FS: 0000000000000000(0000) GS:ffff98f92e580000(0000) knlGS:0000000000000000 [ 35.461479] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 35.461481] CR2: 00007f5682359008 CR3: 00000001b700c005 CR4: 00000000003606e0 [ 35.461483] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 35.461484] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 35.461486] Call Trace: [ 35.461501] intel_hdmi_set_edid+0x37/0x27f [i915] [ 35.461515] intel_hdmi_detect+0x7c/0x97 [i915] [ 35.461518] drm_helper_probe_single_connector_modes+0xe1/0x6c0 [ 35.461521] drm_setup_crtcs+0x129/0xa6a [ 35.461523] ? __switch_to_asm+0x34/0x70 [ 35.461525] ? __switch_to_asm+0x34/0x70 [ 35.461527] ? __switch_to_asm+0x40/0x70 [ 35.461528] ? __switch_to_asm+0x34/0x70 [ 35.461529] ? __switch_to_asm+0x40/0x70 [ 35.461531] ? __switch_to_asm+0x34/0x70 [ 35.461532] ? __switch_to_asm+0x40/0x70 [ 35.461534] ? __switch_to_asm+0x34/0x70 [ 35.461536] __drm_fb_helper_initial_config_and_unlock+0x34/0x46f [ 35.461538] ? __switch_to_asm+0x40/0x70 [ 35.461541] ? _cond_resched+0x10/0x33 [ 35.461557] intel_fbdev_initial_config+0xf/0x1c [i915] [ 35.461560] async_run_entry_fn+0x2e/0xf5 [ 35.461563] process_one_work+0x15b/0x364 [ 35.461565] worker_thread+0x2c/0x3a0 [ 35.461567] ? process_one_work+0x364/0x364 [ 35.461568] kthread+0x10c/0x122 [ 35.461570] ? _kthread_create_on_node+0x5d/0x5d [ 35.461572] ret_from_fork+0x35/0x40 [ 35.461574] Code: 74 16 89 f6 48 8d 04 b6 48 c1 e0 05 48 29 f0 48 8d 84 c7 e8 11 00 00 c3 48 c7 c6 b0 19 1e c0 48 c7 c7 64 8a 1c c0 e8 47 88 ed ec <0f> 0b 31 c0 c3 8b 87 a4 04 00 00 80 e4 fc 09 c6 89 b7 a4 04 00 [ 35.461604] WARNING: CPU: 6 PID: 411 at drivers/gpu/drm/i915/intel_i2c.c:844 intel_gmbus_get_adapter+0x32/0x37 [i915] [ 35.461606] ---[ end trace 4fe1e63e2dd93373 ]--- [ 35.461609] BUG: unable to handle kernel NULL pointer dereference at 0000000000000010 [ 35.461613] IP: i2c_transfer+0x4/0x86 [ 35.461614] PGD 0 P4D 0 [ 35.461616] Oops: 0000 [#1] SMP PTI [ 35.461618] Modules linked in: i915 ahci libahci dm_snapshot dm_bufio dm_raid raid456 async_raid6_recov async_pq raid6_pq async_xor xor async_memcpy async_tx [ 35.461624] CPU: 6 PID: 411 Comm: kworker/u16:2 Tainted: G W 4.16.0-rc7.x64-g1cda370ffded #1 [ 35.461625] Hardware name: Dell Inc. Latitude 5590/0MM81M, BIOS 1.1.9 03/13/2018 [ 35.461628] Workqueue: events_unbound async_run_entry_fn [ 35.461630] RIP: 0010:i2c_transfer+0x4/0x86 [ 35.461631] RSP: 0018:ffff9b4e43d47b30 EFLAGS: 00010246 [ 35.461633] RAX: ffff9b4e43d47b6e RBX: 0000000000000005 RCX: 0000000000000001 [ 35.461635] RDX: 0000000000000002 RSI: ffff9b4e43d47b80 RDI: 0000000000000000 [ 35.461636] RBP: ffff9b4e43d47bd8 R08: 0000004d062a83f6 R09: 00000000000003bd [ 35.461638] R10: 0000000000000031 R11: ffffffffad4eda58 R12: 0000000000000002 [ 35.461639] R13: 0000000000000001 R14: ffff9b4e43d47b6f R15: ffff9b4e43d47c07 [ 35.461641] FS: 0000000000000000(0000) GS:ffff98f92e580000(0000) knlGS:0000000000000000 [ 35.461643] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 35.461645] CR2: 0000000000000010 CR3: 00000001b700c005 CR4: 00000000003606e0 [ 35.461646] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 35.461647] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 35.461649] Call Trace: [ 35.461652] drm_do_probe_ddc_edid+0xb3/0x128 [ 35.461654] drm_get_edid+0xe5/0x38d [ 35.461669] intel_hdmi_set_edid+0x45/0x27f [i915] [ 35.461684] intel_hdmi_detect+0x7c/0x97 [i915] [ 35.461687] drm_helper_probe_single_connector_modes+0xe1/0x6c0 [ 35.461689] drm_setup_crtcs+0x129/0xa6a [ 35.461691] ? __switch_to_asm+0x34/0x70 [ 35.461693] ? __switch_to_asm+0x34/0x70 [ 35.461694] ? __switch_to_asm+0x40/0x70 [ 35.461696] ? __switch_to_asm+0x34/0x70 [ 35.461697] ? __switch_to_asm+0x40/0x70 [ 35.461698] ? __switch_to_asm+0x34/0x70 [ 35.461700] ? __switch_to_asm+0x40/0x70 [ 35.461701] ? __switch_to_asm+0x34/0x70 [ 35.461703] __drm_fb_helper_initial_config_and_unlock+0x34/0x46f [ 35.461705] ? __switch_to_asm+0x40/0x70 [ 35.461707] ? _cond_resched+0x10/0x33 [ 35.461724] intel_fbdev_initial_config+0xf/0x1c [i915] [ 35.461727] async_run_entry_fn+0x2e/0xf5 [ 35.461729] process_one_work+0x15b/0x364 [ 35.461731] worker_thread+0x2c/0x3a0 [ 35.461733] ? process_one_work+0x364/0x364 [ 35.461734] kthread+0x10c/0x122 [ 35.461736] ? _kthread_create_on_node+0x5d/0x5d [ 35.461738] ret_from_fork+0x35/0x40 [ 35.461739] Code: 5c fa e1 ad 48 89 df e8 ea fb ff ff e9 2a ff ff ff 0f 1f 44 00 00 31 c0 e9 43 fd ff ff 31 c0 45 31 e4 e9 c5 fd ff ff 41 54 55 53 <48> 8b 47 10 48 83 78 10 00 74 70 41 89 d4 48 89 f5 48 89 fb 65 [ 35.461756] RIP: i2c_transfer+0x4/0x86 RSP: ffff9b4e43d47b30 [ 35.461757] CR2: 0000000000000010 [ 35.461759] ---[ end trace 4fe1e63e2dd93374 ]--- Based on a patch by Fei Li. Cc: stable@vger.kernel.org Cc: Fei Li Co-developed-by: Fei Li Reported-by: Pavel Nakonechnyi Reported-by: Seweryn Kokot Reported-by: Laszlo Valko Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105549 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105961 Signed-off-by: Jani Nikula --- drivers/gpu/drm/i915/intel_bios.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c index c5c7530ba157..6db845991a69 100644 --- a/drivers/gpu/drm/i915/intel_bios.c +++ b/drivers/gpu/drm/i915/intel_bios.c @@ -1256,7 +1256,6 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port, return; aux_channel = child->aux_channel; - ddc_pin = child->ddc_pin; is_dvi = child->device_type & DEVICE_TYPE_TMDS_DVI_SIGNALING; is_dp = child->device_type & DEVICE_TYPE_DISPLAYPORT_OUTPUT; @@ -1303,9 +1302,15 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port, DRM_DEBUG_KMS("Port %c is internal DP\n", port_name(port)); if (is_dvi) { - info->alternate_ddc_pin = map_ddc_pin(dev_priv, ddc_pin); - - sanitize_ddc_pin(dev_priv, port); + ddc_pin = map_ddc_pin(dev_priv, child->ddc_pin); + if (intel_gmbus_is_valid_pin(dev_priv, ddc_pin)) { + info->alternate_ddc_pin = ddc_pin; + sanitize_ddc_pin(dev_priv, port); + } else { + DRM_DEBUG_KMS("Port %c has invalid DDC pin %d, " + "reverting to defaults\n", + port_name(port), ddc_pin); + } } if (is_dp) { -- 2.11.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: [PATCH] drm/i915/bios: filter out invalid DDC pins from VBT child devices Date: Wed, 11 Apr 2018 12:01:46 +0300 Message-ID: <20180411090146.12689-1-jani.nikula@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 648FB6E57E for ; Wed, 11 Apr 2018 09:01:02 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: jani.nikula@intel.com, Fei Li , stable@vger.kernel.org List-Id: intel-gfx@lists.freedesktop.org VGhlIFZCVCBjb250YWlucyB0aGUgRERDIHBpbiB0byB1c2UgZm9yIHNwZWNpZmljIHBvcnRzLiBB bGFzLCBzb21ldGltZXMKdGhlIGZpZWxkIGFwcGVhcnMgdG8gY29udGFpbiBib2d1cyBkYXRhLCBh bmQgd2hpbGUgd2UgY2hlY2sgZm9yIGl0IGxhdGVyCm9uIGluIGludGVsX2dtYnVzX2dldF9hZGFw dGVyKCkgd2UgZmFpbCB0byBjaGVjayB0aGUgcmV0dXJuZWQgTlVMTCBvbgplcnJvcnMuIE9vcHMg cmVzdWx0cy4KClRoZSBzaW1wbGVzdCBhcHByb2FjaCBzZWVtcyB0byBiZSB0byBjYXRjaCBhbmQg aWdub3JlIHRoZSBib2d1cyBEREMgcGlucwphbHJlYWR5IGF0IHRoZSBWQlQgcGFyc2luZyBwaGFz ZSwgcmV2ZXJ0aW5nIHRvIGZpeGVkIHBlciBwb3J0IGRlZmF1bHQKcGlucy4gVGhpcyBkb2Vzbid0 IGd1YXJhbnRlZSBkaXNwbGF5IHdvcmtpbmcsIGJ1dCBhdCBsZWFzdCBpdCBwcmV2ZW50cwp0aGUg b29wcy4gQW5kIHdlIGNvbnRpbnVlIHRvIGJlIGZ1enplZCBieSBWQlQuCgpPbmUgYWZmZWN0ZWQg bWFjaGluZSBpcyBEZWxsIExhdGl0dWRlIDU1OTAgd2hlcmUgYSBCSU9TIHVwZ3JhZGUgYWRkZWQK aW52YWxpZCBEREMgcGlucy4KClR5cGljYWwgYmFja3RyYWNlOgoKWyAgIDM1LjQ2MTQxMV0gV0FS Tl9PTighaW50ZWxfZ21idXNfaXNfdmFsaWRfcGluKGRldl9wcml2LCBwaW4pKQpbICAgMzUuNDYx NDMyXSBXQVJOSU5HOiBDUFU6IDYgUElEOiA0MTEgYXQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfaTJjLmM6ODQ0IGludGVsX2dtYnVzX2dldF9hZGFwdGVyKzB4MzIvMHgzNyBbaTkxNV0KWyAg IDM1LjQ2MTQzN10gTW9kdWxlcyBsaW5rZWQgaW46IGk5MTUgYWhjaSBsaWJhaGNpIGRtX3NuYXBz aG90IGRtX2J1ZmlvIGRtX3JhaWQgcmFpZDQ1NiBhc3luY19yYWlkNl9yZWNvdiBhc3luY19wcSBy YWlkNl9wcSBhc3luY194b3IgeG9yIGFzeW5jX21lbWNweSBhc3luY190eApbICAgMzUuNDYxNDQ1 XSBDUFU6IDYgUElEOiA0MTEgQ29tbToga3dvcmtlci91MTY6MiBOb3QgdGFpbnRlZCA0LjE2LjAt cmM3Lng2NC1nMWNkYTM3MGZmZGVkICMxClsgICAzNS40NjE0NDddIEhhcmR3YXJlIG5hbWU6IERl bGwgSW5jLiBMYXRpdHVkZSA1NTkwLzBNTTgxTSwgQklPUyAxLjEuOSAwMy8xMy8yMDE4ClsgICAz NS40NjE0NTBdIFdvcmtxdWV1ZTogZXZlbnRzX3VuYm91bmQgYXN5bmNfcnVuX2VudHJ5X2ZuClsg ICAzNS40NjE0NjVdIFJJUDogMDAxMDppbnRlbF9nbWJ1c19nZXRfYWRhcHRlcisweDMyLzB4Mzcg W2k5MTVdClsgICAzNS40NjE0NjddIFJTUDogMDAxODpmZmZmOWI0ZTQzZDQ3YzQwIEVGTEFHUzog MDAwMTAyODYKWyAgIDM1LjQ2MTQ2OV0gUkFYOiAwMDAwMDAwMDAwMDAwMDAwIFJCWDogZmZmZjk4 ZjkwNjM5ZjgwMCBSQ1g6IGZmZmZmZmZmYWUwNTE5NjAKWyAgIDM1LjQ2MTQ3MV0gUkRYOiAwMDAw MDAwMDAwMDAwMDAxIFJTSTogMDAwMDAwMDAwMDAwMDA5MiBSREk6IDAwMDAwMDAwMDAwMDAyNDYK WyAgIDM1LjQ2MTQ3Ml0gUkJQOiBmZmZmOThmOTA1NDEwMDAwIFIwODogMDAwMDAwNGQwNjJhODNm NiBSMDk6IDAwMDAwMDAwMDAwMDAzYmQKWyAgIDM1LjQ2MTQ3NF0gUjEwOiAwMDAwMDAwMDAwMDAw MDMxIFIxMTogZmZmZmZmZmZhZDRlZGE1OCBSMTI6IGZmZmY5OGY5MDU0MTAwMDAKWyAgIDM1LjQ2 MTQ3NV0gUjEzOiBmZmZmOThmOTA2NGMxMDAwIFIxNDogZmZmZjliNGU0M2Q0N2NmMCBSMTU6IGZm ZmY5OGY5MDU0MTAwMDAKWyAgIDM1LjQ2MTQ3N10gRlM6ICAwMDAwMDAwMDAwMDAwMDAwKDAwMDAp IEdTOmZmZmY5OGY5MmU1ODAwMDAoMDAwMCkga25sR1M6MDAwMDAwMDAwMDAwMDAwMApbICAgMzUu NDYxNDc5XSBDUzogIDAwMTAgRFM6IDAwMDAgRVM6IDAwMDAgQ1IwOiAwMDAwMDAwMDgwMDUwMDMz ClsgICAzNS40NjE0ODFdIENSMjogMDAwMDdmNTY4MjM1OTAwOCBDUjM6IDAwMDAwMDAxYjcwMGMw MDUgQ1I0OiAwMDAwMDAwMDAwMzYwNmUwClsgICAzNS40NjE0ODNdIERSMDogMDAwMDAwMDAwMDAw MDAwMCBEUjE6IDAwMDAwMDAwMDAwMDAwMDAgRFIyOiAwMDAwMDAwMDAwMDAwMDAwClsgICAzNS40 NjE0ODRdIERSMzogMDAwMDAwMDAwMDAwMDAwMCBEUjY6IDAwMDAwMDAwZmZmZTBmZjAgRFI3OiAw MDAwMDAwMDAwMDAwNDAwClsgICAzNS40NjE0ODZdIENhbGwgVHJhY2U6ClsgICAzNS40NjE1MDFd ICBpbnRlbF9oZG1pX3NldF9lZGlkKzB4MzcvMHgyN2YgW2k5MTVdClsgICAzNS40NjE1MTVdICBp bnRlbF9oZG1pX2RldGVjdCsweDdjLzB4OTcgW2k5MTVdClsgICAzNS40NjE1MThdICBkcm1faGVs cGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMrMHhlMS8weDZjMApbICAgMzUuNDYxNTIx XSAgZHJtX3NldHVwX2NydGNzKzB4MTI5LzB4YTZhClsgICAzNS40NjE1MjNdICA/IF9fc3dpdGNo X3RvX2FzbSsweDM0LzB4NzAKWyAgIDM1LjQ2MTUyNV0gID8gX19zd2l0Y2hfdG9fYXNtKzB4MzQv MHg3MApbICAgMzUuNDYxNTI3XSAgPyBfX3N3aXRjaF90b19hc20rMHg0MC8weDcwClsgICAzNS40 NjE1MjhdICA/IF9fc3dpdGNoX3RvX2FzbSsweDM0LzB4NzAKWyAgIDM1LjQ2MTUyOV0gID8gX19z d2l0Y2hfdG9fYXNtKzB4NDAvMHg3MApbICAgMzUuNDYxNTMxXSAgPyBfX3N3aXRjaF90b19hc20r MHgzNC8weDcwClsgICAzNS40NjE1MzJdICA/IF9fc3dpdGNoX3RvX2FzbSsweDQwLzB4NzAKWyAg IDM1LjQ2MTUzNF0gID8gX19zd2l0Y2hfdG9fYXNtKzB4MzQvMHg3MApbICAgMzUuNDYxNTM2XSAg X19kcm1fZmJfaGVscGVyX2luaXRpYWxfY29uZmlnX2FuZF91bmxvY2srMHgzNC8weDQ2ZgpbICAg MzUuNDYxNTM4XSAgPyBfX3N3aXRjaF90b19hc20rMHg0MC8weDcwClsgICAzNS40NjE1NDFdICA/ IF9jb25kX3Jlc2NoZWQrMHgxMC8weDMzClsgICAzNS40NjE1NTddICBpbnRlbF9mYmRldl9pbml0 aWFsX2NvbmZpZysweGYvMHgxYyBbaTkxNV0KWyAgIDM1LjQ2MTU2MF0gIGFzeW5jX3J1bl9lbnRy eV9mbisweDJlLzB4ZjUKWyAgIDM1LjQ2MTU2M10gIHByb2Nlc3Nfb25lX3dvcmsrMHgxNWIvMHgz NjQKWyAgIDM1LjQ2MTU2NV0gIHdvcmtlcl90aHJlYWQrMHgyYy8weDNhMApbICAgMzUuNDYxNTY3 XSAgPyBwcm9jZXNzX29uZV93b3JrKzB4MzY0LzB4MzY0ClsgICAzNS40NjE1NjhdICBrdGhyZWFk KzB4MTBjLzB4MTIyClsgICAzNS40NjE1NzBdICA/IF9rdGhyZWFkX2NyZWF0ZV9vbl9ub2RlKzB4 NWQvMHg1ZApbICAgMzUuNDYxNTcyXSAgcmV0X2Zyb21fZm9yaysweDM1LzB4NDAKWyAgIDM1LjQ2 MTU3NF0gQ29kZTogNzQgMTYgODkgZjYgNDggOGQgMDQgYjYgNDggYzEgZTAgMDUgNDggMjkgZjAg NDggOGQgODQgYzcgZTggMTEgMDAgMDAgYzMgNDggYzcgYzYgYjAgMTkgMWUgYzAgNDggYzcgYzcg NjQgOGEgMWMgYzAgZTggNDcgODggZWQgZWMgPDBmPiAwYiAzMSBjMCBjMyA4YiA4NyBhNCAwNCAw MCAwMCA4MCBlNCBmYyAwOSBjNiA4OSBiNyBhNCAwNCAwMApbICAgMzUuNDYxNjA0XSBXQVJOSU5H OiBDUFU6IDYgUElEOiA0MTEgYXQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmM6ODQ0 IGludGVsX2dtYnVzX2dldF9hZGFwdGVyKzB4MzIvMHgzNyBbaTkxNV0KWyAgIDM1LjQ2MTYwNl0g LS0tWyBlbmQgdHJhY2UgNGZlMWU2M2UyZGQ5MzM3MyBdLS0tClsgICAzNS40NjE2MDldIEJVRzog dW5hYmxlIHRvIGhhbmRsZSBrZXJuZWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGF0IDAwMDAw MDAwMDAwMDAwMTAKWyAgIDM1LjQ2MTYxM10gSVA6IGkyY190cmFuc2ZlcisweDQvMHg4NgpbICAg MzUuNDYxNjE0XSBQR0QgMCBQNEQgMApbICAgMzUuNDYxNjE2XSBPb3BzOiAwMDAwIFsjMV0gU01Q IFBUSQpbICAgMzUuNDYxNjE4XSBNb2R1bGVzIGxpbmtlZCBpbjogaTkxNSBhaGNpIGxpYmFoY2kg ZG1fc25hcHNob3QgZG1fYnVmaW8gZG1fcmFpZCByYWlkNDU2IGFzeW5jX3JhaWQ2X3JlY292IGFz eW5jX3BxIHJhaWQ2X3BxIGFzeW5jX3hvciB4b3IgYXN5bmNfbWVtY3B5IGFzeW5jX3R4ClsgICAz NS40NjE2MjRdIENQVTogNiBQSUQ6IDQxMSBDb21tOiBrd29ya2VyL3UxNjoyIFRhaW50ZWQ6IEcg ICAgICAgIFcgICAgICAgIDQuMTYuMC1yYzcueDY0LWcxY2RhMzcwZmZkZWQgIzEKWyAgIDM1LjQ2 MTYyNV0gSGFyZHdhcmUgbmFtZTogRGVsbCBJbmMuIExhdGl0dWRlIDU1OTAvME1NODFNLCBCSU9T IDEuMS45IDAzLzEzLzIwMTgKWyAgIDM1LjQ2MTYyOF0gV29ya3F1ZXVlOiBldmVudHNfdW5ib3Vu ZCBhc3luY19ydW5fZW50cnlfZm4KWyAgIDM1LjQ2MTYzMF0gUklQOiAwMDEwOmkyY190cmFuc2Zl cisweDQvMHg4NgpbICAgMzUuNDYxNjMxXSBSU1A6IDAwMTg6ZmZmZjliNGU0M2Q0N2IzMCBFRkxB R1M6IDAwMDEwMjQ2ClsgICAzNS40NjE2MzNdIFJBWDogZmZmZjliNGU0M2Q0N2I2ZSBSQlg6IDAw MDAwMDAwMDAwMDAwMDUgUkNYOiAwMDAwMDAwMDAwMDAwMDAxClsgICAzNS40NjE2MzVdIFJEWDog MDAwMDAwMDAwMDAwMDAwMiBSU0k6IGZmZmY5YjRlNDNkNDdiODAgUkRJOiAwMDAwMDAwMDAwMDAw MDAwClsgICAzNS40NjE2MzZdIFJCUDogZmZmZjliNGU0M2Q0N2JkOCBSMDg6IDAwMDAwMDRkMDYy YTgzZjYgUjA5OiAwMDAwMDAwMDAwMDAwM2JkClsgICAzNS40NjE2MzhdIFIxMDogMDAwMDAwMDAw MDAwMDAzMSBSMTE6IGZmZmZmZmZmYWQ0ZWRhNTggUjEyOiAwMDAwMDAwMDAwMDAwMDAyClsgICAz NS40NjE2MzldIFIxMzogMDAwMDAwMDAwMDAwMDAwMSBSMTQ6IGZmZmY5YjRlNDNkNDdiNmYgUjE1 OiBmZmZmOWI0ZTQzZDQ3YzA3ClsgICAzNS40NjE2NDFdIEZTOiAgMDAwMDAwMDAwMDAwMDAwMCgw MDAwKSBHUzpmZmZmOThmOTJlNTgwMDAwKDAwMDApIGtubEdTOjAwMDAwMDAwMDAwMDAwMDAKWyAg IDM1LjQ2MTY0M10gQ1M6ICAwMDEwIERTOiAwMDAwIEVTOiAwMDAwIENSMDogMDAwMDAwMDA4MDA1 MDAzMwpbICAgMzUuNDYxNjQ1XSBDUjI6IDAwMDAwMDAwMDAwMDAwMTAgQ1IzOiAwMDAwMDAwMWI3 MDBjMDA1IENSNDogMDAwMDAwMDAwMDM2MDZlMApbICAgMzUuNDYxNjQ2XSBEUjA6IDAwMDAwMDAw MDAwMDAwMDAgRFIxOiAwMDAwMDAwMDAwMDAwMDAwIERSMjogMDAwMDAwMDAwMDAwMDAwMApbICAg MzUuNDYxNjQ3XSBEUjM6IDAwMDAwMDAwMDAwMDAwMDAgRFI2OiAwMDAwMDAwMGZmZmUwZmYwIERS NzogMDAwMDAwMDAwMDAwMDQwMApbICAgMzUuNDYxNjQ5XSBDYWxsIFRyYWNlOgpbICAgMzUuNDYx NjUyXSAgZHJtX2RvX3Byb2JlX2RkY19lZGlkKzB4YjMvMHgxMjgKWyAgIDM1LjQ2MTY1NF0gIGRy bV9nZXRfZWRpZCsweGU1LzB4MzhkClsgICAzNS40NjE2NjldICBpbnRlbF9oZG1pX3NldF9lZGlk KzB4NDUvMHgyN2YgW2k5MTVdClsgICAzNS40NjE2ODRdICBpbnRlbF9oZG1pX2RldGVjdCsweDdj LzB4OTcgW2k5MTVdClsgICAzNS40NjE2ODddICBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25u ZWN0b3JfbW9kZXMrMHhlMS8weDZjMApbICAgMzUuNDYxNjg5XSAgZHJtX3NldHVwX2NydGNzKzB4 MTI5LzB4YTZhClsgICAzNS40NjE2OTFdICA/IF9fc3dpdGNoX3RvX2FzbSsweDM0LzB4NzAKWyAg IDM1LjQ2MTY5M10gID8gX19zd2l0Y2hfdG9fYXNtKzB4MzQvMHg3MApbICAgMzUuNDYxNjk0XSAg PyBfX3N3aXRjaF90b19hc20rMHg0MC8weDcwClsgICAzNS40NjE2OTZdICA/IF9fc3dpdGNoX3Rv X2FzbSsweDM0LzB4NzAKWyAgIDM1LjQ2MTY5N10gID8gX19zd2l0Y2hfdG9fYXNtKzB4NDAvMHg3 MApbICAgMzUuNDYxNjk4XSAgPyBfX3N3aXRjaF90b19hc20rMHgzNC8weDcwClsgICAzNS40NjE3 MDBdICA/IF9fc3dpdGNoX3RvX2FzbSsweDQwLzB4NzAKWyAgIDM1LjQ2MTcwMV0gID8gX19zd2l0 Y2hfdG9fYXNtKzB4MzQvMHg3MApbICAgMzUuNDYxNzAzXSAgX19kcm1fZmJfaGVscGVyX2luaXRp YWxfY29uZmlnX2FuZF91bmxvY2srMHgzNC8weDQ2ZgpbICAgMzUuNDYxNzA1XSAgPyBfX3N3aXRj aF90b19hc20rMHg0MC8weDcwClsgICAzNS40NjE3MDddICA/IF9jb25kX3Jlc2NoZWQrMHgxMC8w eDMzClsgICAzNS40NjE3MjRdICBpbnRlbF9mYmRldl9pbml0aWFsX2NvbmZpZysweGYvMHgxYyBb aTkxNV0KWyAgIDM1LjQ2MTcyN10gIGFzeW5jX3J1bl9lbnRyeV9mbisweDJlLzB4ZjUKWyAgIDM1 LjQ2MTcyOV0gIHByb2Nlc3Nfb25lX3dvcmsrMHgxNWIvMHgzNjQKWyAgIDM1LjQ2MTczMV0gIHdv cmtlcl90aHJlYWQrMHgyYy8weDNhMApbICAgMzUuNDYxNzMzXSAgPyBwcm9jZXNzX29uZV93b3Jr KzB4MzY0LzB4MzY0ClsgICAzNS40NjE3MzRdICBrdGhyZWFkKzB4MTBjLzB4MTIyClsgICAzNS40 NjE3MzZdICA/IF9rdGhyZWFkX2NyZWF0ZV9vbl9ub2RlKzB4NWQvMHg1ZApbICAgMzUuNDYxNzM4 XSAgcmV0X2Zyb21fZm9yaysweDM1LzB4NDAKWyAgIDM1LjQ2MTczOV0gQ29kZTogNWMgZmEgZTEg YWQgNDggODkgZGYgZTggZWEgZmIgZmYgZmYgZTkgMmEgZmYgZmYgZmYgMGYgMWYgNDQgMDAgMDAg MzEgYzAgZTkgNDMgZmQgZmYgZmYgMzEgYzAgNDUgMzEgZTQgZTkgYzUgZmQgZmYgZmYgNDEgNTQg NTUgNTMgPDQ4PiA4YiA0NyAxMCA0OCA4MyA3OCAxMCAwMCA3NCA3MCA0MSA4OSBkNCA0OCA4OSBm NSA0OCA4OSBmYiA2NQpbICAgMzUuNDYxNzU2XSBSSVA6IGkyY190cmFuc2ZlcisweDQvMHg4NiBS U1A6IGZmZmY5YjRlNDNkNDdiMzAKWyAgIDM1LjQ2MTc1N10gQ1IyOiAwMDAwMDAwMDAwMDAwMDEw ClsgICAzNS40NjE3NTldIC0tLVsgZW5kIHRyYWNlIDRmZTFlNjNlMmRkOTMzNzQgXS0tLQoKQmFz ZWQgb24gYSBwYXRjaCBieSBGZWkgTGkuCgpDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZwpDYzog RmVpIExpIDxmZWkubGlAaW50ZWwuY29tPgpDby1kZXZlbG9wZWQtYnk6IEZlaSBMaSA8ZmVpLmxp QGludGVsLmNvbT4KUmVwb3J0ZWQtYnk6IFBhdmVsIE5ha29uZWNobnlpIDx6b3JnMTMzMUBnbWFp bC5jb20+ClJlcG9ydGVkLWJ5OiBTZXdlcnluIEtva290IDxzZXdrb2tvdEBnbWFpbC5jb20+ClJl cG9ydGVkLWJ5OiBMYXN6bG8gVmFsa28gPHZhbGtvQGxpbnV4LmthcmludGh5Lmh1PgpCdWd6aWxs YTogaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1NTQ5CkJ1 Z3ppbGxhOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDU5 NjEKU2lnbmVkLW9mZi1ieTogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMgfCAxMyArKysrKysrKystLS0tCiAx IGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Jpb3MuYwppbmRleCBjNWM3NTMwYmExNTcuLjZkYjg0NTk5MWE2OSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Jpb3MuYwpAQCAtMTI1Niw3ICsxMjU2LDYgQEAgc3RhdGljIHZvaWQg cGFyc2VfZGRpX3BvcnQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBv cnQgcG9ydCwKIAkJcmV0dXJuOwogCiAJYXV4X2NoYW5uZWwgPSBjaGlsZC0+YXV4X2NoYW5uZWw7 Ci0JZGRjX3BpbiA9IGNoaWxkLT5kZGNfcGluOwogCiAJaXNfZHZpID0gY2hpbGQtPmRldmljZV90 eXBlICYgREVWSUNFX1RZUEVfVE1EU19EVklfU0lHTkFMSU5HOwogCWlzX2RwID0gY2hpbGQtPmRl dmljZV90eXBlICYgREVWSUNFX1RZUEVfRElTUExBWVBPUlRfT1VUUFVUOwpAQCAtMTMwMyw5ICsx MzAyLDE1IEBAIHN0YXRpYyB2b2lkIHBhcnNlX2RkaV9wb3J0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwgZW51bSBwb3J0IHBvcnQsCiAJCURSTV9ERUJVR19LTVMoIlBvcnQgJWMg aXMgaW50ZXJuYWwgRFBcbiIsIHBvcnRfbmFtZShwb3J0KSk7CiAKIAlpZiAoaXNfZHZpKSB7Ci0J CWluZm8tPmFsdGVybmF0ZV9kZGNfcGluID0gbWFwX2RkY19waW4oZGV2X3ByaXYsIGRkY19waW4p OwotCi0JCXNhbml0aXplX2RkY19waW4oZGV2X3ByaXYsIHBvcnQpOworCQlkZGNfcGluID0gbWFw X2RkY19waW4oZGV2X3ByaXYsIGNoaWxkLT5kZGNfcGluKTsKKwkJaWYgKGludGVsX2dtYnVzX2lz X3ZhbGlkX3BpbihkZXZfcHJpdiwgZGRjX3BpbikpIHsKKwkJCWluZm8tPmFsdGVybmF0ZV9kZGNf cGluID0gZGRjX3BpbjsKKwkJCXNhbml0aXplX2RkY19waW4oZGV2X3ByaXYsIHBvcnQpOworCQl9 IGVsc2UgeworCQkJRFJNX0RFQlVHX0tNUygiUG9ydCAlYyBoYXMgaW52YWxpZCBEREMgcGluICVk LCAiCisJCQkJICAgICAgInJldmVydGluZyB0byBkZWZhdWx0c1xuIiwKKwkJCQkgICAgICBwb3J0 X25hbWUocG9ydCksIGRkY19waW4pOworCQl9CiAJfQogCiAJaWYgKGlzX2RwKSB7Ci0tIAoyLjEx LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=