From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com ([134.134.136.65]:31958 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750819AbeDKKMH (ORCPT ); Wed, 11 Apr 2018 06:12:07 -0400 From: Jani Nikula To: intel-gfx@lists.freedesktop.org Cc: stable@vger.kernel.org, Fei Li Subject: Re: [PATCH] drm/i915/bios: filter out invalid DDC pins from VBT child devices In-Reply-To: <20180411090146.12689-1-jani.nikula@intel.com> References: <20180411090146.12689-1-jani.nikula@intel.com> Date: Wed, 11 Apr 2018 13:12:53 +0300 Message-ID: <87tvsigifu.fsf@intel.com> MIME-Version: 1.0 Content-Type: text/plain Sender: stable-owner@vger.kernel.org List-ID: On Wed, 11 Apr 2018, Jani Nikula wrote: > 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 >>From the bug, Tested-by: Laszlo Valko > --- > 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) { -- Jani Nikula, Intel Open Source Technology Center From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH] drm/i915/bios: filter out invalid DDC pins from VBT child devices Date: Wed, 11 Apr 2018 13:12:53 +0300 Message-ID: <87tvsigifu.fsf@intel.com> References: <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 mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 413A86E59F for ; Wed, 11 Apr 2018 10:12:07 +0000 (UTC) In-Reply-To: <20180411090146.12689-1-jani.nikula@intel.com> 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: Fei Li , stable@vger.kernel.org List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCAxMSBBcHIgMjAxOCwgSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4g d3JvdGU6Cj4gVGhlIFZCVCBjb250YWlucyB0aGUgRERDIHBpbiB0byB1c2UgZm9yIHNwZWNpZmlj IHBvcnRzLiBBbGFzLCBzb21ldGltZXMKPiB0aGUgZmllbGQgYXBwZWFycyB0byBjb250YWluIGJv Z3VzIGRhdGEsIGFuZCB3aGlsZSB3ZSBjaGVjayBmb3IgaXQgbGF0ZXIKPiBvbiBpbiBpbnRlbF9n bWJ1c19nZXRfYWRhcHRlcigpIHdlIGZhaWwgdG8gY2hlY2sgdGhlIHJldHVybmVkIE5VTEwgb24K PiBlcnJvcnMuIE9vcHMgcmVzdWx0cy4KPgo+IFRoZSBzaW1wbGVzdCBhcHByb2FjaCBzZWVtcyB0 byBiZSB0byBjYXRjaCBhbmQgaWdub3JlIHRoZSBib2d1cyBEREMgcGlucwo+IGFscmVhZHkgYXQg dGhlIFZCVCBwYXJzaW5nIHBoYXNlLCByZXZlcnRpbmcgdG8gZml4ZWQgcGVyIHBvcnQgZGVmYXVs dAo+IHBpbnMuIFRoaXMgZG9lc24ndCBndWFyYW50ZWUgZGlzcGxheSB3b3JraW5nLCBidXQgYXQg bGVhc3QgaXQgcHJldmVudHMKPiB0aGUgb29wcy4gQW5kIHdlIGNvbnRpbnVlIHRvIGJlIGZ1enpl ZCBieSBWQlQuCj4KPiBPbmUgYWZmZWN0ZWQgbWFjaGluZSBpcyBEZWxsIExhdGl0dWRlIDU1OTAg d2hlcmUgYSBCSU9TIHVwZ3JhZGUgYWRkZWQKPiBpbnZhbGlkIEREQyBwaW5zLgo+Cj4gVHlwaWNh bCBiYWNrdHJhY2U6Cj4KPiBbICAgMzUuNDYxNDExXSBXQVJOX09OKCFpbnRlbF9nbWJ1c19pc192 YWxpZF9waW4oZGV2X3ByaXYsIHBpbikpCj4gWyAgIDM1LjQ2MTQzMl0gV0FSTklORzogQ1BVOiA2 IFBJRDogNDExIGF0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2kyYy5jOjg0NCBpbnRlbF9n bWJ1c19nZXRfYWRhcHRlcisweDMyLzB4MzcgW2k5MTVdCj4gWyAgIDM1LjQ2MTQzN10gTW9kdWxl cyBsaW5rZWQgaW46IGk5MTUgYWhjaSBsaWJhaGNpIGRtX3NuYXBzaG90IGRtX2J1ZmlvIGRtX3Jh aWQgcmFpZDQ1NiBhc3luY19yYWlkNl9yZWNvdiBhc3luY19wcSByYWlkNl9wcSBhc3luY194b3Ig eG9yIGFzeW5jX21lbWNweSBhc3luY190eAo+IFsgICAzNS40NjE0NDVdIENQVTogNiBQSUQ6IDQx MSBDb21tOiBrd29ya2VyL3UxNjoyIE5vdCB0YWludGVkIDQuMTYuMC1yYzcueDY0LWcxY2RhMzcw ZmZkZWQgIzEKPiBbICAgMzUuNDYxNDQ3XSBIYXJkd2FyZSBuYW1lOiBEZWxsIEluYy4gTGF0aXR1 ZGUgNTU5MC8wTU04MU0sIEJJT1MgMS4xLjkgMDMvMTMvMjAxOAo+IFsgICAzNS40NjE0NTBdIFdv cmtxdWV1ZTogZXZlbnRzX3VuYm91bmQgYXN5bmNfcnVuX2VudHJ5X2ZuCj4gWyAgIDM1LjQ2MTQ2 NV0gUklQOiAwMDEwOmludGVsX2dtYnVzX2dldF9hZGFwdGVyKzB4MzIvMHgzNyBbaTkxNV0KPiBb ICAgMzUuNDYxNDY3XSBSU1A6IDAwMTg6ZmZmZjliNGU0M2Q0N2M0MCBFRkxBR1M6IDAwMDEwMjg2 Cj4gWyAgIDM1LjQ2MTQ2OV0gUkFYOiAwMDAwMDAwMDAwMDAwMDAwIFJCWDogZmZmZjk4ZjkwNjM5 ZjgwMCBSQ1g6IGZmZmZmZmZmYWUwNTE5NjAKPiBbICAgMzUuNDYxNDcxXSBSRFg6IDAwMDAwMDAw MDAwMDAwMDEgUlNJOiAwMDAwMDAwMDAwMDAwMDkyIFJESTogMDAwMDAwMDAwMDAwMDI0Ngo+IFsg ICAzNS40NjE0NzJdIFJCUDogZmZmZjk4ZjkwNTQxMDAwMCBSMDg6IDAwMDAwMDRkMDYyYTgzZjYg UjA5OiAwMDAwMDAwMDAwMDAwM2JkCj4gWyAgIDM1LjQ2MTQ3NF0gUjEwOiAwMDAwMDAwMDAwMDAw MDMxIFIxMTogZmZmZmZmZmZhZDRlZGE1OCBSMTI6IGZmZmY5OGY5MDU0MTAwMDAKPiBbICAgMzUu NDYxNDc1XSBSMTM6IGZmZmY5OGY5MDY0YzEwMDAgUjE0OiBmZmZmOWI0ZTQzZDQ3Y2YwIFIxNTog ZmZmZjk4ZjkwNTQxMDAwMAo+IFsgICAzNS40NjE0NzddIEZTOiAgMDAwMDAwMDAwMDAwMDAwMCgw MDAwKSBHUzpmZmZmOThmOTJlNTgwMDAwKDAwMDApIGtubEdTOjAwMDAwMDAwMDAwMDAwMDAKPiBb ICAgMzUuNDYxNDc5XSBDUzogIDAwMTAgRFM6IDAwMDAgRVM6IDAwMDAgQ1IwOiAwMDAwMDAwMDgw MDUwMDMzCj4gWyAgIDM1LjQ2MTQ4MV0gQ1IyOiAwMDAwN2Y1NjgyMzU5MDA4IENSMzogMDAwMDAw MDFiNzAwYzAwNSBDUjQ6IDAwMDAwMDAwMDAzNjA2ZTAKPiBbICAgMzUuNDYxNDgzXSBEUjA6IDAw MDAwMDAwMDAwMDAwMDAgRFIxOiAwMDAwMDAwMDAwMDAwMDAwIERSMjogMDAwMDAwMDAwMDAwMDAw MAo+IFsgICAzNS40NjE0ODRdIERSMzogMDAwMDAwMDAwMDAwMDAwMCBEUjY6IDAwMDAwMDAwZmZm ZTBmZjAgRFI3OiAwMDAwMDAwMDAwMDAwNDAwCj4gWyAgIDM1LjQ2MTQ4Nl0gQ2FsbCBUcmFjZToK PiBbICAgMzUuNDYxNTAxXSAgaW50ZWxfaGRtaV9zZXRfZWRpZCsweDM3LzB4MjdmIFtpOTE1XQo+ IFsgICAzNS40NjE1MTVdICBpbnRlbF9oZG1pX2RldGVjdCsweDdjLzB4OTcgW2k5MTVdCj4gWyAg IDM1LjQ2MTUxOF0gIGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcysweGUx LzB4NmMwCj4gWyAgIDM1LjQ2MTUyMV0gIGRybV9zZXR1cF9jcnRjcysweDEyOS8weGE2YQo+IFsg ICAzNS40NjE1MjNdICA/IF9fc3dpdGNoX3RvX2FzbSsweDM0LzB4NzAKPiBbICAgMzUuNDYxNTI1 XSAgPyBfX3N3aXRjaF90b19hc20rMHgzNC8weDcwCj4gWyAgIDM1LjQ2MTUyN10gID8gX19zd2l0 Y2hfdG9fYXNtKzB4NDAvMHg3MAo+IFsgICAzNS40NjE1MjhdICA/IF9fc3dpdGNoX3RvX2FzbSsw eDM0LzB4NzAKPiBbICAgMzUuNDYxNTI5XSAgPyBfX3N3aXRjaF90b19hc20rMHg0MC8weDcwCj4g WyAgIDM1LjQ2MTUzMV0gID8gX19zd2l0Y2hfdG9fYXNtKzB4MzQvMHg3MAo+IFsgICAzNS40NjE1 MzJdICA/IF9fc3dpdGNoX3RvX2FzbSsweDQwLzB4NzAKPiBbICAgMzUuNDYxNTM0XSAgPyBfX3N3 aXRjaF90b19hc20rMHgzNC8weDcwCj4gWyAgIDM1LjQ2MTUzNl0gIF9fZHJtX2ZiX2hlbHBlcl9p bml0aWFsX2NvbmZpZ19hbmRfdW5sb2NrKzB4MzQvMHg0NmYKPiBbICAgMzUuNDYxNTM4XSAgPyBf X3N3aXRjaF90b19hc20rMHg0MC8weDcwCj4gWyAgIDM1LjQ2MTU0MV0gID8gX2NvbmRfcmVzY2hl ZCsweDEwLzB4MzMKPiBbICAgMzUuNDYxNTU3XSAgaW50ZWxfZmJkZXZfaW5pdGlhbF9jb25maWcr MHhmLzB4MWMgW2k5MTVdCj4gWyAgIDM1LjQ2MTU2MF0gIGFzeW5jX3J1bl9lbnRyeV9mbisweDJl LzB4ZjUKPiBbICAgMzUuNDYxNTYzXSAgcHJvY2Vzc19vbmVfd29yaysweDE1Yi8weDM2NAo+IFsg ICAzNS40NjE1NjVdICB3b3JrZXJfdGhyZWFkKzB4MmMvMHgzYTAKPiBbICAgMzUuNDYxNTY3XSAg PyBwcm9jZXNzX29uZV93b3JrKzB4MzY0LzB4MzY0Cj4gWyAgIDM1LjQ2MTU2OF0gIGt0aHJlYWQr MHgxMGMvMHgxMjIKPiBbICAgMzUuNDYxNTcwXSAgPyBfa3RocmVhZF9jcmVhdGVfb25fbm9kZSsw eDVkLzB4NWQKPiBbICAgMzUuNDYxNTcyXSAgcmV0X2Zyb21fZm9yaysweDM1LzB4NDAKPiBbICAg MzUuNDYxNTc0XSBDb2RlOiA3NCAxNiA4OSBmNiA0OCA4ZCAwNCBiNiA0OCBjMSBlMCAwNSA0OCAy OSBmMCA0OCA4ZCA4NCBjNyBlOCAxMSAwMCAwMCBjMyA0OCBjNyBjNiBiMCAxOSAxZSBjMCA0OCBj NyBjNyA2NCA4YSAxYyBjMCBlOCA0NyA4OCBlZCBlYyA8MGY+IDBiIDMxIGMwIGMzIDhiIDg3IGE0 IDA0IDAwIDAwIDgwIGU0IGZjIDA5IGM2IDg5IGI3IGE0IDA0IDAwCj4gWyAgIDM1LjQ2MTYwNF0g V0FSTklORzogQ1BVOiA2IFBJRDogNDExIGF0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ky Yy5jOjg0NCBpbnRlbF9nbWJ1c19nZXRfYWRhcHRlcisweDMyLzB4MzcgW2k5MTVdCj4gWyAgIDM1 LjQ2MTYwNl0gLS0tWyBlbmQgdHJhY2UgNGZlMWU2M2UyZGQ5MzM3MyBdLS0tCj4gWyAgIDM1LjQ2 MTYwOV0gQlVHOiB1bmFibGUgdG8gaGFuZGxlIGtlcm5lbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVu Y2UgYXQgMDAwMDAwMDAwMDAwMDAxMAo+IFsgICAzNS40NjE2MTNdIElQOiBpMmNfdHJhbnNmZXIr MHg0LzB4ODYKPiBbICAgMzUuNDYxNjE0XSBQR0QgMCBQNEQgMAo+IFsgICAzNS40NjE2MTZdIE9v cHM6IDAwMDAgWyMxXSBTTVAgUFRJCj4gWyAgIDM1LjQ2MTYxOF0gTW9kdWxlcyBsaW5rZWQgaW46 IGk5MTUgYWhjaSBsaWJhaGNpIGRtX3NuYXBzaG90IGRtX2J1ZmlvIGRtX3JhaWQgcmFpZDQ1NiBh c3luY19yYWlkNl9yZWNvdiBhc3luY19wcSByYWlkNl9wcSBhc3luY194b3IgeG9yIGFzeW5jX21l bWNweSBhc3luY190eAo+IFsgICAzNS40NjE2MjRdIENQVTogNiBQSUQ6IDQxMSBDb21tOiBrd29y a2VyL3UxNjoyIFRhaW50ZWQ6IEcgICAgICAgIFcgICAgICAgIDQuMTYuMC1yYzcueDY0LWcxY2Rh MzcwZmZkZWQgIzEKPiBbICAgMzUuNDYxNjI1XSBIYXJkd2FyZSBuYW1lOiBEZWxsIEluYy4gTGF0 aXR1ZGUgNTU5MC8wTU04MU0sIEJJT1MgMS4xLjkgMDMvMTMvMjAxOAo+IFsgICAzNS40NjE2Mjhd IFdvcmtxdWV1ZTogZXZlbnRzX3VuYm91bmQgYXN5bmNfcnVuX2VudHJ5X2ZuCj4gWyAgIDM1LjQ2 MTYzMF0gUklQOiAwMDEwOmkyY190cmFuc2ZlcisweDQvMHg4Ngo+IFsgICAzNS40NjE2MzFdIFJT UDogMDAxODpmZmZmOWI0ZTQzZDQ3YjMwIEVGTEFHUzogMDAwMTAyNDYKPiBbICAgMzUuNDYxNjMz XSBSQVg6IGZmZmY5YjRlNDNkNDdiNmUgUkJYOiAwMDAwMDAwMDAwMDAwMDA1IFJDWDogMDAwMDAw MDAwMDAwMDAwMQo+IFsgICAzNS40NjE2MzVdIFJEWDogMDAwMDAwMDAwMDAwMDAwMiBSU0k6IGZm ZmY5YjRlNDNkNDdiODAgUkRJOiAwMDAwMDAwMDAwMDAwMDAwCj4gWyAgIDM1LjQ2MTYzNl0gUkJQ OiBmZmZmOWI0ZTQzZDQ3YmQ4IFIwODogMDAwMDAwNGQwNjJhODNmNiBSMDk6IDAwMDAwMDAwMDAw MDAzYmQKPiBbICAgMzUuNDYxNjM4XSBSMTA6IDAwMDAwMDAwMDAwMDAwMzEgUjExOiBmZmZmZmZm ZmFkNGVkYTU4IFIxMjogMDAwMDAwMDAwMDAwMDAwMgo+IFsgICAzNS40NjE2MzldIFIxMzogMDAw MDAwMDAwMDAwMDAwMSBSMTQ6IGZmZmY5YjRlNDNkNDdiNmYgUjE1OiBmZmZmOWI0ZTQzZDQ3YzA3 Cj4gWyAgIDM1LjQ2MTY0MV0gRlM6ICAwMDAwMDAwMDAwMDAwMDAwKDAwMDApIEdTOmZmZmY5OGY5 MmU1ODAwMDAoMDAwMCkga25sR1M6MDAwMDAwMDAwMDAwMDAwMAo+IFsgICAzNS40NjE2NDNdIENT OiAgMDAxMCBEUzogMDAwMCBFUzogMDAwMCBDUjA6IDAwMDAwMDAwODAwNTAwMzMKPiBbICAgMzUu NDYxNjQ1XSBDUjI6IDAwMDAwMDAwMDAwMDAwMTAgQ1IzOiAwMDAwMDAwMWI3MDBjMDA1IENSNDog MDAwMDAwMDAwMDM2MDZlMAo+IFsgICAzNS40NjE2NDZdIERSMDogMDAwMDAwMDAwMDAwMDAwMCBE UjE6IDAwMDAwMDAwMDAwMDAwMDAgRFIyOiAwMDAwMDAwMDAwMDAwMDAwCj4gWyAgIDM1LjQ2MTY0 N10gRFIzOiAwMDAwMDAwMDAwMDAwMDAwIERSNjogMDAwMDAwMDBmZmZlMGZmMCBEUjc6IDAwMDAw MDAwMDAwMDA0MDAKPiBbICAgMzUuNDYxNjQ5XSBDYWxsIFRyYWNlOgo+IFsgICAzNS40NjE2NTJd ICBkcm1fZG9fcHJvYmVfZGRjX2VkaWQrMHhiMy8weDEyOAo+IFsgICAzNS40NjE2NTRdICBkcm1f Z2V0X2VkaWQrMHhlNS8weDM4ZAo+IFsgICAzNS40NjE2NjldICBpbnRlbF9oZG1pX3NldF9lZGlk KzB4NDUvMHgyN2YgW2k5MTVdCj4gWyAgIDM1LjQ2MTY4NF0gIGludGVsX2hkbWlfZGV0ZWN0KzB4 N2MvMHg5NyBbaTkxNV0KPiBbICAgMzUuNDYxNjg3XSAgZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVf Y29ubmVjdG9yX21vZGVzKzB4ZTEvMHg2YzAKPiBbICAgMzUuNDYxNjg5XSAgZHJtX3NldHVwX2Ny dGNzKzB4MTI5LzB4YTZhCj4gWyAgIDM1LjQ2MTY5MV0gID8gX19zd2l0Y2hfdG9fYXNtKzB4MzQv MHg3MAo+IFsgICAzNS40NjE2OTNdICA/IF9fc3dpdGNoX3RvX2FzbSsweDM0LzB4NzAKPiBbICAg MzUuNDYxNjk0XSAgPyBfX3N3aXRjaF90b19hc20rMHg0MC8weDcwCj4gWyAgIDM1LjQ2MTY5Nl0g ID8gX19zd2l0Y2hfdG9fYXNtKzB4MzQvMHg3MAo+IFsgICAzNS40NjE2OTddICA/IF9fc3dpdGNo X3RvX2FzbSsweDQwLzB4NzAKPiBbICAgMzUuNDYxNjk4XSAgPyBfX3N3aXRjaF90b19hc20rMHgz NC8weDcwCj4gWyAgIDM1LjQ2MTcwMF0gID8gX19zd2l0Y2hfdG9fYXNtKzB4NDAvMHg3MAo+IFsg ICAzNS40NjE3MDFdICA/IF9fc3dpdGNoX3RvX2FzbSsweDM0LzB4NzAKPiBbICAgMzUuNDYxNzAz XSAgX19kcm1fZmJfaGVscGVyX2luaXRpYWxfY29uZmlnX2FuZF91bmxvY2srMHgzNC8weDQ2Zgo+ IFsgICAzNS40NjE3MDVdICA/IF9fc3dpdGNoX3RvX2FzbSsweDQwLzB4NzAKPiBbICAgMzUuNDYx NzA3XSAgPyBfY29uZF9yZXNjaGVkKzB4MTAvMHgzMwo+IFsgICAzNS40NjE3MjRdICBpbnRlbF9m YmRldl9pbml0aWFsX2NvbmZpZysweGYvMHgxYyBbaTkxNV0KPiBbICAgMzUuNDYxNzI3XSAgYXN5 bmNfcnVuX2VudHJ5X2ZuKzB4MmUvMHhmNQo+IFsgICAzNS40NjE3MjldICBwcm9jZXNzX29uZV93 b3JrKzB4MTViLzB4MzY0Cj4gWyAgIDM1LjQ2MTczMV0gIHdvcmtlcl90aHJlYWQrMHgyYy8weDNh MAo+IFsgICAzNS40NjE3MzNdICA/IHByb2Nlc3Nfb25lX3dvcmsrMHgzNjQvMHgzNjQKPiBbICAg MzUuNDYxNzM0XSAga3RocmVhZCsweDEwYy8weDEyMgo+IFsgICAzNS40NjE3MzZdICA/IF9rdGhy ZWFkX2NyZWF0ZV9vbl9ub2RlKzB4NWQvMHg1ZAo+IFsgICAzNS40NjE3MzhdICByZXRfZnJvbV9m b3JrKzB4MzUvMHg0MAo+IFsgICAzNS40NjE3MzldIENvZGU6IDVjIGZhIGUxIGFkIDQ4IDg5IGRm IGU4IGVhIGZiIGZmIGZmIGU5IDJhIGZmIGZmIGZmIDBmIDFmIDQ0IDAwIDAwIDMxIGMwIGU5IDQz IGZkIGZmIGZmIDMxIGMwIDQ1IDMxIGU0IGU5IGM1IGZkIGZmIGZmIDQxIDU0IDU1IDUzIDw0OD4g OGIgNDcgMTAgNDggODMgNzggMTAgMDAgNzQgNzAgNDEgODkgZDQgNDggODkgZjUgNDggODkgZmIg NjUKPiBbICAgMzUuNDYxNzU2XSBSSVA6IGkyY190cmFuc2ZlcisweDQvMHg4NiBSU1A6IGZmZmY5 YjRlNDNkNDdiMzAKPiBbICAgMzUuNDYxNzU3XSBDUjI6IDAwMDAwMDAwMDAwMDAwMTAKPiBbICAg MzUuNDYxNzU5XSAtLS1bIGVuZCB0cmFjZSA0ZmUxZTYzZTJkZDkzMzc0IF0tLS0KPgo+IEJhc2Vk IG9uIGEgcGF0Y2ggYnkgRmVpIExpLgo+Cj4gQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKPiBD YzogRmVpIExpIDxmZWkubGlAaW50ZWwuY29tPgo+IENvLWRldmVsb3BlZC1ieTogRmVpIExpIDxm ZWkubGlAaW50ZWwuY29tPgo+IFJlcG9ydGVkLWJ5OiBQYXZlbCBOYWtvbmVjaG55aSA8em9yZzEz MzFAZ21haWwuY29tPgo+IFJlcG9ydGVkLWJ5OiBTZXdlcnluIEtva290IDxzZXdrb2tvdEBnbWFp bC5jb20+Cj4gUmVwb3J0ZWQtYnk6IExhc3psbyBWYWxrbyA8dmFsa29AbGludXgua2FyaW50aHku aHU+Cj4gQnVnemlsbGE6IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dp P2lkPTEwNTU0OQo+IEJ1Z3ppbGxhOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3df YnVnLmNnaT9pZD0xMDU5NjEKPiBTaWduZWQtb2ZmLWJ5OiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1 bGFAaW50ZWwuY29tPgoKRnJvbSB0aGUgYnVnLAoKVGVzdGVkLWJ5OiBMYXN6bG8gVmFsa28gPHZh bGtvQGxpbnV4LmthcmludGh5Lmh1PgoKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfYmlvcy5jIHwgMTMgKysrKysrKysrLS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRp b25zKCspLCA0IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYwo+IGlu ZGV4IGM1Yzc1MzBiYTE1Ny4uNmRiODQ1OTkxYTY5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2Jpb3MuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Jpb3MuYwo+IEBAIC0xMjU2LDcgKzEyNTYsNiBAQCBzdGF0aWMgdm9pZCBwYXJzZV9kZGlfcG9y dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGVudW0gcG9ydCBwb3J0LAo+ICAJ CXJldHVybjsKPiAgCj4gIAlhdXhfY2hhbm5lbCA9IGNoaWxkLT5hdXhfY2hhbm5lbDsKPiAtCWRk Y19waW4gPSBjaGlsZC0+ZGRjX3BpbjsKPiAgCj4gIAlpc19kdmkgPSBjaGlsZC0+ZGV2aWNlX3R5 cGUgJiBERVZJQ0VfVFlQRV9UTURTX0RWSV9TSUdOQUxJTkc7Cj4gIAlpc19kcCA9IGNoaWxkLT5k ZXZpY2VfdHlwZSAmIERFVklDRV9UWVBFX0RJU1BMQVlQT1JUX09VVFBVVDsKPiBAQCAtMTMwMyw5 ICsxMzAyLDE1IEBAIHN0YXRpYyB2b2lkIHBhcnNlX2RkaV9wb3J0KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiwgZW51bSBwb3J0IHBvcnQsCj4gIAkJRFJNX0RFQlVHX0tNUygiUG9y dCAlYyBpcyBpbnRlcm5hbCBEUFxuIiwgcG9ydF9uYW1lKHBvcnQpKTsKPiAgCj4gIAlpZiAoaXNf ZHZpKSB7Cj4gLQkJaW5mby0+YWx0ZXJuYXRlX2RkY19waW4gPSBtYXBfZGRjX3BpbihkZXZfcHJp diwgZGRjX3Bpbik7Cj4gLQo+IC0JCXNhbml0aXplX2RkY19waW4oZGV2X3ByaXYsIHBvcnQpOwo+ ICsJCWRkY19waW4gPSBtYXBfZGRjX3BpbihkZXZfcHJpdiwgY2hpbGQtPmRkY19waW4pOwo+ICsJ CWlmIChpbnRlbF9nbWJ1c19pc192YWxpZF9waW4oZGV2X3ByaXYsIGRkY19waW4pKSB7Cj4gKwkJ CWluZm8tPmFsdGVybmF0ZV9kZGNfcGluID0gZGRjX3BpbjsKPiArCQkJc2FuaXRpemVfZGRjX3Bp bihkZXZfcHJpdiwgcG9ydCk7Cj4gKwkJfSBlbHNlIHsKPiArCQkJRFJNX0RFQlVHX0tNUygiUG9y dCAlYyBoYXMgaW52YWxpZCBEREMgcGluICVkLCAiCj4gKwkJCQkgICAgICAicmV2ZXJ0aW5nIHRv IGRlZmF1bHRzXG4iLAo+ICsJCQkJICAgICAgcG9ydF9uYW1lKHBvcnQpLCBkZGNfcGluKTsKPiAr CQl9Cj4gIAl9Cj4gIAo+ICAJaWYgKGlzX2RwKSB7CgotLSAKSmFuaSBOaWt1bGEsIEludGVsIE9w ZW4gU291cmNlIFRlY2hub2xvZ3kgQ2VudGVyCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2ludGVsLWdmeAo=