From mboxrd@z Thu Jan 1 00:00:00 1970 From: Volodymyr Babchuk Subject: [PATCH v3 08/11] optee: add support for arbitrary shared memory Date: Tue, 18 Dec 2018 21:11:48 +0000 Message-ID: <20181218211126.6886-9-volodymyr_babchuk@epam.com> References: <20181218211126.6886-1-volodymyr_babchuk@epam.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gZMem-00052t-BT for xen-devel@lists.xenproject.org; Tue, 18 Dec 2018 21:12:00 +0000 In-Reply-To: <20181218211126.6886-1-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: "xen-devel@lists.xenproject.org" , Julien Grall Cc: Volodymyr Babchuk , "tee-dev@lists.linaro.org" , Stefano Stabellini , Volodymyr Babchuk List-Id: xen-devel@lists.xenproject.org RnJvbTogVm9sb2R5bXlyIEJhYmNodWsgPHZsYWQuYmFiY2h1a0BnbWFpbC5jb20+CgpTaGFyZWQg bWVtb3J5IGlzIHdpZGVseSB1c2VkIGJ5IE5XIHRvIGNvbW11bmljYXRlIHdpdGgKVEFzIGluIE9Q LVRFRS4gTlcgY2FuIHNoYXJlIHBhcnQgb2Ygb3duIG1lbW9yeSB3aXRoClRBIG9yIE9QLVRFRSBj b3JlLCBieSByZWdpc3RlcmluZyBpdCBPUC1URUUsIG9yIGJ5IHByb3ZpZGluZwphIHRlbXBvcmFs IHJlZmVyZW5jZS4gQW55d2F5cywgaW5mb3JtYXRpb24gYWJvdXQgc3VjaCBtZW1vcnkKYnVmZmVy cyBhcmUgc2VudCB0byBPUC1URUUgYXMgYSBsaXN0IG9mIHBhZ2VzLiBUaGlzIG1lY2hhbmlzbQpp cyBkZXNjcmliZWQgaW4gb3B0ZWVfbXNnLmguCgpNZWRpYXRvciBzaG91bGQgc3RlcCBpbiB3aGVu IE5XIHRyaWVzIHRvIHNoYXJlIG1lbW9yeSB3aXRoCk9QLVRFRSBmb3IgdHdvIHJlYXNvbnM6Cgox LiBEbyBhZGRyZXNzIHRyYW5zbGF0aW9uIGZyb20gSVBBIHRvIFBBLgoyLiBQaW4gZG9tYWluIHBh Z2VzIHRpbGwgdGhleSBhcmUgbWFwcGVkIGludG8gT1AtVEVFIG9yIFRBCiAgIGFkZHJlc3Mgc3Bh Y2UsIHNvIGRvbWFpbiBjYW4ndCB0cmFuc2ZlciB0aGlzIHBhZ2VzIHRvCiAgIG90aGVyIGRvbWFp biBvciBiYWxsb29uIG91dCB0aGVtLgoKQWRkcmVzcyB0cmFuc2xhdGlvbiBpcyBkb25lIGJ5IHRy YW5zbGF0ZV9ub25jb250aWcoLi4uKSBmdW5jdGlvbi4KSXQgYWxsb2NhdGVzIG5ldyBidWZmZXIg ZnJvbSB4ZW5oZWFwIGFuZCB0aGVuIHdhbGtzIG9uIGd1ZXN0CnByb3ZpZGVkIGxpc3Qgb2YgcGFn ZXMsIHRyYW5zbGF0ZXMgYWRkcmVzc2VzIGFuZCBzdG9yZXMgUEFzIGludG8KbmV3bHkgYWxsb2Nh dGVkIGJ1ZmZlci4gVGhpcyBidWZmZXIgd2lsbCBiZSBwcm92aWRlZCB0byBPUC1URUUKaW5zdGVh ZCBvZiBvcmlnaW5hbCBidWZmZXIgZnJvbSB0aGUgZ3Vlc3QuIFRoaXMgYnVmZmVyIHdpbGwKYmUg ZnJlZSBhdCB0aGUgZW5kIG9mIHN0YW5kYXJkIGNhbGwuCgpJbiB0aGUgc2FtZSB0aW1lIHRoaXMg ZnVuY3Rpb24gcGlucyBwYWdlcyBhbmQgc3RvcmVzIHRoZW0gaW4Kc3RydWN0IG9wdGVlX3NobV9i dWYgb2JqZWN0LiBUaGlzIG9iamVjdCB3aWxsIGxpdmUgYWxsIHRoZSB0aW1lLAp3aGVuIGdpdmVu IFNITSBidWZmZXIgaXMga25vd24gdG8gT1AtVEVFLiBJdCB3aWxsIGJlIGZyZWVkCmFmdGVyIGd1 ZXN0IHVucmVnaXN0ZXJzIHNoYXJlZCBidWZmZXIuIEF0IHRoaXMgdGltZSBwYWdlcwp3aWxsIGJl IHVucGlubmVkLgoKV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnkgc3BlY2lhbCByZWZlcmVuY2UgY291 bnRpbmcgYmVjYXVzZSBPUC1URUUKdHJhY2tzIGJ1ZmZlciBvbiBpdHMgc2lkZS4gU28sIG1lZGlh dG9yIHdpbGwgdW5waW4gcGFnZXMgb25seQp3aGVuIE9QLVRFRSByZXR1cm5zIHN1Y2Nlc3NmdWxs eSBmcm9tIE9QVEVFX01TR19DTURfVU5SRUdJU1RFUl9TSE0KY2FsbC4KClNpZ25lZC1vZmYtYnk6 IFZvbG9keW15ciBCYWJjaHVrIDx2bGFkLmJhYmNodWtAZ21haWwuY29tPgotLS0KCiBDaGFuZ2Vz IGZyb20gdjI6CiAtIE1hZGUgc3VyZSB0aGF0IGd1ZXN0IGRvZXMgbm90IHRyaWVzIHRvIHJlZ2lz dGVyIHNoYXJlZCBidWZmZXIgd2l0aAogICB0aGUgc2FtZSBjb29raWUgdHdpY2UKIC0gRml4ZWQg Y29kaW5nIHN0eWxlCiAtIFVzZSBhY2Nlc3NfZ3Vlc3RfbWVtb3J5X2J5X2lwYSgpIGluc3RlYWQg b2YgZGlyZWN0IG1lbW9yeSBtYXBwaW5nCgogeGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5jIHwgMjc0 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQs IDI3NCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5j IGIveGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5jCmluZGV4IDc3MTE0OGU5NDAuLmNmYzNiMzRkZjcg MTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS90ZWUvb3B0ZWUuYworKysgYi94ZW4vYXJjaC9hcm0v dGVlL29wdGVlLmMKQEAgLTM3LDYgKzM3LDEwIEBACiAgKi8KICNkZWZpbmUgTUFYX1JQQ19TSE1T ICAgIE1BWF9TVERfQ0FMTFMKIAorLyogTWF4aW11bSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgdGhh dCBndWVzdCBjYW4gc2hhcmUgd2l0aCBPUC1URUUgKi8KKyNkZWZpbmUgTUFYX1RPVEFMX1NNSF9C VUZfUEcgICAgMTYzODQKKyNkZWZpbmUgTUFYX05PTkNPTlRJR19FTlRSSUVTICAgNQorCiAjZGVm aW5lIE9QVEVFX0tOT1dOX05TRUNfQ0FQUyBPUFRFRV9TTUNfTlNFQ19DQVBfVU5JUFJPQ0VTU09S CiAjZGVmaW5lIE9QVEVFX0tOT1dOX1NFQ19DQVBTIChPUFRFRV9TTUNfU0VDX0NBUF9IQVZFX1JF U0VSVkVEX1NITSB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QVEVFX1NNQ19T RUNfQ0FQX1VOUkVHSVNURVJFRF9TSE0gfCAgXApAQCAtNTAsNiArNTQsOSBAQCBzdHJ1Y3Qgb3B0 ZWVfc3RkX2NhbGwgewogICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKICAgICBzdHJ1Y3Qgb3B0 ZWVfbXNnX2FyZyAqeGVuX2FyZzsKICAgICBwYWRkcl90IGd1ZXN0X2FyZ19pcGE7CisgICAgLyog QnVmZmVyIGZvciB0cmFuc2xhdGVkIHBhZ2UgYWRkcmVzc2VzLCBzaGFyZWQgd2l0aCBPUC1URUUg Ki8KKyAgICB2b2lkICpub25fY29udGlnW01BWF9OT05DT05USUdfRU5UUklFU107CisgICAgaW50 IG5vbl9jb250aWdfb3JkZXJbTUFYX05PTkNPTlRJR19FTlRSSUVTXTsKICAgICBpbnQgb3B0ZWVf dGhyZWFkX2lkOwogICAgIGludCBycGNfb3A7CiAgICAgYm9vbCBpbl9mbGlnaHQ7CkBAIC02Mywx MiArNzAsMjMgQEAgc3RydWN0IHNobV9ycGMgewogICAgIHVpbnQ2NF90IGNvb2tpZTsKIH07CiAK Ky8qIFNoYXJlZCBtZW1vcnkgYnVmZmVyIGZvciBhcmJpdHJhcnkgZGF0YSAqLworc3RydWN0IG9w dGVlX3NobV9idWYgeworICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKyAgICB1aW50NjRfdCBj b29raWU7CisgICAgdW5zaWduZWQgaW50IG1heF9wYWdlX2NudDsKKyAgICB1bnNpZ25lZCBpbnQg cGFnZV9jbnQ7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZXNbXTsKK307CisKIC8qIERvbWFp biBjb250ZXh0ICovCiBzdHJ1Y3Qgb3B0ZWVfZG9tYWluIHsKICAgICBzdHJ1Y3QgbGlzdF9oZWFk IGNhbGxfbGlzdDsKICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHNobV9ycGNfbGlzdDsKKyAgICBzdHJ1 Y3QgbGlzdF9oZWFkIG9wdGVlX3NobV9idWZfbGlzdDsKICAgICBhdG9taWNfdCBjYWxsX2NvdW50 OwogICAgIGF0b21pY190IHNobV9ycGNfY291bnQ7CisgICAgYXRvbWljX3Qgb3B0ZWVfc2htX2J1 Zl9wYWdlczsKICAgICBzcGlubG9ja190IGxvY2s7CiB9OwogCkBAIC0xMjUsOSArMTQzLDExIEBA IHN0YXRpYyBpbnQgb3B0ZWVfZW5hYmxlKHN0cnVjdCBkb21haW4gKmQpCiAKICAgICBJTklUX0xJ U1RfSEVBRCgmY3R4LT5jYWxsX2xpc3QpOwogICAgIElOSVRfTElTVF9IRUFEKCZjdHgtPnNobV9y cGNfbGlzdCk7CisgICAgSU5JVF9MSVNUX0hFQUQoJmN0eC0+b3B0ZWVfc2htX2J1Zl9saXN0KTsK IAogICAgIGF0b21pY19zZXQoJmN0eC0+Y2FsbF9jb3VudCwgMCk7CiAgICAgYXRvbWljX3NldCgm Y3R4LT5zaG1fcnBjX2NvdW50LCAwKTsKKyAgICBhdG9taWNfc2V0KCZjdHgtPm9wdGVlX3NobV9i dWZfcGFnZXMsIDApOwogCiAgICAgc3Bpbl9sb2NrX2luaXQoJmN0eC0+bG9jayk7CiAKQEAgLTMy NSwxMiArMzQ1LDkxIEBAIHN0YXRpYyB2b2lkIGZyZWVfc2htX3JwYyhzdHJ1Y3Qgb3B0ZWVfZG9t YWluICpjdHgsIHVpbnQ2NF90IGNvb2tpZSkKICAgICB4ZnJlZShzaG1fcnBjKTsKIH0KIAorc3Rh dGljIHN0cnVjdCBvcHRlZV9zaG1fYnVmICphbGxvY2F0ZV9vcHRlZV9zaG1fYnVmKHN0cnVjdCBv cHRlZV9kb21haW4gKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50NjRfdCBjb29raWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBhZ2VzX2NudCkKK3sKKyAg ICBzdHJ1Y3Qgb3B0ZWVfc2htX2J1ZiAqb3B0ZWVfc2htX2J1ZiwgKm9wdGVlX3NobV9idWZfdG1w OworCisgICAgd2hpbGUgKCB0cnVlICkKKyAgICB7CisgICAgICAgIGludCBvbGQgPSBhdG9taWNf cmVhZCgmY3R4LT5vcHRlZV9zaG1fYnVmX3BhZ2VzKTsKKyAgICAgICAgaW50IG5ldyA9IG9sZCAr IHBhZ2VzX2NudDsKKyAgICAgICAgaWYgKCBuZXcgPj0gTUFYX1RPVEFMX1NNSF9CVUZfUEcgKQor ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICggbGlrZWx5KG9sZCA9PSBhdG9t aWNfY21weGNoZygmY3R4LT5vcHRlZV9zaG1fYnVmX3BhZ2VzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb2xkLCBuZXcpKSApCisgICAgICAgICAgICBicmVhazsK KyAgICB9CisKKyAgICBvcHRlZV9zaG1fYnVmID0geHphbGxvY19ieXRlcyhzaXplb2Yoc3RydWN0 IG9wdGVlX3NobV9idWYpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlc19jbnQg KiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOworICAgIGlmICggIW9wdGVlX3NobV9idWYgKQorICAg ICAgICBnb3RvIGVycjsKKworICAgIG9wdGVlX3NobV9idWYtPmNvb2tpZSA9IGNvb2tpZTsKKyAg ICBvcHRlZV9zaG1fYnVmLT5tYXhfcGFnZV9jbnQgPSBwYWdlc19jbnQ7CisKKyAgICBzcGluX2xv Y2soJmN0eC0+bG9jayk7CisgICAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgYWxyZWFkeSBTSE0gd2l0 aCB0aGUgc2FtZSBjb29raWUgKi8KKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KCBvcHRlZV9zaG1f YnVmX3RtcCwgJmN0eC0+b3B0ZWVfc2htX2J1Zl9saXN0LCBsaXN0ICkKKyAgICB7CisgICAgICAg IGlmICggb3B0ZWVfc2htX2J1Zl90bXAtPmNvb2tpZSA9PSBjb29raWUgKQorICAgICAgICB7Cisg ICAgICAgICAgICBzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKKyAgICAgICAgICAgIGdwcmludGso WEVOTE9HX1dBUk5JTkcsICJHdWVzdCB0cmllcyB0byB1c2UgdGhlIHNhbWUgU0hNIGJ1ZmZlciBj b29raWUiKTsKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICB9CisgICAgfQorCisgICAg bGlzdF9hZGRfdGFpbCgmb3B0ZWVfc2htX2J1Zi0+bGlzdCwgJmN0eC0+b3B0ZWVfc2htX2J1Zl9s aXN0KTsKKyAgICBzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKKworICAgIHJldHVybiBvcHRlZV9z aG1fYnVmOworCitlcnI6CisgICAgYXRvbWljX3N1YihwYWdlc19jbnQsICZjdHgtPm9wdGVlX3No bV9idWZfcGFnZXMpOworICAgIHhmcmVlKG9wdGVlX3NobV9idWYpOworCisgICAgcmV0dXJuIE5V TEw7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfb3B0ZWVfc2htX2J1ZihzdHJ1Y3Qgb3B0ZWVfZG9t YWluICpjdHgsIHVpbnQ2NF90IGNvb2tpZSkKK3sKKyAgICBzdHJ1Y3Qgb3B0ZWVfc2htX2J1ZiAq b3B0ZWVfc2htX2J1ZjsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisKKyAgICBzcGluX2xvY2so JmN0eC0+bG9jayk7CisgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSggb3B0ZWVfc2htX2J1ZiwgJmN0 eC0+b3B0ZWVfc2htX2J1Zl9saXN0LCBsaXN0ICkKKyAgICB7CisgICAgICAgIGlmICggb3B0ZWVf c2htX2J1Zi0+Y29va2llID09IGNvb2tpZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvdW5k ID0gdHJ1ZTsKKyAgICAgICAgICAgIGxpc3RfZGVsKCZvcHRlZV9zaG1fYnVmLT5saXN0KTsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHNwaW5fdW5sb2NrKCZjdHgt PmxvY2spOworCisgICAgaWYgKCAhZm91bmQgKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3Ig KCBpbnQgaSA9IDA7IGkgPCBvcHRlZV9zaG1fYnVmLT5wYWdlX2NudDsgaSsrICkKKyAgICAgICAg aWYgKCBvcHRlZV9zaG1fYnVmLT5wYWdlc1tpXSApCisgICAgICAgICAgICBwdXRfcGFnZShvcHRl ZV9zaG1fYnVmLT5wYWdlc1tpXSk7CisKKyAgICBhdG9taWNfc3ViKG9wdGVlX3NobV9idWYtPm1h eF9wYWdlX2NudCwgJmN0eC0+b3B0ZWVfc2htX2J1Zl9wYWdlcyk7CisKKyAgICB4ZnJlZShvcHRl ZV9zaG1fYnVmKTsKK30KKwogc3RhdGljIHZvaWQgb3B0ZWVfZG9tYWluX2Rlc3Ryb3koc3RydWN0 IGRvbWFpbiAqZCkKIHsKICAgICBzdHJ1Y3QgYXJtX3NtY2NjX3JlcyByZXNwOwogICAgIHN0cnVj dCBvcHRlZV9zdGRfY2FsbCAqY2FsbCwgKmNhbGxfdG1wOwogICAgIHN0cnVjdCBvcHRlZV9kb21h aW4gKmN0eCA9IGQtPmFyY2gudGVlOwogICAgIHN0cnVjdCBzaG1fcnBjICpzaG1fcnBjLCAqc2ht X3JwY190bXA7CisgICAgc3RydWN0IG9wdGVlX3NobV9idWYgKm9wdGVlX3NobV9idWYsICpvcHRl ZV9zaG1fYnVmX3RtcDsKIAogICAgIC8qIEF0IHRoaXMgdGltZSBhbGwgZG9tYWluIFZDUFVzIHNo b3VsZCBiZSBzdG9wcGVkICovCiAKQEAgLTM0OSwxMiArNDQ4LDE3NyBAQCBzdGF0aWMgdm9pZCBv cHRlZV9kb21haW5fZGVzdHJveShzdHJ1Y3QgZG9tYWluICpkKQogICAgIGxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZSggc2htX3JwYywgc2htX3JwY190bXAsICZjdHgtPnNobV9ycGNfbGlzdCwgbGlz dCApCiAgICAgICAgIGZyZWVfc2htX3JwYyhjdHgsIHNobV9ycGMtPmNvb2tpZSk7CiAKKyAgICBs aXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoIG9wdGVlX3NobV9idWYsIG9wdGVlX3NobV9idWZfdG1w LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+b3B0ZWVfc2htX2J1Zl9saXN0 LCBsaXN0ICkKKyAgICAgICAgZnJlZV9vcHRlZV9zaG1fYnVmKGN0eCwgb3B0ZWVfc2htX2J1Zi0+ Y29va2llKTsKKwogICAgIEFTU0VSVCghYXRvbWljX3JlYWQoJmN0eC0+Y2FsbF9jb3VudCkpOwog ICAgIEFTU0VSVCghYXRvbWljX3JlYWQoJmN0eC0+c2htX3JwY19jb3VudCkpOworICAgIEFTU0VS VCghYXRvbWljX3JlYWQoJmN0eC0+b3B0ZWVfc2htX2J1Zl9wYWdlcykpOwogCiAgICAgeGZyZWUo ZC0+YXJjaC50ZWUpOwogfQogCisjZGVmaW5lIFBBR0VMSVNUX0VOVFJJRVNfUEVSX1BBR0UgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKE9QVEVFX01TR19OT05DT05USUdfUEFHRV9TSVpF IC8gc2l6ZW9mKHU2NCkpIC0gMSkKKworc3RhdGljIHNpemVfdCBnZXRfcGFnZXNfbGlzdF9zaXpl KHNpemVfdCBudW1fZW50cmllcykKK3sKKyAgICBpbnQgcGFnZXMgPSBESVZfUk9VTkRfVVAobnVt X2VudHJpZXMsIFBBR0VMSVNUX0VOVFJJRVNfUEVSX1BBR0UpOworCisgICAgcmV0dXJuIHBhZ2Vz ICogT1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkU7Cit9CisKK3N0YXRpYyBib29sIHRyYW5z bGF0ZV9ub25jb250aWcoc3RydWN0IG9wdGVlX2RvbWFpbiAqY3R4LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb3B0ZWVfc3RkX2NhbGwgKmNhbGwsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBvcHRlZV9tc2dfcGFyYW0gKnBhcmFtLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWR4KQoreworICAgIC8qCisgICAgICog UmVmZXIgdG8gT1BURUVfTVNHX0FUVFJfTk9OQ09OVElHIGRlc2NyaXB0aW9uIGluIG9wdGVlX21z Zy5oIGZvciBkZXRhaWxzLgorICAgICAqLworICAgIHVpbnQ2NF90IHNpemU7CisgICAgdW5zaWdu ZWQgaW50IHBhZ2Vfb2Zmc2V0OworICAgIHVuc2lnbmVkIGludCBudW1fcGFnZXM7CisgICAgdW5z aWduZWQgaW50IG9yZGVyOworICAgIHVuc2lnbmVkIGludCBlbnRyaWVzX29uX3BhZ2UgPSAwOwor ICAgIHBhZGRyX3QgZ2FkZHI7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqZ3Vlc3RfcGFnZTsKKyAg ICBzdHJ1Y3QgeworICAgICAgICB1aW50NjRfdCBwYWdlc19saXN0W1BBR0VMSVNUX0VOVFJJRVNf UEVSX1BBR0VdOworICAgICAgICB1aW50NjRfdCBuZXh0X3BhZ2VfZGF0YTsKKyAgICB9ICpwYWdl c19kYXRhX2d1ZXN0LCAqcGFnZXNfZGF0YV94ZW4sICpwYWdlc19kYXRhX3hlbl9zdGFydDsKKyAg ICBzdHJ1Y3Qgb3B0ZWVfc2htX2J1ZiAqb3B0ZWVfc2htX2J1ZjsKKworICAgIC8qIE9mZnNldCBv ZiB1c2VyIGJ1ZmZlciB3aXRoaW5nIHBhZ2UgKi8KKyAgICBwYWdlX29mZnNldCA9IHBhcmFtLT51 LnRtZW0uYnVmX3B0ciAmIChPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSAtIDEpOworCisg ICAgLyogU2l6ZSBvZiB0aGUgdXNlciBidWZmZXIgaW4gYnl0ZXMgKi8KKyAgICBzaXplID0gUk9V TkRVUChwYXJhbS0+dS50bWVtLnNpemUgKyBwYWdlX29mZnNldCwKKyAgICAgICAgICAgICAgICAg ICBPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSk7CisKKyAgICBudW1fcGFnZXMgPSBESVZf Uk9VTkRfVVAoc2l6ZSwgT1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUpOworCisgICAgb3Jk ZXIgPSBnZXRfb3JkZXJfZnJvbV9ieXRlcyhnZXRfcGFnZXNfbGlzdF9zaXplKG51bV9wYWdlcykp OworCisgICAgcGFnZXNfZGF0YV94ZW5fc3RhcnQgPSBhbGxvY194ZW5oZWFwX3BhZ2VzKG9yZGVy LCAwKTsKKyAgICBpZiAoICFwYWdlc19kYXRhX3hlbl9zdGFydCApCisgICAgICAgIHJldHVybiBm YWxzZTsKKworICAgIG9wdGVlX3NobV9idWYgPSBhbGxvY2F0ZV9vcHRlZV9zaG1fYnVmKGN0eCwg cGFyYW0tPnUudG1lbS5zaG1fcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG51bV9wYWdlcyk7CisgICAgaWYgKCAhb3B0ZWVfc2htX2J1ZiApCisgICAgICAg IGdvdG8gZXJyX2ZyZWU7CisKKyAgICBnYWRkciA9IHBhcmFtLT51LnRtZW0uYnVmX3B0ciAmIH4o T1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUgLSAxKTsKKyAgICBndWVzdF9wYWdlID0gZ2V0 X3BhZ2VfZnJvbV9nZm4oY3VycmVudC0+ZG9tYWluLCBwYWRkcl90b19wZm4oZ2FkZHIpLCBOVUxM LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQMk1fQUxMT0MpOworCisgICAg aWYgKCAhZ3Vlc3RfcGFnZSApCisgICAgICAgIGdvdG8gZXJyX2ZyZWU7CisKKyAgICBwYWdlc19k YXRhX2d1ZXN0ID0gbWFwX2RvbWFpbl9wYWdlKHBhZ2VfdG9fbWZuKGd1ZXN0X3BhZ2UpKTsKKyAg ICBpZiAoICFwYWdlc19kYXRhX2d1ZXN0ICkKKyAgICAgICAgZ290byBlcnJfZnJlZTsKKworICAg IHBhZ2VzX2RhdGFfeGVuID0gcGFnZXNfZGF0YV94ZW5fc3RhcnQ7CisgICAgd2hpbGUgKCBudW1f cGFnZXMgKQorICAgIHsKKyAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKyAgICAgICAg cGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKGN1cnJlbnQtPmRvbWFpbiwKKyAgICAgICAgICAgICAg ICAgIHBhZGRyX3RvX3BmbihwYWdlc19kYXRhX2d1ZXN0LT5wYWdlc19saXN0W2VudHJpZXNfb25f cGFnZV0pLAorICAgICAgICAgICAgICAgICAgTlVMTCwgUDJNX0FMTE9DKTsKKworICAgICAgICBp ZiAoICFwYWdlICkKKyAgICAgICAgICAgIGdvdG8gZXJyX3VubWFwOworCisgICAgICAgIG9wdGVl X3NobV9idWYtPnBhZ2VzW29wdGVlX3NobV9idWYtPnBhZ2VfY250KytdID0gcGFnZTsKKyAgICAg ICAgcGFnZXNfZGF0YV94ZW4tPnBhZ2VzX2xpc3RbZW50cmllc19vbl9wYWdlXSA9IHBhZ2VfdG9f bWFkZHIocGFnZSk7CisgICAgICAgIGVudHJpZXNfb25fcGFnZSsrOworCisgICAgICAgIGlmICgg ZW50cmllc19vbl9wYWdlID09IFBBR0VMSVNUX0VOVFJJRVNfUEVSX1BBR0UgKQorICAgICAgICB7 CisgICAgICAgICAgICBwYWdlc19kYXRhX3hlbi0+bmV4dF9wYWdlX2RhdGEgPSB2aXJ0X3RvX21h ZGRyKHBhZ2VzX2RhdGFfeGVuICsgMSk7CisgICAgICAgICAgICBwYWdlc19kYXRhX3hlbisrOwor ICAgICAgICAgICAgZ2FkZHIgPSBwYWdlc19kYXRhX2d1ZXN0LT5uZXh0X3BhZ2VfZGF0YTsKKwor ICAgICAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocGFnZXNfZGF0YV9ndWVzdCk7CisgICAgICAg ICAgICBwdXRfcGFnZShndWVzdF9wYWdlKTsKKworICAgICAgICAgICAgZ3Vlc3RfcGFnZSA9IGdl dF9wYWdlX2Zyb21fZ2ZuKGN1cnJlbnQtPmRvbWFpbiwgcGFkZHJfdG9fcGZuKGdhZGRyKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBQMk1fQUxMT0Mp OworICAgICAgICAgICAgaWYgKCAhZ3Vlc3RfcGFnZSApCisgICAgICAgICAgICAgICAgZ290byBl cnJfZnJlZTsKKworICAgICAgICAgICAgcGFnZXNfZGF0YV9ndWVzdCA9IG1hcF9kb21haW5fcGFn ZShwYWdlX3RvX21mbihndWVzdF9wYWdlKSk7CisgICAgICAgICAgICBpZiAoICFwYWdlc19kYXRh X2d1ZXN0ICkKKyAgICAgICAgICAgICAgICBnb3RvIGVycl9mcmVlOworICAgICAgICAgICAgLyog Um9sbCBvdmVyIHRvIHRoZSBuZXh0IHBhZ2UgKi8KKyAgICAgICAgICAgIGVudHJpZXNfb25fcGFn ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgbnVtX3BhZ2VzLS07CisgICAgfQorCisgICAgcGFy YW0tPnUudG1lbS5idWZfcHRyID0gdmlydF90b19tYWRkcihwYWdlc19kYXRhX3hlbl9zdGFydCkg fCBwYWdlX29mZnNldDsKKworICAgIGNhbGwtPm5vbl9jb250aWdbaWR4XSA9IHBhZ2VzX2RhdGFf eGVuX3N0YXJ0OworICAgIGNhbGwtPm5vbl9jb250aWdfb3JkZXJbaWR4XSA9IG9yZGVyOworCisg ICAgdW5tYXBfZG9tYWluX3BhZ2UocGFnZXNfZGF0YV9ndWVzdCk7CisgICAgcHV0X3BhZ2UoZ3Vl c3RfcGFnZSk7CisgICAgcmV0dXJuIHRydWU7CisKK2Vycl91bm1hcDoKKyAgICB1bm1hcF9kb21h aW5fcGFnZShwYWdlc19kYXRhX2d1ZXN0KTsKKyAgICBwdXRfcGFnZShndWVzdF9wYWdlKTsKKyAg ICBmcmVlX29wdGVlX3NobV9idWYoY3R4LCBvcHRlZV9zaG1fYnVmLT5jb29raWUpOworCitlcnJf ZnJlZToKKyAgICBmcmVlX3hlbmhlYXBfcGFnZXMocGFnZXNfZGF0YV94ZW5fc3RhcnQsIG9yZGVy KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgdHJhbnNsYXRlX3BhcmFt cyhzdHJ1Y3Qgb3B0ZWVfZG9tYWluICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBvcHRlZV9zdGRfY2FsbCAqY2FsbCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAg ICB1aW50MzJfdCBhdHRyOworCisgICAgZm9yICggaSA9IDA7IGkgPCBjYWxsLT54ZW5fYXJnLT5u dW1fcGFyYW1zOyBpKysgKQorICAgIHsKKyAgICAgICAgYXR0ciA9IGNhbGwtPnhlbl9hcmctPnBh cmFtc1tpXS5hdHRyOworCisgICAgICAgIHN3aXRjaCAoIGF0dHIgJiBPUFRFRV9NU0dfQVRUUl9U WVBFX01BU0sgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9U TUVNX0lOUFVUOgorICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfVE1FTV9PVVRQVVQ6 CisgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9UTUVNX0lOT1VUOgorICAgICAgICAg ICAgaWYgKCBhdHRyICYgT1BURUVfTVNHX0FUVFJfTk9OQ09OVElHICkKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICBpZiAoICF0cmFuc2xhdGVfbm9uY29udGlnKGN0eCwgY2FsbCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwtPnhlbl9hcmctPnBh cmFtcyArIGksIGkpICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg IGdwcmludGsoWEVOTE9HX1dBUk5JTkcsICJHdWVzdCB0cmllcyB0byB1c2Ugb2xkIHRtZW0gYXJn XG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX05PTkU6Cisg ICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9WQUxVRV9JTlBVVDoKKyAgICAgICAgY2Fz ZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX09VVFBVVDoKKyAgICAgICAgY2FzZSBPUFRFRV9N U0dfQVRUUl9UWVBFX1ZBTFVFX0lOT1VUOgorICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZ UEVfUk1FTV9JTlBVVDoKKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JNRU1fT1VU UFVUOgorICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfUk1FTV9JTk9VVDoKKyAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor CiAvKgogICogQ29weSBjb21tYW5kIGJ1ZmZlciBpbnRvIHhlbiBtZW1vcnkgdG86CiAgKiAxKSBI aWRlIHRyYW5zbGF0ZWQgYWRkcmVzc2VzIGZyb20gZ3Vlc3QKQEAgLTQ2OSw2ICs3MzMsMTQgQEAg c3RhdGljIHZvaWQgZXhlY3V0ZV9zdGRfY2FsbChzdHJ1Y3Qgb3B0ZWVfZG9tYWluICpjdHgsCiAK ICAgICBjb3B5X3N0ZF9yZXF1ZXN0X2JhY2soY3R4LCByZWdzLCBjYWxsKTsKIAorICAgIC8qCisg ICAgICogSWYgZ3Vlc3Qgc3VjY2Vzc2Z1bGx5IHVucmVnaXN0ZXJlZCBvd24gc2hhcmVkIG1lbW9y eSwKKyAgICAgKiB0aGVuIHdlIGNhbiB1bnBpbiBpdCdzIHBhZ2VzCisgICAgICovCisgICAgaWYg KCBjYWxsLT54ZW5fYXJnLT5jbWQgPT0gT1BURUVfTVNHX0NNRF9VTlJFR0lTVEVSX1NITSAmJgor ICAgICAgICAgY2FsbC0+eGVuX2FyZy0+cmV0ID09IDAgKQorICAgICAgICBmcmVlX29wdGVlX3No bV9idWYoY3R4LCBjYWxsLT54ZW5fYXJnLT5wYXJhbXNbMF0udS5ybWVtLnNobV9yZWYpOworCiAg ICAgcHV0X3N0ZF9jYWxsKGN0eCwgY2FsbCk7CiAgICAgZnJlZV9zdGRfY2FsbChjdHgsIGNhbGwp OwogfQpAQCAtNDk3LDYgKzc2OSw4IEBAIHN0YXRpYyBib29sIGhhbmRsZV9zdGRfY2FsbChzdHJ1 Y3Qgb3B0ZWVfZG9tYWluICpjdHgsCiAgICAgY2FzZSBPUFRFRV9NU0dfQ01EX0NBTkNFTDoKICAg ICBjYXNlIE9QVEVFX01TR19DTURfUkVHSVNURVJfU0hNOgogICAgIGNhc2UgT1BURUVfTVNHX0NN RF9VTlJFR0lTVEVSX1NITToKKyAgICAgICAgaWYoICF0cmFuc2xhdGVfcGFyYW1zKGN0eCwgY2Fs bCkgKQorICAgICAgICAgICAgZ290byBlcnI7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6 CiAgICAgICAgIGdvdG8gZXJyOwotLSAKMi4yMC4wCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v bGlzdGluZm8veGVuLWRldmVs