Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp620613imm; Wed, 22 Aug 2018 09:41:32 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZ36GN+WBkWepBm5qwhfSKWAJQNBjbiR0KGmt6xlvYr+rUCjZBJMJPabwORBG6bao9Hvv+T X-Received: by 2002:a62:384a:: with SMTP id f71-v6mr7561599pfa.48.1534956092608; Wed, 22 Aug 2018 09:41:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534956092; cv=none; d=google.com; s=arc-20160816; b=hIhpFFy2iGV7jY9LJ7XR75Ka+I316Hf8mZUvmNHJq6ryryH3TBLiLA/O8w5SdKDdjF BADdtvmK7Vye3AmQrjXR32zJF638pY1pnVquqjcKoOdKlx0Q0+OEdvGWxV/Ec9ydyTd9 v0sOuCO7PeCrfDGj/t2rUV3G/5xwAA+lx3DfR187iWrUaNr4N45xuRpijq1h2M91LX2z y4wGIcPc2odi0ihegEz+74HMl8GJC+GDCKP3S7SDwJoBEpBkHPhKNT4KqiK5bE5O84K5 C5MBEpiHxnQ59h5nF+QUn/XBqnVzO0tiSldegMnIBU0L/Xxhh7uvCilTTpmYVHt+4hdW BfdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :dlp-reaction:dlp-version:dlp-product:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:arc-authentication-results; bh=0UPgKWymz5dFhN6aYg95tj5aT+j6Mfsy3RIlvqopkLI=; b=kkrN7X+dffUQK13bH4swnzcqBQRHckTjDGdQZxKgmxIy4V8NjiqKES7RPJRetEGmDK /GSrLi6e1jb8LRELEh5ua6vufeDeR12N3KHyxnOXqRst7PbwYgRxAlagIp8ci7XuphGl E8WuBz5SBIbsPoxJxaf5VKB5t+FX/K6iD1sxm5OF2XRIt+FPWj7KjtkQtC16+NeHrekp SipFFH2Za6W5Lc1KdCRzFsaJWiFbVnG9JFaQ75O+rnucrUF/q1MRSbnBP06qhhjyJBRJ d64F6CtMkD8YaprTb5GMU4iC7JfYC9iJ/eyzHVol93ZGTuH/51pW/DBrHxXUoEn5lIml Z9dQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x24-v6si2071898pgh.295.2018.08.22.09.41.17; Wed, 22 Aug 2018 09:41:32 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727175AbeHVUFs (ORCPT + 99 others); Wed, 22 Aug 2018 16:05:48 -0400 Received: from mga05.intel.com ([192.55.52.43]:20059 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726786AbeHVUFr (ORCPT ); Wed, 22 Aug 2018 16:05:47 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Aug 2018 09:39:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,274,1531810800"; d="scan'208";a="82526200" Received: from orsmsx108.amr.corp.intel.com ([10.22.240.6]) by fmsmga004.fm.intel.com with ESMTP; 22 Aug 2018 09:39:56 -0700 Received: from orsmsx152.amr.corp.intel.com (10.22.226.39) by ORSMSX108.amr.corp.intel.com (10.22.240.6) with Microsoft SMTP Server (TLS) id 14.3.319.2; Wed, 22 Aug 2018 09:39:55 -0700 Received: from orsmsx107.amr.corp.intel.com ([169.254.1.245]) by ORSMSX152.amr.corp.intel.com ([169.254.8.164]) with mapi id 14.03.0319.002; Wed, 22 Aug 2018 09:39:54 -0700 From: "Schaufler, Casey" To: Jann Horn CC: Kernel Hardening , kernel list , linux-security-module , "selinux@tycho.nsa.gov" , "Hansen, Dave" , "Dock, Deneen T" , "kristen@linux.intel.com" , Arjan van de Ven Subject: RE: [PATCH v3 3/5] LSM: Security module checking for side-channel dangers Thread-Topic: [PATCH v3 3/5] LSM: Security module checking for side-channel dangers Thread-Index: AQHUOOKX5VPJ9yk/5U6pLmxaRABENqTK6xAA///w3HCAAI7tAIAAiPkQ Date: Wed, 22 Aug 2018 16:39:54 +0000 Message-ID: <99FC4B6EFCEFD44486C35F4C281DC67321440770@ORSMSX107.amr.corp.intel.com> References: <20180821000444.7004-1-casey.schaufler@intel.com> <20180821000444.7004-4-casey.schaufler@intel.com> <99FC4B6EFCEFD44486C35F4C281DC673214402D3@ORSMSX107.amr.corp.intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMzBjZWM2OWEtN2I0MS00MmZlLTk3YzEtYmM5Mzk1NDM1NGU3IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoib3E4VnVFY1wvakZvdmFBUGNJYVFEVVBSOHZJSkFqRXRDWlVDK3NBY21yTk85OFRhcjNIdGIwTEhzdllsY3hoTysifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.22.254.138] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBKYW5uIEhvcm4gW21haWx0bzpq YW5uaEBnb29nbGUuY29tXQ0KPiBTZW50OiBUdWVzZGF5LCBBdWd1c3QgMjEsIDIwMTggNjowMSBQ TQ0KPiBUbzogU2NoYXVmbGVyLCBDYXNleSA8Y2FzZXkuc2NoYXVmbGVyQGludGVsLmNvbT4NCj4g Q2M6IEtlcm5lbCBIYXJkZW5pbmcgPGtlcm5lbC1oYXJkZW5pbmdAbGlzdHMub3BlbndhbGwuY29t Pjsga2VybmVsIGxpc3QNCj4gPGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+OyBsaW51eC1z ZWN1cml0eS1tb2R1bGUgPGxpbnV4LXNlY3VyaXR5LQ0KPiBtb2R1bGVAdmdlci5rZXJuZWwub3Jn Pjsgc2VsaW51eEB0eWNoby5uc2EuZ292OyBIYW5zZW4sIERhdmUNCj4gPGRhdmUuaGFuc2VuQGlu dGVsLmNvbT47IERvY2ssIERlbmVlbiBUIDxkZW5lZW4udC5kb2NrQGludGVsLmNvbT47DQo+IGty aXN0ZW5AbGludXguaW50ZWwuY29tOyBBcmphbiB2YW4gZGUgVmVuIDxhcmphbkBsaW51eC5pbnRl bC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjMgMy81XSBMU006IFNlY3VyaXR5IG1vZHVs ZSBjaGVja2luZyBmb3Igc2lkZS1jaGFubmVsDQo+IGRhbmdlcnMNCj4gDQo+IE9uIFdlZCwgQXVn IDIyLCAyMDE4IGF0IDE6NDQgQU0gU2NoYXVmbGVyLCBDYXNleQ0KPiA8Y2FzZXkuc2NoYXVmbGVy QGludGVsLmNvbT4gd3JvdGU6DQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t DQo+ID4gPiBGcm9tOiBKYW5uIEhvcm4gW21haWx0bzpqYW5uaEBnb29nbGUuY29tXQ0KPiA+ID4g U2VudDogVHVlc2RheSwgQXVndXN0IDIxLCAyMDE4IDEwOjI0IEFNDQo+ID4gPiBUbzogU2NoYXVm bGVyLCBDYXNleSA8Y2FzZXkuc2NoYXVmbGVyQGludGVsLmNvbT4NCj4gPiA+IENjOiBLZXJuZWwg SGFyZGVuaW5nIDxrZXJuZWwtaGFyZGVuaW5nQGxpc3RzLm9wZW53YWxsLmNvbT47IGtlcm5lbCBs aXN0DQo+ID4gPiA8bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZz47IGxpbnV4LXNlY3VyaXR5 LW1vZHVsZSA8bGludXgtc2VjdXJpdHktDQo+ID4gPiBtb2R1bGVAdmdlci5rZXJuZWwub3JnPjsg c2VsaW51eEB0eWNoby5uc2EuZ292OyBIYW5zZW4sIERhdmUNCj4gPiA+IDxkYXZlLmhhbnNlbkBp bnRlbC5jb20+OyBEb2NrLCBEZW5lZW4gVCA8ZGVuZWVuLnQuZG9ja0BpbnRlbC5jb20+Ow0KPiA+ ID4ga3Jpc3RlbkBsaW51eC5pbnRlbC5jb207IEFyamFuIHZhbiBkZSBWZW4gPGFyamFuQGxpbnV4 LmludGVsLmNvbT4NCj4gPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjMgMy81XSBMU006IFNlY3Vy aXR5IG1vZHVsZSBjaGVja2luZyBmb3Igc2lkZS1jaGFubmVsDQo+ID4gPiBkYW5nZXJzDQo+ID4g Pg0KPiA+ID4gT24gVHVlLCBBdWcgMjEsIDIwMTggYXQgMjowNSBBTSBDYXNleSBTY2hhdWZsZXIN Cj4gPiA+IDxjYXNleS5zY2hhdWZsZXJAaW50ZWwuY29tPiB3cm90ZToNCj4gPiA+ID4NCj4gPiA+ ID4gVGhlIHNpZGVjaGFubmVsIExTTSBjaGVja3MgZm9yIGNhc2VzIHdoZXJlIGEgc2lkZS1jaGFu bmVsDQo+ID4gPiA+IGF0dGFjayBtYXkgYmUgZGFuZ2Vyb3VzIGJhc2VkIG9uIHNlY3VyaXR5IGF0 dHJpYnV0ZXMgb2YgdGFza3MuDQo+ID4gPiA+IFRoaXMgaW5jbHVkZXM6DQo+ID4gPiA+ICAgICAg ICAgRWZmZWN0aXZlIFVJRCBvZiB0aGUgdGFza3MgaXMgZGlmZmVyZW50DQo+ID4gPiA+ICAgICAg ICAgQ2FwYWJsaXR5IHNldHMgYXJlIGRpZmZlcmVudA0KPiA+ID4gPiAgICAgICAgIFRhc2tzIGFy ZSBpbiBkaWZmZXJlbnQgbmFtZXNwYWNlcw0KPiA+ID4gPiBBbiBvcHRpb24gaXMgYWxzbyBwcm92 aWRlZCB0byBhc3NlcnQgdGhhdCB0YXNrIGFyZSBuZXZlcg0KPiA+ID4gPiB0byBiZSBjb25zaWRl cmVkIHNhZmUuIFRoaXMgaXMgaGlnaCBwYXJhbm9pYSwgYW5kIGV4cGVuc2l2ZQ0KPiA+ID4gPiBh cyB3ZWxsLg0KPiA+ID4gPg0KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBDYXNleSBTY2hhdWZsZXIg PGNhc2V5LnNjaGF1ZmxlckBpbnRlbC5jb20+DQo+ID4gPiA+IC0tLQ0KPiA+ID4gWy4uLl0NCj4g PiA+ID4gZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NpZGVjaGFubmVsL0tjb25maWcgYi9zZWN1cml0 eS9zaWRlY2hhbm5lbC9LY29uZmlnDQo+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4g PiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYWY5Mzk2NTM0MTI4DQo+ID4gPiA+IC0tLSAvZGV2L251 bGwNCj4gPiA+ID4gKysrIGIvc2VjdXJpdHkvc2lkZWNoYW5uZWwvS2NvbmZpZw0KPiA+ID4gWy4u Ll0NCj4gPiA+ID4gK2NvbmZpZyBTRUNVUklUWV9TSURFQ0hBTk5FTF9DQVBBQklMSVRJRVMNCj4g PiA+ID4gKyAgICAgICBib29sICJTaWRlY2hhbm5lbCBjaGVjayBvbiBjYXBhYmlsaXR5IHNldHMi DQo+ID4gPiA+ICsgICAgICAgZGVwZW5kcyBvbiBTRUNVUklUWV9TSURFQ0hBTk5FTA0KPiA+ID4g PiArICAgICAgIGRlZmF1bHQgbg0KPiA+ID4gPiArICAgICAgIGhlbHANCj4gPiA+ID4gKyAgICAg ICAgIEFzc3VtZSB0aGF0IHRhc2tzIHdpdGggZGlmZmVyZW50IHNldHMgb2YgcHJpdmlsZWdlIG1h eSBiZQ0KPiA+ID4gPiArICAgICAgICAgc3ViamVjdCB0byBzaWRlLWNoYW5uZWwgYXR0YWNrcy4g UG90ZW50aWFsIGludGVyYWN0aW9ucw0KPiA+ID4gPiArICAgICAgICAgd2hlcmUgdGhlIGF0dGFj a2VyIGxhY2tzIGNhcGFiaWxpdGllcyB0aGUgYXR0YWNrZWQgaGFzDQo+ID4gPiA+ICsgICAgICAg ICBhcmUgYmxvY2tlZC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgICAgIElmIHlvdSBhcmUg dW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uDQo+ID4gPiA+ICsN Cj4gPiA+ID4gK2NvbmZpZyBTRUNVUklUWV9TSURFQ0hBTk5FTF9OQU1FU1BBQ0VTDQo+ID4gPiA+ ICsgICAgICAgYm9vbCAiU2lkZWNoYW5uZWwgY2hlY2sgb24gbmFtZXNwYWNlcyINCj4gPiA+ID4g KyAgICAgICBkZXBlbmRzIG9uIFNFQ1VSSVRZX1NJREVDSEFOTkVMDQo+ID4gPiA+ICsgICAgICAg ZGVwZW5kcyBvbiBOQU1FU1BBQ0VTDQo+ID4gPiA+ICsgICAgICAgZGVmYXVsdCBuDQo+ID4gPiA+ ICsgICAgICAgaGVscA0KPiA+ID4gPiArICAgICAgICAgQXNzdW1lIHRoYXQgdGFza3MgaW4gZGlm ZmVyZW50IG5hbWVzcGFjZXMgbWF5IGJlDQo+ID4gPiA+ICsgICAgICAgICBzdWJqZWN0IHRvIHNp ZGUtY2hhbm5lbCBhdHRhY2tzLiBVc2VyLCBQSUQgYW5kIGNncm91cA0KPiA+ID4gPiArICAgICAg ICAgbmFtZXNwYWNlcyBhcmUgY2hlY2tlZC4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgICAg IElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4u DQo+ID4gPiBbLi4uXQ0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2lkZWNoYW5uZWwv c2lkZWNoYW5uZWwuYw0KPiA+ID4gYi9zZWN1cml0eS9zaWRlY2hhbm5lbC9zaWRlY2hhbm5lbC5j DQo+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+IGluZGV4IDAwMDAwMDAwMDAw MC4uNGRhN2Q2ZGFmZGM1DQo+ID4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4gKysrIGIvc2Vj dXJpdHkvc2lkZWNoYW5uZWwvc2lkZWNoYW5uZWwuYw0KPiA+ID4gWy4uLl0NCj4gPiA+ID4gKy8q DQo+ID4gPiA+ICsgKiBzYWZlX2J5X2NhcGFiaWxpdHkgLSBBcmUgdGFzayBhbmQgY3VycmVudCBz aWRlY2hhbm5lbCBzYWZlPw0KPiA+ID4gPiArICogQHA6IHRhc2sgdG8gY2hlY2sgb24NCj4gPiA+ ID4gKyAqDQo+ID4gPiA+ICsgKiBSZXR1cm5zIDAgaWYgdGhlIHRhc2tzIGFyZSBzaWRlY2hhbm5l bCBzYWZlLCAtRUFDQ0VTIG90aGVyd2lzZS4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArI2lmZGVm IENPTkZJR19TRUNVUklUWV9TSURFQ0hBTk5FTF9DQVBBQklMSVRJRVMNCj4gPiA+ID4gK3N0YXRp YyBpbnQgc2FmZV9ieV9jYXBhYmlsaXR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkNCj4gPiA+ID4g K3sNCj4gPiA+ID4gKyAgICAgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY2NyZWQgPSBjdXJyZW50X3Jl YWxfY3JlZCgpOw0KPiA+ID4gPiArICAgICAgIGNvbnN0IHN0cnVjdCBjcmVkICpwY3JlZCA9IHJj dV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocC0+cmVhbF9jcmVkLA0KPiAxKTsNCj4gPiA+ID4gKw0K PiA+ID4gPiArICAgICAgIC8qDQo+ID4gPiA+ICsgICAgICAgICogQ2FwYWJpbGl0aWVzIGNoZWNr cy4gQ29uc2lkZXJlZCBzYWZlIGlmOg0KPiA+ID4gPiArICAgICAgICAqICAgICAgY3VycmVudCBo YXMgYWxsIHRoZSBjYXBhYmlsaXRpZXMgcCBkb2VzDQo+ID4gPiA+ICsgICAgICAgICovDQo+ID4g PiA+ICsgICAgICAgaWYgKGNjcmVkICE9IHBjcmVkICYmDQo+ID4gPiA+ICsgICAgICAgICAgICFj YXBfaXNzdWJzZXQocGNyZWQtPmNhcF9lZmZlY3RpdmUsIGNjcmVkLT5jYXBfZWZmZWN0aXZlKSkN Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUFDQ0VTOw0KPiA+ID4gPiArICAgICAg IHJldHVybiAwOw0KPiA+ID4gPiArfQ0KPiA+ID4NCj4gPiA+IE9uIGl0cyBvd24gKHdpdGhvdXQg c2FmZV9ieV9uYW1lc3BhY2UoKSksIHRoaXMgY2hlY2sgbWFrZXMgbm8gc2Vuc2UsIEkNCj4gPiA+ IHRoaW5rLiBZb3UncmUgcGVyZm9ybWluZyBhIHRlc3Qgb24gdGhlIG5hbWVzcGFjZWQgY2FwYWJp bGl0eSBzZXRzDQo+ID4gPiB3aXRob3V0IGxvb2tpbmcgYXQgd2hpY2ggdXNlciBuYW1lc3BhY2Vz IHRoZXkgYXJlIHJlbGF0aXZlIHRvLiBNYXliZQ0KPiA+ID4gZWl0aGVyIGludHJvZHVjZSBhIGNv bmZpZ3VyYXRpb24gZGVwZW5kZW5jeSBvciBhZGQgYW4gZXh0cmEgbmFtZXNwYWNlDQo+ID4gPiBj aGVjayBoZXJlPw0KPiA+DQo+ID4gSWYgeW91IGRvbid0IGhhdmUgbmFtZXNwYWNlcyB0aGUgY2hl Y2sgaXMgY29ycmVjdC4gSWYgeW91IGRvLCBhbmQgdXNlDQo+ID4gc2FmZV9ieV9uYW1lc3BhY2Uo KSB5b3UncmUgYWxzbyBjb3JyZWN0LiBJZiB5b3UgdXNlIG5hbWVzcGFjZXMgYW5kDQo+ID4gY2Fy ZSBhYm91dCBzaWRlLWNoYW5uZWwgYXR0YWNrcyB5b3Ugc2hvdWxkIGVuYWJsZSB0aGUgbmFtZXNw YWNlIGNoZWNrcy4NCj4gDQo+IEJ5ICJ1c2UgbmFtZXNwYWNlcyIsIHlvdSBtZWFuICJoYXZlIENP TkZJR19VU0VSX05TPXkgc2V0IGluIHRoZSBrZXJuZWwNCj4gY29uZmlnIiwgcmlnaHQ/DQoNClRo YXQncyBjb3JyZWN0Lg0KDQo+IEl0IGRvZXNuJ3QgbWF0dGVyIG11Y2ggd2hldGhlciBwcm9jZXNz ZXMgb24geW91ciBzeXN0ZW0gYXJlDQo+IGludGVudGlvbmFsbHkgdXNpbmcgbmFtZXNwYWNlczsN Cg0KQWxzbyBjb3JyZWN0Lg0KDQo+IHdoYXQgbWF0dGVycyBpcyB3aGV0aGVyIHNvbWUgcmFuZG9t DQo+IHByb2Nlc3MgY2FuIGp1c3QgdXNlIHVuc2hhcmUoQ0xPTkVfTkVXVVNFUikgdG8gaW5jcmVh c2UgaXRzIGFwcGFyZW50DQo+IGNhcGFiaWxpdGllcyBhbmQgYnlwYXNzIHRoZSBjaGVja3MgcGVy Zm9ybWVkIGJ5IHRoaXMgTFNNLg0KDQpXaGljaCBwdXRzIGl0IGluIGEgbmV3IHVzZXIgbmFtZXNw YWNlLCB3aGljaCBnZXRzIGNhdWdodCBieSB0aGUNCnNhZmVfYnlfbmFtZXNwYWNlKCkgY2hlY2su DQoNCj4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB1bnNoYXJlKENMT05FX05FV1VTRVIpIHNob3Vs ZCBub3QgaW5jcmVhc2UgdGhlDQo+IGNhbGxlcidzIGFiaWxpdGllcy4gWW91ciBwYXRjaCBzZWVt cyB0byB2aW9sYXRlIHRoYXQgZXhwZWN0YXRpb24uDQoNCklmIHlvdSBoYXZlIENPTkZJR19VU0VS X05TIGFuZCBub3QNCkNPTkZJR19TRUNVUklUWV9TSURFQ0hBTk5FTF9OQU1FU1BBQ0VTIHlvdSBk byBub3QgaW5jcmVhc2UgdGhlDQpjYWxsZXIncyBhYmlsaXRpZXMgZnJvbSB3aGF0IHlvdSBoYXZl IHdpdGhvdXQgc2FmZXNpZGVjaGFubmVsLiBJZiB5b3UgaGF2ZQ0KQ09ORklHX1NFQ1VSSVRZX1NJ REVDSEFOTkVMX05BTUVTUEFDRVMgeW91IGhhdmUgYWRkaXRpb25hbA0KcmVzdHJpY3Rpb24gKGFz c3VtaW5nIG9uZSBjb25zaWRlcnMgc2V0dGluZyB0aGUgYmFycmllciBhIHJlc3RyaWN0aW9uKSB0 aGF0DQp0aGUgdGFza3MgbXVzdCBiZSBpbiB0aGUgc2FtZSBuYW1lc3BhY2UocykuIEFzIEkgc2Fp ZCwgaWYgeW91IGNhcmUgYWJvdXQNCm5hbWVzcGFjZSBpbXBsaWNhdGlvbnMgeW91IHNob3VsZCBj b25maWd1cmUgdGhlIHN5c3RlbSBhY2NvcmRpbmdseS4NCg0KPiA+IEkgZG9uJ3Qgc2VlIHJlYWwg dmFsdWUgaW4gYWRkaW5nIG5hbWVzcGFjZSBjaGVja3MgaW4gdGhlIGNhcGFiaWxpdHkgY2hlY2tz DQo+ID4gZm9yIHRoZSBldmVudCB3aGVyZSBzb21lb25lIGhhcyBzYWlkIHRoZXkgZG9uJ3Qgd2Fu dCBuYW1lc3BhY2UgY2hlY2tzLg0KPiANCj4gQ2FwYWJpbGl0aWVzIGFyZSBtZWFuaW5nbGVzcyBp ZiB5b3UgZG9uJ3QgY29uc2lkZXIgdGhlIG5hbWVzcGFjZXMNCj4gcmVsYXRpdmUgdG8gd2hpY2gg dGhleSBhcmUgZWZmZWN0aXZlLg0KDQpBZ3JlZWQuIEJ1dCBpZiBDT05GSUdfTkFNRVNQQUNFUyBp cyBvZmYgeW91IGFyZSBhbHdheXMgaW4gdGhlIHNhbWUNCm5hbWVzcGFjZSBhbmQgaWYgaXQgaXMg b24geW91IHNob3VsZCB1c2UgdGhlIHNpZGVjaGFubmVsIG5hbWVzcGFjZSBjaGVjay4NCg0KPiBB bnlvbmUgY2FuIGdldCBDQVBfU1lTX0FETUlOIG9yDQo+IHdoYXRldmVyIG90aGVyIGNhcGFiaWxp dGllcyB0aGV5IHdhbnQsIGJ5IGRlc2lnbiAtIGp1c3Qgbm90IHJlbGF0aXZlDQo+IHRvIG9iamVj dHMgdGhleSBkb24ndCBvd24uIExvb2s6DQo+IA0KPiAkIGdyZXAgXkNhcCAvcHJvYy9zZWxmL3N0 YXR1cw0KPiBDYXBJbmg6IDAwMDAwMDAwMDAwMDAwMDANCj4gQ2FwUHJtOiAwMDAwMDAwMDAwMDAw MDAwDQo+IENhcEVmZjogMDAwMDAwMDAwMDAwMDAwMA0KPiBDYXBCbmQ6IDAwMDAwMDNmZmZmZmZm ZmYNCj4gQ2FwQW1iOiAwMDAwMDAwMDAwMDAwMDAwDQo+ICQgdW5zaGFyZSAtVXIgZ3JlcCBeQ2Fw IC9wcm9jL3NlbGYvc3RhdHVzDQo+IENhcEluaDogMDAwMDAwMDAwMDAwMDAwMA0KPiBDYXBQcm06 IDAwMDAwMDNmZmZmZmZmZmYNCj4gQ2FwRWZmOiAwMDAwMDAzZmZmZmZmZmZmDQo+IENhcEJuZDog MDAwMDAwM2ZmZmZmZmZmZg0KPiBDYXBBbWI6IDAwMDAwMDAwMDAwMDAwMDANCj4gDQo+IFRhLWRh YSEgRnVsbCBjYXBhYmlsaXR5IHNldC4NCg0KWWVzLCBidXQgaW4gYSBkaWZmZXJlbnQgbmFtZXNw YWNlLiBIZW5jZSB0aGUgbmFtZXNwYWNlIGNoZWNrLg0KDQpXaGF0IEkgaGVhciB5b3Ugc2F5aW5n IGlzIHRoYXQgeW91IGRvbid0IHdhbnQgdGhlIGNhcGFiaWxpdHkgY2hlY2sNCnRvIGJlIGluZGVw ZW5kZW50IG9mIHRoZSBuYW1lc3BhY2UgY2hlY2suIFRoaXMgY29uZmxpY3RzIHdpdGggdGhlDQpz dHJvbmcgZGVzaXJlIGV4cHJlc3NlZCB0byBtZSB3aGVuIEkgc3RhcnRlZCB0aGlzIHRoYXQgdGhl IGNvbmZpZ3VyYXRpb24NCnNob3VsZCBiZSBmbGV4aWJsZS4gSSBjYW4gYmVlZiB1cCB0aGUgZGVz Y3JpcHRpb24gb2YgdGhlIHZhcmlvdXMgb3B0aW9ucy4NCldvdWxkIHRoYXQgYWRkcmVzcyB0aGUg aXNzdWU/DQoNCj4gDQo+ID4gSSBnb3QgZWFybHkgZmVlZGJhY2sgdGhhdCBjb25maWd1cmFiaWxp dHkgd2FzIGNvbnNpZGVyZWQgaW1wb3J0YW50Lg0KPiA+IFRoaXMgaXMgdGhlIGNvcnJlY3QgYmVo YXZpb3IgaWYgeW91IHdhbnQgbmFtZXNwYWNlIGNoZWNrcyB0byBiZQ0KPiA+IHNlcGFyYXRlbHkg Y29uZmlndXJhYmxlIGZyb20gY2FwYWJpbGl0eSBjaGVja3MuIFlvdSBjb3VsZCBhc2sgZm9yDQo+ ID4gZGlzdGluY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBlYWNoIGtpbmQgb2YgbmFtZXNw YWNlLCBidXQsIHdlbGwsIHl1Y2suDQo+ID4NCj4gPiA+ID4gK3N0YXRpYyBpbnQgc2FmZV9ieV9u YW1lc3BhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpwKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArICAg ICAgIHN0cnVjdCBjZ3JvdXBfbmFtZXNwYWNlICpjY2duID0gTlVMTDsNCj4gPiA+ID4gKyAgICAg ICBzdHJ1Y3QgY2dyb3VwX25hbWVzcGFjZSAqcGNnbiA9IE5VTEw7DQo+ID4gPiA+ICsgICAgICAg Y29uc3Qgc3RydWN0IGNyZWQgKmNjcmVkOw0KPiA+ID4gPiArICAgICAgIGNvbnN0IHN0cnVjdCBj cmVkICpwY3JlZDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAgIC8qDQo+ID4gPiA+ICsgICAg ICAgICogTmFtZXNwYWNlIGNoZWNrcy4gQ29uc2lkZXJlZCBzYWZlIGlmOg0KPiA+ID4gPiArICAg ICAgICAqICAgICAgY2dyb3VwIG5hbWVzcGFjZSBpcyB0aGUgc2FtZQ0KPiA+ID4gPiArICAgICAg ICAqICAgICAgVXNlciBuYW1lc3BhY2UgaXMgdGhlIHNhbWUNCj4gPiA+ID4gKyAgICAgICAgKiAg ICAgIFBJRCBuYW1lc3BhY2UgaXMgdGhlIHNhbWUNCj4gPiA+ID4gKyAgICAgICAgKi8NCj4gPiA+ ID4gKyAgICAgICBpZiAoY3VycmVudC0+bnNwcm94eSkNCj4gPiA+ID4gKyAgICAgICAgICAgICAg IGNjZ24gPSBjdXJyZW50LT5uc3Byb3h5LT5jZ3JvdXBfbnM7DQo+ID4gPiA+ICsgICAgICAgaWYg KHAtPm5zcHJveHkpDQo+ID4gPiA+ICsgICAgICAgICAgICAgICBwY2duID0gcC0+bnNwcm94eS0+ Y2dyb3VwX25zOw0KPiA+ID4gPiArICAgICAgIGlmIChjY2duICE9IHBjZ24pDQo+ID4gPiA+ICsg ICAgICAgICAgICAgICByZXR1cm4gLUVBQ0NFUzsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAgICAg IGNjcmVkID0gY3VycmVudF9yZWFsX2NyZWQoKTsNCj4gPiA+ID4gKyAgICAgICBwY3JlZCA9IHJj dV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocC0+cmVhbF9jcmVkLCAxKTsNCj4gPiA+ID4gKw0KPiA+ ID4gPiArICAgICAgIGlmIChjY3JlZC0+dXNlcl9ucyAhPSBwY3JlZC0+dXNlcl9ucykNCj4gPiA+ ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUFDQ0VTOw0KPiA+ID4gPiArICAgICAgIGlmICh0 YXNrX2FjdGl2ZV9waWRfbnMoY3VycmVudCkgIT0gdGFza19hY3RpdmVfcGlkX25zKHApKQ0KPiA+ ID4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FQUNDRVM7DQo+ID4gPiA+ICsgICAgICAgcmV0 dXJuIDA7DQo+ID4gPiA+ICt9DQo=