From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v2 09/13] optee: add support for arbitrary shared memory Date: Mon, 10 Sep 2018 15:02:53 +0100 Message-ID: <4dd245b3-beba-e9fd-5367-f45358b07d8d@arm.com> References: <1535993677-20816-1-git-send-email-volodymyr_babchuk@epam.com> <1535993677-20816-10-git-send-email-volodymyr_babchuk@epam.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1535993677-20816-10-git-send-email-volodymyr_babchuk@epam.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Volodymyr Babchuk , xen-devel@lists.xenproject.org, xen-devel@lists.xen.org Cc: tee-dev@lists.linaro.org, Stefano Stabellini List-Id: xen-devel@lists.xenproject.org SGksCgpPbiAwMy8wOS8xOCAxNzo1NCwgVm9sb2R5bXlyIEJhYmNodWsgd3JvdGU6Cj4gU2hhcmVk IG1lbW9yeSBpcyB3aWRlbHkgdXNlZCBieSBOVyB0byBjb21tdW5pY2F0ZSB3aXRoCj4gVEFzIGlu IE9QLVRFRS4gTlcgY2FuIHNoYXJlIHBhcnQgb2Ygb3duIG1lbW9yeSB3aXRoCj4gVEEgb3IgT1At VEVFIGNvcmUsIGJ5IHJlZ2lzdGVyaW5nIGl0IE9QLVRFRSwgb3IgYnkgcHJvdmlkaW5nCj4gYSB0 ZW1wb3JhbCByZWZlcm5jZS4gQW55d2F5cywgaW5mb3JtYXRpb24gYWJvdXQgc3VjaCBtZW1vcnkK PiBidWZmZXJzIGFyZSBzZW50IHRvIE9QLVRFRSBhcyBhIGxpc3Qgb2YgcGFnZXMuIFRoaXMgbWVj aGFuaXNtCj4gaXMgZGVzY3JpcHRlZCBvcHRlZV9tc2cuaC4KPiAKPiBNZWRpYXRvciBzaG91bGQg c3RlcCBpbiB3aGVuIE5XIHRyaWVzIHRvIHNoYXJlIG1lbW9yeSB3aXRoCj4gT1AtVEVFIGZvciB0 d28gcmVhc29uczoKPiAKPiAxLiBEbyBhZGRyZXNzIHRyYW5zbGF0aW9uIGZyb20gSVBBIHRvIFBB Lgo+IDIuIFBpbiBkb21haW4gcGFnZXMgdGlsbCB0aGV5IGFyZSBtYXBwZWQgaW50byBPUC1URUUg b3IgVEEKPiAgICAgYWRkcmVzcyBzcGFjZSwgc28gZG9tYWluIGNhbid0IHRyYW5zZmVyIHRoaXMg cGFnZXMgdG8KPiAgICAgb3RoZXIgZG9tYWluIG9yIGJhbG9vbiBvdXQgdGhlbS4KCnMvYmFsb29u L2JhbGxvb24vCgo+IAo+IEFkZHJlc3MgdHJhbnNsYXRpb24gaXMgZG9uZSBieSB0cmFuc2xhdGVf bm9uY29udGlnKC4uLikgZnVuY3Rpb24uCj4gSXQgYWxsb2NhdGVzIG5ldyBidWZmZXIgZnJvbSB4 ZW5oZWFwIGFuZCB0aGVuIHdhbGtzIG9uIGd1ZXN0Cj4gcHJvdmlkZWQgbGlzdCBvZiBwYWdlcywg dHJhbnNsYXRlcyBhZGRyZXNzZXMgYW5kIHN0b3JlcyBQQXMgaW50bwo+IG5ld2x5IGFsbG9jYXRl ZCBidWZmZXIuIFRoaXMgYnVmZmVyIHdpbGwgYmUgcHJvdmlkZWQgdG8gT1AtVEVFCj4gaW5zdGVh ZCBvZiBvcmlnaW5hbCBidWZmZXIgZnJvbSB0aGUgZ3Vlc3QuIFRoaXMgYnVmZmVyIHdpbGwKPiBi ZSBmcmVlIGF0IHRoZSBlbmQgb2Ygc2RhbmRhcmQgY2FsbC4KPiAKPiBJbiB0aGUgc2FtZSB0aW1l IHRoaXMgZnVuY3Rpb24gcGlucyBwYWdlcyBhbmQgc3RvcmVzIHRoZW0gaW4KPiBzdHJ1Y3Qgc2ht X2J1ZiBvYmplY3QuIFRoaXMgb2JqZWN0IHdpbGwgbGl2ZSBhbGwgdGhlIHRpbWUsCj4gd2hlbiBn aXZlbiBTSE0gYnVmZmVyIGlzIGtub3duIHRvIE9QLVRFRS4gSXQgd2lsbCBiZSBmcmVlZAo+IGFm dGVyIGd1ZXN0IHVucmVnaXN0ZXJzIHNoYXJlZCBidWZmZXIuIEF0IHRoaXMgdGltZSBwYWdlcwo+ IHdpbGwgYmUgdW5waW5uZWQuCj4gCj4gU2lnbmVkLW9mZi1ieTogVm9sb2R5bXlyIEJhYmNodWsg PHZvbG9keW15cl9iYWJjaHVrQGVwYW0uY29tPgo+IC0tLQo+ICAgeGVuL2FyY2gvYXJtL3RlZS9v cHRlZS5jIHwgMjQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystCj4gICAxIGZpbGUgY2hhbmdlZCwgMjQ0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkK PiAKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5jIGIveGVuL2FyY2gvYXJt L3RlZS9vcHRlZS5jCj4gaW5kZXggNmQ2YjUxZC4uOGJmY2ZkYyAxMDA2NDQKPiAtLS0gYS94ZW4v YXJjaC9hcm0vdGVlL29wdGVlLmMKPiArKysgYi94ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMKPiBA QCAtMjIsNiArMjIsOCBAQAo+ICAgCj4gICAjZGVmaW5lIE1BWF9TVERfQ0FMTFMgICAxNgo+ICAg I2RlZmluZSBNQVhfUlBDX1NITVMgICAgMTYKPiArI2RlZmluZSBNQVhfVE9UQUxfU01IX0JVRl9Q RyAgICAxNjM4NAoKU28gdGhhdCdzIDY0TUIgd29ydGggb2YgZ3Vlc3QgbWVtb3J5LiBEbyB3ZSBl eHBlY3QgdGhlbSB0byBiZSBtYXBwZWQgaW4gClhlbj8gT3IganVzdCBwaW5uZWQ/Cgo+ICsjZGVm aW5lIE1BWF9OT05DT05USUdfRU5UUklFUyAgIDUKPiAgIAo+ICAgLyoKPiAgICAqIENhbGwgY29u dGV4dC4gT1AtVEVFIGNhbiBpc3N1ZSBtdWx0aXBsZSBSUEMgcmV0dXJucyBkdXJpbmcgb25lIGNh bGwuCj4gQEAgLTMxLDYgKzMzLDkgQEAgc3RydWN0IHN0ZF9jYWxsX2N0eCB7Cj4gICAgICAgc3Ry dWN0IGxpc3RfaGVhZCBsaXN0Owo+ICAgICAgIHN0cnVjdCBvcHRlZV9tc2dfYXJnICpndWVzdF9h cmc7Cj4gICAgICAgc3RydWN0IG9wdGVlX21zZ19hcmcgKnhlbl9hcmc7Cj4gKyAgICAvKiBCdWZm ZXIgZm9yIHRyYW5zbGF0ZWQgcGFnZSBhZGRyZXNzZXMsIHNoYXJlZCB3aXRoIE9QLVRFRSAqLwo+ ICsgICAgdm9pZCAqbm9uX2NvbnRpZ1tNQVhfTk9OQ09OVElHX0VOVFJJRVNdOwo+ICsgICAgaW50 IG5vbl9jb250aWdfb3JkZXJbTUFYX05PTkNPTlRJR19FTlRSSUVTXTsKCkNhbiB5b3UgcGxlYXNl IGludHJvZHVjZSBhIHN0cnVjdHVyZSB3aXRoIHRoZSBvcmRlciBhbmQgbWFwcGluZz8KCj4gICAg ICAgbWZuX3QgZ3Vlc3RfYXJnX21mbjsKPiAgICAgICBpbnQgb3B0ZWVfdGhyZWFkX2lkOwo+ICAg ICAgIGludCBycGNfb3A7Cj4gQEAgLTQ1LDEzICs1MCwyNCBAQCBzdHJ1Y3Qgc2htX3JwYyB7Cj4g ICAgICAgdWludDY0X3QgY29va2llOwo+ICAgfTsKPiAgIAo+ICsvKiBTaGFyZWQgbWVtb3J5IGJ1 ZmZlciBmb3IgYXJiaXRyYXJ5IGRhdGEgKi8KPiArc3RydWN0IHNobV9idWYgewo+ICsgICAgc3Ry dWN0IGxpc3RfaGVhZCBsaXN0Owo+ICsgICAgdWludDY0X3QgY29va2llOwo+ICsgICAgaW50IG1h eF9wYWdlX2NudDsKPiArICAgIGludCBwYWdlX2NudDsKCkFGQUlDVCwgbWF4X3BhZ2VfY250IGFu ZCBwYWdlX2NudCBzaG91bGQgbmV2ZXIgYnV0IG5lZ2F0aXZlLiBJZiBzbywgdGhlbiAKdGhleSBz aG91bGQgYmUgdW5zaWduZWQuCgo+ICsgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZXNbXTsKPiAr fTsKPiArCj4gICBzdHJ1Y3QgZG9tYWluX2N0eCB7Cj4gICAgICAgc3RydWN0IGxpc3RfaGVhZCBs aXN0Owo+ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgY2FsbF9jdHhfbGlzdDsKPiAgICAgICBzdHJ1 Y3QgbGlzdF9oZWFkIHNobV9ycGNfbGlzdDsKPiArICAgIHN0cnVjdCBsaXN0X2hlYWQgc2htX2J1 Zl9saXN0Owo+ICAgICAgIHN0cnVjdCBkb21haW4gKmRvbWFpbjsKPiAgICAgICBhdG9taWNfdCBj YWxsX2N0eF9jb3VudDsKPiAgICAgICBhdG9taWNfdCBzaG1fcnBjX2NvdW50Owo+ICsgICAgYXRv bWljX3Qgc2htX2J1Zl9wYWdlczsKPiAgICAgICBzcGlubG9ja190IGxvY2s7Cj4gICB9Owo+ICAg Cj4gQEAgLTE1OCw5ICsxNzQsMTIgQEAgc3RhdGljIGludCBvcHRlZV9lbmFibGUoc3RydWN0IGRv bWFpbiAqZCkKPiAgICAgICBjdHgtPmRvbWFpbiA9IGQ7Cj4gICAgICAgSU5JVF9MSVNUX0hFQUQo JmN0eC0+Y2FsbF9jdHhfbGlzdCk7Cj4gICAgICAgSU5JVF9MSVNUX0hFQUQoJmN0eC0+c2htX3Jw Y19saXN0KTsKPiArICAgIElOSVRfTElTVF9IRUFEKCZjdHgtPnNobV9idWZfbGlzdCk7Cj4gICAK PiAgICAgICBhdG9taWNfc2V0KCZjdHgtPmNhbGxfY3R4X2NvdW50LCAwKTsKPiAgICAgICBhdG9t aWNfc2V0KCZjdHgtPnNobV9ycGNfY291bnQsIDApOwo+ICsgICAgYXRvbWljX3NldCgmY3R4LT5z aG1fYnVmX3BhZ2VzLCAwKTsKPiArCj4gICAgICAgc3Bpbl9sb2NrX2luaXQoJmN0eC0+bG9jayk7 Cj4gICAKPiAgICAgICBzcGluX2xvY2soJmRvbWFpbl9jdHhfbGlzdF9sb2NrKTsKPiBAQCAtMzM5 LDEyICszNTgsNzYgQEAgc3RhdGljIHZvaWQgZnJlZV9zaG1fcnBjKHN0cnVjdCBkb21haW5fY3R4 ICpjdHgsIHVpbnQ2NF90IGNvb2tpZSkKPiAgICAgICB4ZnJlZShzaG1fcnBjKTsKPiAgIH0KPiAg IAo+ICtzdGF0aWMgc3RydWN0IHNobV9idWYgKmFsbG9jYXRlX3NobV9idWYoc3RydWN0IGRvbWFp bl9jdHggKmN0eCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ2NF90IGNvb2tpZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBwYWdlc19jbnQpCgpEaXR0by4KCj4gK3sKPiArICAgIHN0cnVjdCBzaG1fYnVmICpzaG1f YnVmOwo+ICsKPiArICAgIHdoaWxlKDEpCj4gKyAgICB7Cj4gKyAgICAgICAgaW50IG9sZCA9IGF0 b21pY19yZWFkKCZjdHgtPnNobV9idWZfcGFnZXMpOwo+ICsgICAgICAgIGludCBuZXcgPSBvbGQg KyBwYWdlc19jbnQ7Cj4gKyAgICAgICAgaWYgKCBuZXcgPj0gTUFYX1RPVEFMX1NNSF9CVUZfUEcg KQo+ICsgICAgICAgICAgICByZXR1cm4gTlVMTDsKPiArICAgICAgICBpZiAoIGxpa2VseShvbGQg PT0gYXRvbWljX2NtcHhjaGcoJmN0eC0+c2htX2J1Zl9wYWdlcywgb2xkLCBuZXcpKSApCj4gKyAg ICAgICAgICAgIGJyZWFrOwo+ICsgICAgfQo+ICsKPiArICAgIHNobV9idWYgPSB4emFsbG9jX2J5 dGVzKHNpemVvZihzdHJ1Y3Qgc2htX2J1ZikgKwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGFnZXNfY250ICogc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKPiArICAgIGlmICggIXNobV9i dWYgKSB7CgpDb2Rpbmcgc3R5bGU6CgppZiAoIC4uLiApCnsKCj4gKyAgICAgICAgYXRvbWljX3N1 YihwYWdlc19jbnQsICZjdHgtPnNobV9idWZfcGFnZXMpOwo+ICsgICAgICAgIHJldHVybiBOVUxM Owo+ICsgICAgfQo+ICsKPiArICAgIHNobV9idWYtPmNvb2tpZSA9IGNvb2tpZTsKPiArICAgIHNo bV9idWYtPm1heF9wYWdlX2NudCA9IHBhZ2VzX2NudDsKPiArCj4gKyAgICBzcGluX2xvY2soJmN0 eC0+bG9jayk7Cj4gKyAgICBsaXN0X2FkZF90YWlsKCZzaG1fYnVmLT5saXN0LCAmY3R4LT5zaG1f YnVmX2xpc3QpOwo+ICsgICAgc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cj4gKwo+ICsgICAgcmV0 dXJuIHNobV9idWY7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGZyZWVfc2htX2J1ZihzdHJ1Y3Qg ZG9tYWluX2N0eCAqY3R4LCB1aW50NjRfdCBjb29raWUpCj4gK3sKPiArICAgIHN0cnVjdCBzaG1f YnVmICpzaG1fYnVmOyA+ICsgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwo+ICsKPiArICAgIHNwaW5f bG9jaygmY3R4LT5sb2NrKTsKPiArICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoIHNobV9idWYsICZj dHgtPnNobV9idWZfbGlzdCwgbGlzdCApCj4gKyAgICB7Cj4gKyAgICAgICAgaWYgKCBzaG1fYnVm LT5jb29raWUgPT0gY29va2llICkKCldoYXQgZG9lcyBndWFyYW50ZWUgeW91IHRoZSBjb29raWUg d2lsbCBiZSB1bmlxPwoKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK PiArICAgICAgICAgICAgbGlzdF9kZWwoJnNobV9idWYtPmxpc3QpOwo+ICsgICAgICAgICAgICBi cmVhazsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICBzcGluX3VubG9jaygmY3R4LT5sb2Nr KTsKCgpBdCB0aGlzIHBvaW50IHlvdSBoYXZlIGEgc2htX2J1ZiBpbiBoYW5kIHRvIGZyZWUuIEJ1 dCB3aGF0IGRvZXMgCmd1YXJhbnRlZSB5b3Ugbm8tb25lIHdpbGwgdXNlIGl0PwoKPiArCj4gKyAg ICBpZiAoICFmb3VuZCApIHsKPiArICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAg Zm9yICggaW50IGkgPSAwOyBpIDwgc2htX2J1Zi0+cGFnZV9jbnQ7IGkrKyApCgpQbGVhc2UgZGVm aW5lIGludCBpIGJlZm9yZSBoYW5kLgoKPiArICAgICAgICBpZiAoIHNobV9idWYtPnBhZ2VzW2ld ICkKPiArICAgICAgICAgICAgcHV0X3BhZ2Uoc2htX2J1Zi0+cGFnZXNbaV0pOwo+ICsKPiArICAg IGF0b21pY19zdWIoc2htX2J1Zi0+bWF4X3BhZ2VfY250LCAmY3R4LT5zaG1fYnVmX3BhZ2VzKTsK PiArCj4gKyAgICB4ZnJlZShzaG1fYnVmKTsKPiArfQo+ICsKPiAgIHN0YXRpYyB2b2lkIG9wdGVl X2RvbWFpbl9kZXN0cm95KHN0cnVjdCBkb21haW4gKmQpCj4gICB7Cj4gICAgICAgc3RydWN0IGFy bV9zbWNjY19yZXMgcmVzcDsKPiAgICAgICBzdHJ1Y3QgZG9tYWluX2N0eCAqY3R4Owo+ICAgICAg IHN0cnVjdCBzdGRfY2FsbF9jdHggKmNhbGwsICpjYWxsX3RtcDsKPiAgICAgICBzdHJ1Y3Qgc2ht X3JwYyAqc2htX3JwYywgKnNobV9ycGNfdG1wOwo+ICsgICAgc3RydWN0IHNobV9idWYgKnNobV9i dWYsICpzaG1fYnVmX3RtcDsKPiAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Cj4gICAKPiAgICAg ICAvKiBBdCB0aGlzIHRpbWUgYWxsIGRvbWFpbiBWQ1BVcyBzaG91bGQgYmUgc3RvcHBlZCAqLwo+ IEBAIC0zNzcsMTIgKzQ2MCwxNjMgQEAgc3RhdGljIHZvaWQgb3B0ZWVfZG9tYWluX2Rlc3Ryb3ko c3RydWN0IGRvbWFpbiAqZCkKPiAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoIHNobV9y cGMsIHNobV9ycGNfdG1wLCAmY3R4LT5zaG1fcnBjX2xpc3QsIGxpc3QgKQo+ICAgICAgICAgICBm cmVlX3NobV9ycGMoY3R4LCBzaG1fcnBjLT5jb29raWUpOwo+ICAgCj4gKyAgICBsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUoIHNobV9idWYsIHNobV9idWZfdG1wLCAmY3R4LT5zaG1fYnVmX2xpc3Qs IGxpc3QgKQo+ICsgICAgICAgIGZyZWVfc2htX2J1ZihjdHgsIHNobV9idWYtPmNvb2tpZSk7Cj4g Kwo+ICAgICAgIEFTU0VSVCghYXRvbWljX3JlYWQoJmN0eC0+Y2FsbF9jdHhfY291bnQpKTsKPiAg ICAgICBBU1NFUlQoIWF0b21pY19yZWFkKCZjdHgtPnNobV9ycGNfY291bnQpKTsKPiArICAgIEFT U0VSVCghYXRvbWljX3JlYWQoJmN0eC0+c2htX2J1Zl9wYWdlcykpOwo+ICAgCj4gICAgICAgeGZy ZWUoY3R4KTsKPiAgIH0KPiAgIAo+ICsjZGVmaW5lIFBBR0VMSVNUX0VOVFJJRVNfUEVSX1BBR0Ug ICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICgoT1BURUVfTVNHX05PTkNPTlRJR19QQUdF X1NJWkUgLyBzaXplb2YodTY0KSkgLSAxKQo+ICsKPiArc3RhdGljIHNpemVfdCBnZXRfcGFnZXNf bGlzdF9zaXplKHNpemVfdCBudW1fZW50cmllcykKPiArewo+ICsgICAgaW50IHBhZ2VzID0gRElW X1JPVU5EX1VQKG51bV9lbnRyaWVzLCBQQUdFTElTVF9FTlRSSUVTX1BFUl9QQUdFKTsKPiArCj4g KyAgICByZXR1cm4gcGFnZXMgKiBPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRTsKPiArfQo+ ICsKPiArc3RhdGljIGJvb2wgdHJhbnNsYXRlX25vbmNvbnRpZyhzdHJ1Y3QgZG9tYWluX2N0eCAq Y3R4LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGRfY2FsbF9j dHggKmNhbGwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG9wdGVl X21zZ19wYXJhbSAqcGFyYW0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGlkeCkKCk1vc3QgbGlrZWx5IHRoaXMgc2hvdWxkIGJlIHVuc2lnbmVkLgoKPiArewo+ICsgICAg LyoKPiArICAgICAqIFJlZmVyIHRvIE9QVEVFX01TR19BVFRSX05PTkNPTlRJRyBkZXNjcmlwdGlv biBpbiBvcHRlZV9tc2cuaCBmb3IgZGV0YWlscy4KPiArICAgICAqLwo+ICsgICAgdWludDY0X3Qg c2l6ZTsKPiArICAgIGludCBwYWdlX29mZnNldDsKPiArICAgIGludCBudW1fcGFnZXM7Cj4gKyAg ICBpbnQgb3JkZXI7Cj4gKyAgICBpbnQgZW50cmllc19vbl9wYWdlID0gMDsKPiArICAgIHBhZGRy X3QgZ2FkZHI7Cj4gKyAgICBtZm5fdCBndWVzdF9tZm47CgpJIGRvbid0IGxpa2UgdGhlIHRlcm1p bm9sb2d5IGd1ZXN0X21mbi4gVGhpcyBpcyBtaXNsZWFkaW5nIGJlY2F1c2Ugb2YgCnRoZSBwYXN0 IHVzYWdlIGluIFhlbi4gSXQgd291bGQgYmUgYmV0dGVyIGlmIHlvdSBjYWxsIHRoaXMganVzdCBt Zm4uCgo+ICsgICAgc3RydWN0IHsKPiArICAgICAgICB1aW50NjRfdCBwYWdlc19saXN0W1BBR0VM SVNUX0VOVFJJRVNfUEVSX1BBR0VdOwo+ICsgICAgICAgIHVpbnQ2NF90IG5leHRfcGFnZV9kYXRh Owo+ICsgICAgfSAqcGFnZXNfZGF0YV9ndWVzdCwgKnBhZ2VzX2RhdGFfeGVuLCAqcGFnZXNfZGF0 YV94ZW5fc3RhcnQ7Cj4gKyAgICBzdHJ1Y3Qgc2htX2J1ZiAqc2htX2J1ZjsKPiArCj4gKyAgICBw YWdlX29mZnNldCA9IHBhcmFtLT51LnRtZW0uYnVmX3B0ciAmIChPUFRFRV9NU0dfTk9OQ09OVElH X1BBR0VfU0laRSAtIDEpOwo+ICsKPiArICAgIHNpemUgPSBST1VORFVQKHBhcmFtLT51LnRtZW0u c2l6ZSArIHBhZ2Vfb2Zmc2V0LAo+ICsgICAgICAgICAgICAgICAgICAgT1BURUVfTVNHX05PTkNP TlRJR19QQUdFX1NJWkUpOwo+ICsKPiArICAgIG51bV9wYWdlcyA9IERJVl9ST1VORF9VUChzaXpl LCBPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSk7Cj4gKwo+ICsgICAgb3JkZXIgPSBnZXRf b3JkZXJfZnJvbV9ieXRlcyhnZXRfcGFnZXNfbGlzdF9zaXplKG51bV9wYWdlcykpOwo+ICsKPiAr ICAgIHBhZ2VzX2RhdGFfeGVuX3N0YXJ0ID0gYWxsb2NfeGVuaGVhcF9wYWdlcyhvcmRlciwgMCk7 CgpUaGlzIGNvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgX3htYWxsb2MgYW5kIHdvdWxkIGF2b2lkIHRv IGFsbG9jYXRlIG1vcmUgCm1lbW9yeSB0aGFuIG5lY2Vzc2FyeSB3aGVuIHRoZSBvcmRlciBpcyBn ZXR0aW5nIGJpZ2dlci4KCj4gKyAgICBpZiAoICFwYWdlc19kYXRhX3hlbl9zdGFydCApCj4gKyAg ICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgIHNobV9idWYgPSBhbGxvY2F0ZV9zaG1fYnVm KGN0eCwgcGFyYW0tPnUudG1lbS5zaG1fcmVmLCBudW1fcGFnZXMpOwoKSW4gYWxvY2F0ZV9zaG1f YnVmIHlvdSBhcmUgbm93IGdsb2JhbGx5IGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcGFnZXMgKCAK KDE2Mzg0KSB0byBwaW4uIEhvd2V2ZXIsIHRoaXMgZG9lcyBub3QgbGltaXQgcGVyIGNhbGwuCgpX aXRoIHRoZSBjdXJyZW50IGxpbWl0LCB5b3Ugd291bGQgY291bGQgY2FsbCB1cCB0byAxNjM4NCB0 aW1lcyAKbG9va3VwX2FuZF9waW5fZ3Vlc3RfcmFtX2FkZHIoLi4uKS4gT24gQXJtLCBmb3IgcDJt IHJlbGF0ZWQgb3BlcmF0aW9uLCAKd2UgbGltaXQgdG8gNTEyIGl0ZXJhdGlvbnMgaW4gb25lIGdv IGJlZm9yZSBjaGVja2luZyB0aGUgcHJlZW1wdGlvbi4KU28gSSB0aGluayAxNjM4NCB0aW1lcyBp cyBmYXIgdG9vIG11Y2guCgo+ICsgICAgaWYgKCAhc2htX2J1ZiApCj4gKyAgICAgICAgZ290byBl cnJfZnJlZTsKPiArCj4gKyAgICBnYWRkciA9IHBhcmFtLT51LnRtZW0uYnVmX3B0ciAmIH4oT1BU RUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUgLSAxKTsKPiArICAgIGd1ZXN0X21mbiA9IGxvb2t1 cF9hbmRfcGluX2d1ZXN0X3JhbV9hZGRyKGdhZGRyLCBOVUxMKTsKPiArICAgIGlmICggbWZuX2Vx KGd1ZXN0X21mbiwgSU5WQUxJRF9NRk4pICkKPiArICAgICAgICBnb3RvIGVycl9mcmVlOwo+ICsK PiArICAgIHBhZ2VzX2RhdGFfZ3Vlc3QgPSBtYXBfZG9tYWluX3BhZ2UoZ3Vlc3RfbWZuKTsKPiAr ICAgIGlmICggIXBhZ2VzX2RhdGFfZ3Vlc3QgKQo+ICsgICAgICAgIGdvdG8gZXJyX2ZyZWU7Cj4g Kwo+ICsgICAgcGFnZXNfZGF0YV94ZW4gPSBwYWdlc19kYXRhX3hlbl9zdGFydDsKPiArICAgIHdo aWxlICggbnVtX3BhZ2VzICkgewo+ICsgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Cj4g KyAgICAgICAgbWZuX3QgZW50cnlfbWZuID0gbG9va3VwX2FuZF9waW5fZ3Vlc3RfcmFtX2FkZHIo Cj4gKyAgICAgICAgICAgIHBhZ2VzX2RhdGFfZ3Vlc3QtPnBhZ2VzX2xpc3RbZW50cmllc19vbl9w YWdlXSwgJnBhZ2UpOwo+ICsKPiArICAgICAgICBpZiAoIG1mbl9lcShlbnRyeV9tZm4sIElOVkFM SURfTUZOKSApCj4gKyAgICAgICAgICAgIGdvdG8gZXJyX3VubWFwOwo+ICsKPiArICAgICAgICBz aG1fYnVmLT5wYWdlc1tzaG1fYnVmLT5wYWdlX2NudCsrXSA9IHBhZ2U7Cj4gKyAgICAgICAgcGFn ZXNfZGF0YV94ZW4tPnBhZ2VzX2xpc3RbZW50cmllc19vbl9wYWdlXSA9IG1mbl90b19tYWRkcihl bnRyeV9tZm4pOwo+ICsgICAgICAgIGVudHJpZXNfb25fcGFnZSsrOwo+ICsKPiArICAgICAgICBp ZiAoIGVudHJpZXNfb25fcGFnZSA9PSBQQUdFTElTVF9FTlRSSUVTX1BFUl9QQUdFICkgewo+ICsg ICAgICAgICAgICBwYWdlc19kYXRhX3hlbi0+bmV4dF9wYWdlX2RhdGEgPSB2aXJ0X3RvX21hZGRy KHBhZ2VzX2RhdGFfeGVuICsgMSk7Cj4gKyAgICAgICAgICAgIHBhZ2VzX2RhdGFfeGVuKys7Cj4g KyAgICAgICAgICAgIGdhZGRyID0gcGFnZXNfZGF0YV9ndWVzdC0+bmV4dF9wYWdlX2RhdGE7Cgpu ZXh0X3BhZ2VfZGF0YSBpcyBub3QgYSBndWVzdCBhZGRyZXNzIGJ1dCBhIG1hY2hpbmUgYWRkcmVz cy4gRm9yIAphbnl0aGluZyByZWxhdGVkIHRvIGFkZHJlc3MsIHRoZSB2YXJpYWJsZSBzaG91bGQg YmUgbmFtZWQgYWNjb3JkaW5nbHkgdG8gCmF2b2lkIGNvbmZ1c2lvbi4KCj4gKwo+ICsgICAgICAg ICAgICB1bm1hcF9kb21haW5fcGFnZShwYWdlc19kYXRhX2d1ZXN0KTsKPiArICAgICAgICAgICAg dW5waW5fZ3Vlc3RfcmFtX2FkZHIoZ3Vlc3RfbWZuKTsKPiArCj4gKyAgICAgICAgICAgIGd1ZXN0 X21mbiA9IGxvb2t1cF9hbmRfcGluX2d1ZXN0X3JhbV9hZGRyKGdhZGRyLCBOVUxMKTsKPiArICAg ICAgICAgICAgaWYgKCBtZm5fZXEoZ3Vlc3RfbWZuLCBJTlZBTElEX01GTikgKQo+ICsgICAgICAg ICAgICAgICAgZ290byBlcnJfZnJlZTsKPiArCj4gKyAgICAgICAgICAgIHBhZ2VzX2RhdGFfZ3Vl c3QgPSBtYXBfZG9tYWluX3BhZ2UoZ3Vlc3RfbWZuKTsKPiArICAgICAgICAgICAgaWYgKCAhcGFn ZXNfZGF0YV9ndWVzdCApCj4gKyAgICAgICAgICAgICAgICBnb3RvIGVycl9mcmVlOwo+ICsgICAg ICAgICAgICAvKiBSb2xsIG92ZXIgdG8gdGhlIG5leHQgcGFnZSAqLwo+ICsgICAgICAgICAgICBl bnRyaWVzX29uX3BhZ2UgPSAwOwo+ICsgICAgICAgIH0KPiArICAgICAgICBudW1fcGFnZXMtLTsK PiArICAgIH0KPiArCj4gKyAgICBwYXJhbS0+dS50bWVtLmJ1Zl9wdHIgPSB2aXJ0X3RvX21hZGRy KHBhZ2VzX2RhdGFfeGVuX3N0YXJ0KSB8IHBhZ2Vfb2Zmc2V0Owo+ICsKPiArICAgIGNhbGwtPm5v bl9jb250aWdbaWR4XSA9IHBhZ2VzX2RhdGFfeGVuX3N0YXJ0Owo+ICsgICAgY2FsbC0+bm9uX2Nv bnRpZ19vcmRlcltpZHhdID0gb3JkZXI7CgpJZiB5b3UgdXNlIF94bWFsbG9jLCB0aGVuIHlvdSBk b24ndCBuZWVkIHRvIHN0b3JlIHRoZSBvcmRlci4gQnV0LCB3aG8gaXMgCmdvaW5nIHRvIGZyZWUg bm9uX2NvbnRpZz8KCj4gKwo+ICsgICAgdW5tYXBfZG9tYWluX3BhZ2UocGFnZXNfZGF0YV9ndWVz dCk7Cj4gKyAgICB1bnBpbl9ndWVzdF9yYW1fYWRkcihndWVzdF9tZm4pOwo+ICsgICAgcmV0dXJu IHRydWU7Cj4gKwo+ICtlcnJfdW5tYXA6Cj4gKyAgICB1bm1hcF9kb21haW5fcGFnZShwYWdlc19k YXRhX2d1ZXN0KTsKPiArICAgIHVucGluX2d1ZXN0X3JhbV9hZGRyKGd1ZXN0X21mbik7Cj4gKyAg ICBmcmVlX3NobV9idWYoY3R4LCBzaG1fYnVmLT5jb29raWUpOwo+ICsKPiArZXJyX2ZyZWU6Cj4g KyAgICBmcmVlX3hlbmhlYXBfcGFnZXMocGFnZXNfZGF0YV94ZW5fc3RhcnQsIG9yZGVyKTsKPiAr Cj4gKyAgICByZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHRyYW5zbGF0ZV9w YXJhbXMoc3RydWN0IGRvbWFpbl9jdHggKmN0eCwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICpjYWxsKQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBpbnQg aTsKPiArICAgIHVpbnQzMl90IGF0dHI7Cj4gKwo+ICsgICAgZm9yICggaSA9IDA7IGkgPCBjYWxs LT54ZW5fYXJnLT5udW1fcGFyYW1zOyBpKysgKSB7CgpQbGVhc2UgcGF5IGF0dGVudGlvbiB0byBY ZW4gY29kaW5nIHN0eWxlLiBJIGhhdmVuJ3QgcG9pbnRlZCBvdXQgCmV2ZXJ5d2hlcmUsIGJ1dCBJ IHdvdWxkIGFsbCBvZiB0aGVtIHRvIGJlIGZpeGVkIGluIHRoZSBuZXh0IHZlcnNpb24uCgo+ICsg ICAgICAgIGF0dHIgPSBjYWxsLT54ZW5fYXJnLT5wYXJhbXNbaV0uYXR0cjsKPiArCj4gKyAgICAg ICAgc3dpdGNoICggYXR0ciAmIE9QVEVFX01TR19BVFRSX1RZUEVfTUFTSyApIHsKPiArICAgICAg ICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfVE1FTV9JTlBVVDoKPiArICAgICAgICBjYXNlIE9Q VEVFX01TR19BVFRSX1RZUEVfVE1FTV9PVVRQVVQ6Cj4gKyAgICAgICAgY2FzZSBPUFRFRV9NU0df QVRUUl9UWVBFX1RNRU1fSU5PVVQ6Cj4gKyAgICAgICAgICAgIGlmICggYXR0ciAmIE9QVEVFX01T R19BVFRSX05PTkNPTlRJRyApIHsKPiArICAgICAgICAgICAgICAgIGlmICggIXRyYW5zbGF0ZV9u b25jb250aWcoY3R4LCBjYWxsLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjYWxsLT54ZW5fYXJnLT5wYXJhbXMgKyBpLCBpKSApCj4gKyAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOwo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIGVsc2Ug ewo+ICsgICAgICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfV0FSTklORywgIkd1ZXN0IHRyaWVz IHRvIHVzZSBvbGQgdG1lbSBhcmdcbiIpOwo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl Owo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIGNhc2Ug T1BURUVfTVNHX0FUVFJfVFlQRV9OT05FOgo+ICsgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJf VFlQRV9WQUxVRV9JTlBVVDoKPiArICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfVkFM VUVfT1VUUFVUOgo+ICsgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9WQUxVRV9JTk9V VDoKPiArICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfUk1FTV9JTlBVVDoKPiArICAg ICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfUk1FTV9PVVRQVVQ6Cj4gKyAgICAgICAgY2Fz ZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JNRU1fSU5PVVQ6Cj4gKyAgICAgICAgICAgIGNvbnRpbnVl Owo+ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIHJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICAg LyoKPiAgICAqIENvcHkgY29tbWFuZCBidWZmZXIgaW50byB4ZW4gbWVtb3J5IHRvOgo+ICAgICog MSkgSGlkZSB0cmFuc2xhdGVkIGFkZHJlc3NlcyBmcm9tIGd1ZXN0Cj4gQEAgLTQ4OCw2ICs3MjIs MTUgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZV9zdGRfY2FsbChzdHJ1Y3QgZG9tYWluX2N0eCAqY3R4 LAo+ICAgCj4gICAgICAgY29weV9zdGRfcmVxdWVzdF9iYWNrKGN0eCwgcmVncywgY2FsbCk7Cj4g ICAKPiArICAgIC8qCj4gKyAgICAgKiBJZiBndWVzdCBzdWNjZXNzZnVsbHkgdW5yZWdpc3RlcmVk IG93biBzaGFyZWQgbWVtb3J5LAo+ICsgICAgICogdGhlbiB3ZSBjYW4gdW5waW4gaXQncyBwYWdl cwo+ICsgICAgICovCj4gKyAgICBpZiAoIGNhbGwtPnhlbl9hcmctPmNtZCA9PSBPUFRFRV9NU0df Q01EX1VOUkVHSVNURVJfU0hNICYmCj4gKyAgICAgICAgIGNhbGwtPnhlbl9hcmctPnJldCA9PSAw ICkgewo+ICsgICAgICAgIGZyZWVfc2htX2J1ZihjdHgsIGNhbGwtPnhlbl9hcmctPnBhcmFtc1sw XS51LnJtZW0uc2htX3JlZik7Cj4gKyAgICB9Cj4gKwo+ICAgICAgIGZyZWVfc3RkX2NhbGxfY3R4 KGN0eCwgY2FsbCk7Cj4gICAKPiAgICAgICByZXR1cm4gdHJ1ZTsKPiBAQCAtNTIyLDcgKzc2NSw3 IEBAIHN0YXRpYyBib29sIGhhbmRsZV9zdGRfY2FsbChzdHJ1Y3QgZG9tYWluX2N0eCAqY3R4LCBz dHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPiAgICAgICBjYXNlIE9QVEVFX01TR19DTURfQ0FO Q0VMOgo+ICAgICAgIGNhc2UgT1BURUVfTVNHX0NNRF9SRUdJU1RFUl9TSE06Cj4gICAgICAgY2Fz ZSBPUFRFRV9NU0dfQ01EX1VOUkVHSVNURVJfU0hNOgo+IC0gICAgICAgIHJldCA9IHRydWU7Cj4g KyAgICAgICAgcmV0ID0gdHJhbnNsYXRlX3BhcmFtcyhjdHgsIGNhbGwpOwo+ICAgICAgICAgICBi cmVhazsKPiAgICAgICBkZWZhdWx0Ogo+ICAgICAgICAgICByZXQgPSBmYWxzZTsKPiAKCkNoZWVy cywKCi0tIApKdWxpZW4gR3JhbGwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnBy b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94 ZW4tZGV2ZWw=