From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhang Yi Subject: [PATCH RFC 01/14] xen: vmx: Added EPT based Subpage Write Protection Doc. Date: Thu, 19 Oct 2017 16:08:00 +0800 Message-ID: <4347990d8bfaea22b8972db1003225bee5443b00.1508397860.git.yi.z.zhang@linux.intel.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1e55rV-0004AB-RO for xen-devel@lists.xenproject.org; Thu, 19 Oct 2017 08:07:29 +0000 In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: kevin.tian@intel.com, tamas@tklengyel.com, wei.liu2@citrix.com, jun.nakajima@intel.com, rcojocaru@bitdefender.com, george.dunlap@eu.citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, Zhang Yi Z , jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org RnJvbTogWmhhbmcgWWkgWiA8eWkuei56aGFuZ0BsaW51eC5pbnRlbC5jb20+CgpTaWduZWQtb2Zm LWJ5OiBaaGFuZyBZaSBaIDx5aS56LnpoYW5nQGxpbnV4LmludGVsLmNvbT4KLS0tCiBkb2NzL3R4 dC9taXNjL3NwcF94ZW4udHh0IHwgMjU5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyNTkgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRvY3MvdHh0L21pc2Mvc3BwX3hlbi50eHQKCmRpZmYgLS1naXQgYS9kb2Nz L3R4dC9taXNjL3NwcF94ZW4udHh0IGIvZG9jcy90eHQvbWlzYy9zcHBfeGVuLnR4dApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODRlY2EyCi0tLSAvZGV2L251bGwKKysrIGIv ZG9jcy90eHQvbWlzYy9zcHBfeGVuLnR4dApAQCAtMCwwICsxLDI1OSBAQAorRFJBRlQ6IEVQVC1C YXNlZCBTdWItUGFnZSBQcm90ZWN0aW9uIChTUFApIERlc2lnbiBEb2MgZm9yIFhlbgorPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor CisxLiBPdmVydmlldworCitFUFQtYmFzZWQgU3ViLVBhZ2UgUHJvdGVjdGlvbiAoU1BQKSBjYXBh YmlsaXR5IHRvIGFsbG93IFZpcnR1YWwgTWFjaGluZQorTW9uaXRvcnMgdG8gc3BlY2lmeSB3cml0 ZS1wcm90ZWN0aW9uIGZvciBndWVzdCBwaHlzaWNhbCBtZW1vcnkgYXQgYQorc3ViLXBhZ2UgKDEy OCBieXRlKSBncmFudWxhcml0eS4gV2hlbiB0aGlzIGNhcGFiaWxpdHkgaXMgdXRpbGl6ZWQsIHRo ZQorQ1BVIGVuZm9yY2VzIHdyaXRlLWFjY2VzcyBwZXJtaXNzaW9ucyBmb3Igc3ViLXBhZ2UgcmVn aW9ucyBvZiA0SyBwYWdlcworYXMgc3BlY2lmaWVkIGJ5IHRoZSBWTU0uCisKKzIuIE9wZXJhdGlv biBvZiBTUFAKKworU3ViLVBhZ2UgUHJvdGVjdGlvbiBUYWJsZSAoU1BQVCkgaXMgaW50cm9kdWNl ZCB0byBtYW5hZ2Ugc3ViLXBhZ2UKK3dyaXRlLWFjY2Vzcy4KKworU1BQVCBpcyBhY3RpdmUgd2hl biB0aGUgInN1Yi1wYWdlIHdyaXRlIHByb3RlY3Rpb24iIFZNLWV4ZWN1dGlvbiBjb250cm9sCitp cyAxLiBTUFBUIGxvb2tzIHVwIHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzZXMgdG8gZGVyaXZl IGEgNjQgYml0Cisic3ViLXBhZ2UgcGVybWlzc2lvbiIgdmFsdWUgY29udGFpbmluZyBzdWItcGFn ZSB3cml0ZSBwZXJtaXNzaW9ucy4gVGhlCitsb29rdXAgZnJvbSBndWVzdC1waHlzaWNhbCBhZGRy ZXNzZXMgdG8gdGhlIHN1Yi1wYWdlIHJlZ2lvbiBwZXJtaXNzaW9ucworaXMgZGV0ZXJtaW5lZCBi eSBhIHNldCBvZiBTUFBUIHBhZ2luZyBzdHJ1Y3R1cmVzLgorCitXaGVuIHRoZSAic3ViLXBhZ2Ug d3JpdGUgcHJvdGVjdGlvbiIgVk0tZXhlY3V0aW9uIGNvbnRyb2wgaXMgMSwgdGhlIFNQUFQKK2lz IHVzZWQgdG8gbG9va3VwIHdyaXRlIHBlcm1pc3Npb24gYml0cyBmb3IgdGhlIDEyOCBieXRlIHN1 Yi1wYWdlIHJlZ2lvbnMKK2NvbnRhaW5pbmcgaW4gdGhlIDRLQiBndWVzdCBwaHlzaWNhbCBwYWdl LiBFUFQgc3BlY2lmaWVzIHRoZSA0S0IgcGFnZQorbGV2ZWwgcHJpdmlsZWdlcyB0aGF0IHNvZnR3 YXJlIGlzIGFsbG93ZWQgd2hlbiBhY2Nlc3NpbmcgdGhlIGd1ZXN0CitwaHlzaWNhbCBhZGRyZXNz LCB3aGVyZWFzIFNQUFQgZGVmaW5lcyB0aGUgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHNvZnR3YXJl CithdCB0aGUgMTI4IGJ5dGUgZ3JhbnVsYXJpdHkgcmVnaW9ucyB3aXRoaW4gYSA0S0IgcGFnZS4g V3JpdGUgYWNjZXNzZXMKK3ByZXZlbnRlZCBkdWUgdG8gc3ViLXBhZ2UgcGVybWlzc2lvbnMgbG9v a2VkIHVwIHZpYSBTUFBUIGFyZSByZXBvcnRlZCBhcworRVBUIHZpb2xhdGlvbiBWTSBleGl0cy4g U2ltaWxhciB0byBFUFQsIGEgbG9naWNhbCBwcm9jZXNzb3IgdXNlcyBTUFBUIHRvCitsb29rdXAg c3ViLXBhZ2UgcmVnaW9uIHdyaXRlIHBlcm1pc3Npb25zIGZvciBndWVzdC1waHlzaWNhbCBhZGRy ZXNzZXMKK29ubHkgd2hlbiB0aG9zZSBhZGRyZXNzZXMgYXJlIHVzZWQgdG8gYWNjZXNzIG1lbW9y eS4KK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXworCitIb3cgU1BQIGhhcmR3YXJlIHdvcmtzOgorX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXworCitHdWVzdCB3cml0ZSBhY2Nlc3MgLS0+IEdQQSAtLT4gV2Fs ayBFUFQgLS0+IEVQVCBsZWFmIGVudHJ5IC3ilJAKK+KUjC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t4pSYCivilJQtPiBpZiBWTWV4ZWNf Y29udHJvbC5zcHAgJiYgZXB0X2xlYWZfZW50cnkuc3BwX2JpdCAoYml0IDYxKQorICAgICB8Cisg ICAgIOKUlC0+IDxmYWxzZT4gLS0+IEVQVCBsZWdhY3kgYmVoYXZpb3IKKyAgICAgfAorICAgICB8 CisgICAgIOKUlC0+IDx0cnVlPiAgLS0+IGlmIGVwdF9sZWFmX2VudHJ5LndyaXRhYmxlCisgICAg ICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgIOKUlC0+IDx0cnVlPiAg LS0+IElnbm9yZSBTUFAKKyAgICAgICAgICAgICAgICAgICAgICB8CisJCSAgICAgIOKUlC0+IDxm YWxzZT4gLS0+IEdQQSAtLT4gV2FsayBTUFAgNC1sZXZlbCB0YWJsZS0t4pSQCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfAor4pSMLS0tLS0tLS0tLS0tPC0tLS0tLS0tLS1nZXQtdGhlLVNQUFQtcG9pbnQtZnJvbS1W TUNTLWZpbGVkLS0tLS08LS0tLS0t4pSYCit8CitXYWxrIFNQUCBMNEUgdGFibGUKK3wKK+KUlOKU kC0tPiBlbnRyeSBtaXNjb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLT4tLS0tLS0tLS0t4pSQPC0t LS0tLS0tLS0tLS0tLS3ilJAKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8CitlbHNlICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAorIHwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg ICAgICAgIHwKKyB8ICAg4pSMLS0tLS0tLS0tLS0tLS0tLS0tU1BQIFZNZXhpdDwtLS0tLS0tLS0t LS0tLS0tLeKUmCAgICAgICAgICAgICAgICAgfAorIHwgICB8ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8ICAg4pSULT4g ZXhpdF9xdWFsaWZpY2F0aW9uICYgc3BwdF9taXNjb25maWcgLS0+IHNwcHQgbWlzY29uZmlnICAg ICAgIHwKKyB8ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8CisgfCAgIOKUlC0+IGV4aXRfcXVhbGlmaWNhdGlvbiAmIHNw cHRfbWlzcyAtLT4gc3BwdCBtaXNzICAgICAgICAgICAgICAgICB8Cisg4pSULS3ilJAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8Cit3YWxrIFNQUFQgTDNFLS3ilJAtLT4gaWYtZW50cnktbWlzY29u ZmlndXJhdGlvbi0tLS0tLS0tLS0tLT4tLS0tLS0tLS0tLS3ilJgKKyAgICAgICAgICAgICAgIHwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJ ICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8CisJICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8CisJICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHdhbGsgU1BQVCBMMkUgLS3ilJAtLT4g aWYtZW50cnktbWlzY29uZmlndXJhdGlvbi0tLS0tLS0tPi0tLS0tLS3ilJgKKyAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8CisgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfAorCQkJfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwKKwkJCXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8CisJICAgICAgICAgd2FsayBTUFBUIEwxRSAtLeKUkC0+IGlmLWVudHJ5LW1pc2Nv bmZpZ3VyYXRpb24tLS0+LS0tLeKUmAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fAorCQkJICAgICAgICBlbHNlCisJCQkJIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIOKUlC0+IGlmIHN1Yi1wYWdlIHdyaXRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIOKUlC0+IDx0cnVlPiAgYWxsb3csIHdyaXRlIGFjY2VzcworCSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIOKUlC0+IDxmYWxzZT4gZGlzYWxsb3csIEVQVCB2aW9sYXRp b24KK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXworCiszLiBJbnRlcmZhY2VzCisKKyogRmVhdHVyZSBl bmFibGluZworCitBZGQgInNwcF9lbmFibGU9MSIgdG8gWGVuIENvbW1hbmQgbGluZSB0byBlbmFi bGUgU1BQIGZlYXR1cmUsIGRlZmF1bHQgaXMgb2ZmLgorCisqIEdldC9TZXQgc3ViLXBhZ2Ugd3Jp dGUgYWNjZXNzIHBlcm1pc3Npb24KKworTmV3IFhlbiBIVk0gSHlwZXIgQ2FsbDoKKworYEhWTU9Q X3NldF9zdWJwYWdlYDoKK1NldCBzdWItcGFnZXMgd3JpdGUgYWNjZXNzIGJpdG1hcCBjb3JyZXNw b25kaW5nIHRvIGdpdmVuIGdmbi4KKworYGBgYworLyogZm9yIFhlbiBIVk1PUF9zZXRfc3VicGFn ZSAqLworc3RydWN0IHhlbl9odm1fc3VicGFnZV90IHsKKwlkb21pZCBkb21pZDsKKwlfX3U2NCBn Zm47CisJX191MzIgYWNjZXNzX21hcDsgLyogc3ViLXBhZ2Ugd3JpdGUtYWNjZXNzIGJpdG1hcCAq LworfTsKKworI2RlZmluZSBIVk1PUF9zZXRfc3VicGFnZSAgICAgICAgICAyNgorCit4ZW5jYWxs MihoYW5kbGUtPnhjYWxsLCBfX0hZUEVSVklTT1JfaHZtX29wLCBIVk1PUF9zZXRfc3VicGFnZSwK KyAgICAgICAgIEhZUEVSQ0FMTF9CVUZGRVJfQVNfQVJHKGFyZykpCitgYGAKKworNC4gU1BQVCBp bml0aWFsaXphdGlvbgorCisqIFNQUFQgcm9vdCBwYWdlIGFsbG9jYXRpb24KKworICBTUFBUIGlz IHJlZmVyZW5jZWQgdmlhIGEgNjQtYml0IGNvbnRyb2wgZmllbGQgY2FsbGVkICJzdWItcGFnZQor ICBwcm90ZWN0aW9uIHRhYmxlIHBvaW50ZSIgKFNQUFRQLCBlbmNvZGluZyAweDIwMzApIHdoaWNo IGNvbnRhaW5zIGEKKyAgNEstYWxpZ24gcGh5c2ljYWwgYWRkcmVzcy4KKworICBTUFBUIGFsc28g aGFzIDQgbGV2ZWwgdGFibGUgYXMgd2VsbCBhcyBFUFQuIFNvLCBhcyBFUFQgZG9lcywgd2hlbiBY ZW4KKyAgbG9hZHMgbW11LCB3ZSBhbGxvY2F0ZSBhIHJvb3QgcGFnZSBmb3IgU1BQVCBMNCB0YWJs ZS4KKworKiBFUFQgbGVhZiBlbnRyeSBTUFAgYml0CisKKyAgU2V0IDAgdG8gU1BQIGJpdCB0byBj bG9zZSBTUFAgYnkgZGVmYXVsdC4KKworNS4gU2V0L0dldCBTdWItUGFnZSBhY2Nlc3MgYml0bWFw IGZvciBidW5jaCBvZiBndWVzdCBwaHlzaWNhbCBwYWdlcworCisqIFRvIHV0aWxpemUgU1BQIGZl YXR1cmUsIHN5c3RlbSBhZG1pbiBzaG91bGQgU2V0IGEgU3ViLXBhZ2UgYWNjZXNzIHdyaXRlIHZp YQorICBTUFAgWGVuIGh5cGVyIGNhbGwgYEhWTU9QX3NldF9zdWJwYWdlYCwgd2hpY2ggd2lsbCBw cmVwYXJlZCB0aGUgZmxvd2luZyB0aGluZ3MuCisKKyAgICgxLkdvdCB0aGUgY29ycmVzcG9uZGlu ZyBFUFQgbGVhZiBlbnRyeSB2aWEgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MuCisgICAoMi5J ZiBpdCBpcyBhIDRLIHBhZ2UgZnJhbWUsIGZsYWcgdGhlIGJpdCA2MSB0byBlbmFibGUgc3VicGFn ZSBwcm90ZWN0aW9uIG9uIHRoaXMgcGFnZS4KKyAgICgzLlNldHVwIHNwcCBwYWdlIHN0cnVjdHVy ZSwgdGhlIHBhZ2Ugc3RydWN0dXJlIGZvcm1hdCBpcyBsaXN0IGZvbGxvd2luZy4KKworICAgRm9y bWF0IG9mIHRoZSBTUFBUIEw0RSwgTDNFLCBMMkU6CisgICB8IEJpdCAgICB8IENvbnRlbnRzICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8CisgICB8IDotLS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICB8IDAgICAgICB8IFZh bGlkIGVudHJ5IHdoZW4gc2V0OyBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZW50cnkgaXMgcHJlc2Vu dCAgICAgICAgICAgICB8CisgICB8IDExOjEgICB8IFJlc2VydmVkICgwKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8IE4t MToxMiB8IFBoeXNpY2FsIGFkZHJlc3Mgb2YgNEtCIGFsaWduZWQgU1BQVCBMWC0xIFRhYmxlIHJl ZmVyZW5jZWQgYnkgdGhpcyBlbnRyeSB8CisgICB8IDUxOk4gICB8IFJlc2VydmVkICgwKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 CisgICB8IDYzOjUyICB8IFJlc2VydmVkICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICBOb3RlOiBOIGlzIHRoZSBwaHlz aWNhbCBhZGRyZXNzIHdpZHRoIHN1cHBvcnRlZCBieSB0aGUgcHJvY2Vzc29yLiBYIGlzIHRoZSBw YWdlIGxldmVsCisKKyAgIEZvcm1hdCBvZiB0aGUgU1BQVCBMMUU6CisgICB8IEJpdCAgIHwgQ29u dGVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfAorICAgfCA6LS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwKKyAgIHwgMCsyaSAgfCBXcml0ZSBwZXJt aXNzaW9uIGZvciBpLXRoIDEyOCBieXRlIHN1Yi1wYWdlIHJlZ2lvbi4gICAgICAgICAgICAgICB8 CisgICB8IDErMmkgIHwgUmVzZXJ2ZWQgKDApLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgTm90ZTogYDA8PWk8PTMxYAorCisqIFN1Yi1w YWdlIHdyaXRlIGFjY2VzcyBiaXRtYXAgc2V0dGluZyBwc2V1ZG8tY29kZToKKworYGBgYworc3Rh dGljIGludCBwMm1fc2V0X3N1YnBhZ2Uoc3RydWN0IGRvbWFpbiAqZCwKKwkJCSAgIHN0cnVjdCB4 ZW5faHZtX3N1YnBhZ2VfdCAqc3BwX2luZm8pCit7CisgICAgZ2ZuX3QgKmdmbnMgPSBzcHBfaW5m by0+Z2ZuczsKKyAgICB1NjQgKmFjY2Vzc19tYXAgPSBzcHBfaW5mby0+YWNjZXNzX21hcDsKKwor ICAgIHNhbml0eV9jaGVjaygpOworCisgICAgLyogU1BQIHdvcmtzIHdoZW4gdGhlIHBhZ2UgaXMg dW53cml0YWJsZSAqLworICAgIGlmIChzZXRfZXB0X2xlYWZfbGV2ZWxfdW53cml0YWJsZShnZm4p ID09IHN1Y2Nlc3MpCisKKyAgICAgICAgaWYgKHAybV9zZXRfc3BwX3BhZ2Vfc3QoZ2ZuKSA9PSBz dWNjZXNzKQorCSAgICAKKwkgICAgc3VjY2VzczsKKworfQorYGBgCisKK1VzZXIgY291bGQgZ2V0 IHRoZSBzdWJwYWdlIGluZm8gdmlhIFNQUCBYZW4gaHlwZXIgY2FsbCBgSFZNT1BfZ2V0X3N1YnBh Z2VgLgorCisqIFN1Yi1wYWdlIGdldCBzdWJwYWdlIGluZm8gcHNldWRvLWNvZGU6CisKK2BgYGMK K3N0YXRpYyBpbnQgcDJtX2dldF9zdWJwYWdlKHN0cnVjdCBkb21haW4gKmQKKwkJCSAgIHN0cnVj dCB4ZW5faHZtX3N1YnBhZ2VfdCAqc3BwX2luZm8pCit7CisJZ2ZuX3QgKmdmbnMgPSBzcHBfaW5m by0+Z2ZuczsKKworCXNhbml0eV9jaGVjayhnZm4pOworCXNwcF9pbmZvID0gcDJtX2dldF9zcHBf cGFnZV9mcmFtZShnZm4pOworfQorYGBgCisKKzYuIFNQUFQtaW5kdWNlZCB2bWV4aXRzCisKKyog U1BQIFZNIGV4aXRzCisKK0FjY2Vzc2VzIHVzaW5nIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBt YXkgY2F1c2UgVk0gZXhpdHMgZHVlIHRvIGEgU1BQVAorTWlzY29uZmlndXJhdGlvbiBvciBhIFNQ UFQgTWlzcy4KKworQSBTUFBUIE1pc2NvbmZpZ3VyYXRpb24gdm1leGl0IG9jY3VycyB3aGVuLCBp biB0aGUgY291cnNlIG9mIHRyYW5zbGF0aW5nCithIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MsIHRo ZSBsb2dpY2FsIHByb2NlZXNvciBlbmNvdW50ZXJzIGEgbGVhZiBFUFQKK3BhZ2luZy1zdHJ1Y3R1 cmUgZW50cnkgbWFwcGluZyBhIDRLQiBwYWdlLCB3aXRoIFNQUCBlbmFibGVkLCBkdXJpbmcgdGhl CitTUFBUIGxvb2t1cCwgYSBTUFBUIHBhZ2luZy1zdHJ1Y3R1cmUgZW50cnkgY29udGFpbnMgYW4g dW5zdXBwb3J0ZWQKK3ZhbHVlLgorCitBIFNQUFQgTWlzcyB2bWV4aXQgb2NjdXJzIGR1cmluZyB0 aGUgU1BQVCBsb29rdXAgdGhlcmUgaXMgbm8gU1BQVAorbWlzY29uZmlndXJhdGlvbiBidXQgYW55 IGxldmVsIG9mIFNQUFQgcGFnaW5nLXN0cnVjdHVyZSBlbnRyaWVzIGFyZSBub3QKK3ByZXNlbnQu CisKK05PVEUuIFNQUFQgbWlzY29uZmlndXJhdGlvbnMgYW5kIFNQUFQgbWlzcyBjYW4gb2NjdXIg b25seSBkdWUgdG8gYW4KK2F0dGVtcHQgdG8gd3JpdGUgbWVtb3J5IHdpdGggYSBndWVzdCBwaHlz aWNhbCBhZGRyZXNzLgorCisqIEVQVCB2aW9sYXRpb24gdm1leGl0cyBkdWUgdG8gU1BQVAorCitF UFQgdmlvbGF0aW9ucyBkdWUgdG8gbWVtb3J5IHdyaXRlIGFjY2Vzc2VzIGRpc2FsbG93ZWQgZHVl IHRvIHN1Yi1wYWdlCitwcm90ZWN0aW9uIHBlcm1pc3Npb25zIHNwZWNpZmllZCBpbiB0aGUgU1BQ VCBhcmUgcmVwb3J0ZWQgdmlhIEVQVAordmlvbGF0aW9uIFZNIGV4aXRzLgorCis3LiBTUFBULWlu ZHVjZWQgdm1leGl0cyBoYW5kbGluZworCitgYGBjCisjZGVmaW5lIEVYSVRfUkVBU09OX1NQUCAg ICAgICAgICAgICAgICAgNjYKK3ZteF92bWV4aXRfaGFuZGxlciB7CisJLi4uCisJW0VYSVRfUkVB U09OX1NQUF0gICAgICAgICAgICAgICAgICAgICA9IHZteF9oYW5kbGVfc3BwLAorCS4uLgorfTsK K2BgYAorTmV3IGV4aXQgcXVhbGlmaWNhdGlvbiBmb3IgU1BQVC1pbmR1Y2VkIHZtZXhpdHMuCisK K3wgQml0ICAgfCBDb250ZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8Cit8IDotLS0tIHwgOi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfAorfCAxMDowICB8IFJl c2VydmVkICgwKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwKK3wgMTEgICAgfCBTUFBUIFZNIGV4aXQgdHlwZS4gU2V0IGZvciBTUFBUIE1pc3Ms IGNsZWFyZWQgZm9yIFNQUFQgTWlzY29uZmlnLiB8Cit8IDEyICAgIHwgTk1JIHVuYmxvY2tpbmcg ZHVlIHRvIElSRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCA2 MzoxMyB8IFJlc2VydmVkICgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwKKworKiBTUFBUIG1pc3MgYW5kIG1pc2NvbmZpZ3VyYXRpb24KKwor U1BQIFZNZXhpdCBoYW5kbGVyIFBzZXVkby1jb2RlOgorYGBgYworc3RhdGljIGludCB2bXhfaGFu ZGxlX3NwcCgpCit7CisJZXhpdF9xdWFsaWZpY2F0aW9uID0gdm1jc19yZWFkbChFWElUX1FVQUxJ RklDQVRJT04pOworCWlmIChleGl0X3F1YWxpZmljYXRpb24gJiBTUFBfRVhJVF9UWVBFX0JJVCkg eworCQkvKiBTUFBUIE1pc3MgKi8KKwl9IGVsc2UgeworCQkvKiBTUFBUIE1pc2NvbmZpZyAqLwor CQlXQVJOX09OKDEpOworCX0KKwlyZXR1cm4gMDsKK30KK2BgYAorCis4LiBFUFQgdmlvbGF0aW9u IHZtZXhpdHMgZHVlIHRvIFNQUFQKKworV2hpbGUgaGFyZHdhcmUgd2Fsa2luZyB0aGUgU1BQIHBh Z2UgdGFibGUsIElmIHRoZSBzdWItcGFnZSByZWdpb24gd3JpdGUKK3Blcm1pc3Npb24gYml0IGlz IHNldCwgdGhlIHdyaXRlIGlzIGFsbG93ZWQsIGVsc2UgdGhlIHdyaXRlIGlzIGRpc2FsbG93ZWQK K2FuZCByZXN1bHRzIGluIGFuIEVQVCB2aW9sYXRpb24uCisKK3dlIG5lZWQgcGVlayB0aGlzIGNh c2UgaW4gRVBUIHZpb2xhdGlvbiBoYW5kbGVyLgorCisKLS0gCjIuNy40CgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVs Cg==