From mboxrd@z Thu Jan 1 00:00:00 1970 From: Volodymyr Babchuk Subject: [PATCH v2 09/13] optee: add support for arbitrary shared memory Date: Mon, 3 Sep 2018 19:54:33 +0300 Message-ID: <1535993677-20816-10-git-send-email-volodymyr_babchuk@epam.com> References: <1535993677-20816-1-git-send-email-volodymyr_babchuk@epam.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1535993677-20816-1-git-send-email-volodymyr_babchuk@epam.com> 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, xen-devel@lists.xen.org Cc: tee-dev@lists.linaro.org, Julien Grall , Stefano Stabellini , Volodymyr Babchuk List-Id: xen-devel@lists.xenproject.org U2hhcmVkIG1lbW9yeSBpcyB3aWRlbHkgdXNlZCBieSBOVyB0byBjb21tdW5pY2F0ZSB3aXRoClRB cyBpbiBPUC1URUUuIE5XIGNhbiBzaGFyZSBwYXJ0IG9mIG93biBtZW1vcnkgd2l0aApUQSBvciBP UC1URUUgY29yZSwgYnkgcmVnaXN0ZXJpbmcgaXQgT1AtVEVFLCBvciBieSBwcm92aWRpbmcKYSB0 ZW1wb3JhbCByZWZlcm5jZS4gQW55d2F5cywgaW5mb3JtYXRpb24gYWJvdXQgc3VjaCBtZW1vcnkK YnVmZmVycyBhcmUgc2VudCB0byBPUC1URUUgYXMgYSBsaXN0IG9mIHBhZ2VzLiBUaGlzIG1lY2hh bmlzbQppcyBkZXNjcmlwdGVkIG9wdGVlX21zZy5oLgoKTWVkaWF0b3Igc2hvdWxkIHN0ZXAgaW4g d2hlbiBOVyB0cmllcyB0byBzaGFyZSBtZW1vcnkgd2l0aApPUC1URUUgZm9yIHR3byByZWFzb25z OgoKMS4gRG8gYWRkcmVzcyB0cmFuc2xhdGlvbiBmcm9tIElQQSB0byBQQS4KMi4gUGluIGRvbWFp biBwYWdlcyB0aWxsIHRoZXkgYXJlIG1hcHBlZCBpbnRvIE9QLVRFRSBvciBUQQogICBhZGRyZXNz IHNwYWNlLCBzbyBkb21haW4gY2FuJ3QgdHJhbnNmZXIgdGhpcyBwYWdlcyB0bwogICBvdGhlciBk b21haW4gb3IgYmFsb29uIG91dCB0aGVtLgoKQWRkcmVzcyB0cmFuc2xhdGlvbiBpcyBkb25lIGJ5 IHRyYW5zbGF0ZV9ub25jb250aWcoLi4uKSBmdW5jdGlvbi4KSXQgYWxsb2NhdGVzIG5ldyBidWZm ZXIgZnJvbSB4ZW5oZWFwIGFuZCB0aGVuIHdhbGtzIG9uIGd1ZXN0CnByb3ZpZGVkIGxpc3Qgb2Yg cGFnZXMsIHRyYW5zbGF0ZXMgYWRkcmVzc2VzIGFuZCBzdG9yZXMgUEFzIGludG8KbmV3bHkgYWxs b2NhdGVkIGJ1ZmZlci4gVGhpcyBidWZmZXIgd2lsbCBiZSBwcm92aWRlZCB0byBPUC1URUUKaW5z dGVhZCBvZiBvcmlnaW5hbCBidWZmZXIgZnJvbSB0aGUgZ3Vlc3QuIFRoaXMgYnVmZmVyIHdpbGwK YmUgZnJlZSBhdCB0aGUgZW5kIG9mIHNkYW5kYXJkIGNhbGwuCgpJbiB0aGUgc2FtZSB0aW1lIHRo aXMgZnVuY3Rpb24gcGlucyBwYWdlcyBhbmQgc3RvcmVzIHRoZW0gaW4Kc3RydWN0IHNobV9idWYg b2JqZWN0LiBUaGlzIG9iamVjdCB3aWxsIGxpdmUgYWxsIHRoZSB0aW1lLAp3aGVuIGdpdmVuIFNI TSBidWZmZXIgaXMga25vd24gdG8gT1AtVEVFLiBJdCB3aWxsIGJlIGZyZWVkCmFmdGVyIGd1ZXN0 IHVucmVnaXN0ZXJzIHNoYXJlZCBidWZmZXIuIEF0IHRoaXMgdGltZSBwYWdlcwp3aWxsIGJlIHVu cGlubmVkLgoKU2lnbmVkLW9mZi1ieTogVm9sb2R5bXlyIEJhYmNodWsgPHZvbG9keW15cl9iYWJj aHVrQGVwYW0uY29tPgotLS0KIHhlbi9hcmNoL2FybS90ZWUvb3B0ZWUuYyB8IDI0NSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQs IDI0NCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gv YXJtL3RlZS9vcHRlZS5jIGIveGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5jCmluZGV4IDZkNmI1MWQu LjhiZmNmZGMgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL2FybS90ZWUvb3B0ZWUuYworKysgYi94ZW4v YXJjaC9hcm0vdGVlL29wdGVlLmMKQEAgLTIyLDYgKzIyLDggQEAKIAogI2RlZmluZSBNQVhfU1RE X0NBTExTICAgMTYKICNkZWZpbmUgTUFYX1JQQ19TSE1TICAgIDE2CisjZGVmaW5lIE1BWF9UT1RB TF9TTUhfQlVGX1BHICAgIDE2Mzg0CisjZGVmaW5lIE1BWF9OT05DT05USUdfRU5UUklFUyAgIDUK IAogLyoKICAqIENhbGwgY29udGV4dC4gT1AtVEVFIGNhbiBpc3N1ZSBtdWx0aXBsZSBSUEMgcmV0 dXJucyBkdXJpbmcgb25lIGNhbGwuCkBAIC0zMSw2ICszMyw5IEBAIHN0cnVjdCBzdGRfY2FsbF9j dHggewogICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKICAgICBzdHJ1Y3Qgb3B0ZWVfbXNnX2Fy ZyAqZ3Vlc3RfYXJnOwogICAgIHN0cnVjdCBvcHRlZV9tc2dfYXJnICp4ZW5fYXJnOworICAgIC8q IEJ1ZmZlciBmb3IgdHJhbnNsYXRlZCBwYWdlIGFkZHJlc3Nlcywgc2hhcmVkIHdpdGggT1AtVEVF ICovCisgICAgdm9pZCAqbm9uX2NvbnRpZ1tNQVhfTk9OQ09OVElHX0VOVFJJRVNdOworICAgIGlu dCBub25fY29udGlnX29yZGVyW01BWF9OT05DT05USUdfRU5UUklFU107CiAgICAgbWZuX3QgZ3Vl c3RfYXJnX21mbjsKICAgICBpbnQgb3B0ZWVfdGhyZWFkX2lkOwogICAgIGludCBycGNfb3A7CkBA IC00NSwxMyArNTAsMjQgQEAgc3RydWN0IHNobV9ycGMgewogICAgIHVpbnQ2NF90IGNvb2tpZTsK IH07CiAKKy8qIFNoYXJlZCBtZW1vcnkgYnVmZmVyIGZvciBhcmJpdHJhcnkgZGF0YSAqLworc3Ry dWN0IHNobV9idWYgeworICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKyAgICB1aW50NjRfdCBj b29raWU7CisgICAgaW50IG1heF9wYWdlX2NudDsKKyAgICBpbnQgcGFnZV9jbnQ7CisgICAgc3Ry dWN0IHBhZ2VfaW5mbyAqcGFnZXNbXTsKK307CisKIHN0cnVjdCBkb21haW5fY3R4IHsKICAgICBz dHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAgICAgc3RydWN0IGxpc3RfaGVhZCBjYWxsX2N0eF9saXN0 OwogICAgIHN0cnVjdCBsaXN0X2hlYWQgc2htX3JwY19saXN0OworICAgIHN0cnVjdCBsaXN0X2hl YWQgc2htX2J1Zl9saXN0OwogICAgIHN0cnVjdCBkb21haW4gKmRvbWFpbjsKICAgICBhdG9taWNf dCBjYWxsX2N0eF9jb3VudDsKICAgICBhdG9taWNfdCBzaG1fcnBjX2NvdW50OworICAgIGF0b21p Y190IHNobV9idWZfcGFnZXM7CiAgICAgc3BpbmxvY2tfdCBsb2NrOwogfTsKIApAQCAtMTU4LDkg KzE3NCwxMiBAQCBzdGF0aWMgaW50IG9wdGVlX2VuYWJsZShzdHJ1Y3QgZG9tYWluICpkKQogICAg IGN0eC0+ZG9tYWluID0gZDsKICAgICBJTklUX0xJU1RfSEVBRCgmY3R4LT5jYWxsX2N0eF9saXN0 KTsKICAgICBJTklUX0xJU1RfSEVBRCgmY3R4LT5zaG1fcnBjX2xpc3QpOworICAgIElOSVRfTElT VF9IRUFEKCZjdHgtPnNobV9idWZfbGlzdCk7CiAKICAgICBhdG9taWNfc2V0KCZjdHgtPmNhbGxf Y3R4X2NvdW50LCAwKTsKICAgICBhdG9taWNfc2V0KCZjdHgtPnNobV9ycGNfY291bnQsIDApOwor ICAgIGF0b21pY19zZXQoJmN0eC0+c2htX2J1Zl9wYWdlcywgMCk7CisKICAgICBzcGluX2xvY2tf aW5pdCgmY3R4LT5sb2NrKTsKIAogICAgIHNwaW5fbG9jaygmZG9tYWluX2N0eF9saXN0X2xvY2sp OwpAQCAtMzM5LDEyICszNTgsNzYgQEAgc3RhdGljIHZvaWQgZnJlZV9zaG1fcnBjKHN0cnVjdCBk b21haW5fY3R4ICpjdHgsIHVpbnQ2NF90IGNvb2tpZSkKICAgICB4ZnJlZShzaG1fcnBjKTsKIH0K IAorc3RhdGljIHN0cnVjdCBzaG1fYnVmICphbGxvY2F0ZV9zaG1fYnVmKHN0cnVjdCBkb21haW5f Y3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0 X3QgY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBw YWdlc19jbnQpCit7CisgICAgc3RydWN0IHNobV9idWYgKnNobV9idWY7CisKKyAgICB3aGlsZSgx KQorICAgIHsKKyAgICAgICAgaW50IG9sZCA9IGF0b21pY19yZWFkKCZjdHgtPnNobV9idWZfcGFn ZXMpOworICAgICAgICBpbnQgbmV3ID0gb2xkICsgcGFnZXNfY250OworICAgICAgICBpZiAoIG5l dyA+PSBNQVhfVE9UQUxfU01IX0JVRl9QRyApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAg ICAgICAgaWYgKCBsaWtlbHkob2xkID09IGF0b21pY19jbXB4Y2hnKCZjdHgtPnNobV9idWZfcGFn ZXMsIG9sZCwgbmV3KSkgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc2htX2J1 ZiA9IHh6YWxsb2NfYnl0ZXMoc2l6ZW9mKHN0cnVjdCBzaG1fYnVmKSArCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGFnZXNfY250ICogc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKKyAgICBp ZiAoICFzaG1fYnVmICkgeworICAgICAgICBhdG9taWNfc3ViKHBhZ2VzX2NudCwgJmN0eC0+c2ht X2J1Zl9wYWdlcyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNobV9idWYt PmNvb2tpZSA9IGNvb2tpZTsKKyAgICBzaG1fYnVmLT5tYXhfcGFnZV9jbnQgPSBwYWdlc19jbnQ7 CisKKyAgICBzcGluX2xvY2soJmN0eC0+bG9jayk7CisgICAgbGlzdF9hZGRfdGFpbCgmc2htX2J1 Zi0+bGlzdCwgJmN0eC0+c2htX2J1Zl9saXN0KTsKKyAgICBzcGluX3VubG9jaygmY3R4LT5sb2Nr KTsKKworICAgIHJldHVybiBzaG1fYnVmOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3NobV9idWYo c3RydWN0IGRvbWFpbl9jdHggKmN0eCwgdWludDY0X3QgY29va2llKQoreworICAgIHN0cnVjdCBz aG1fYnVmICpzaG1fYnVmOworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKworICAgIHNwaW5fbG9j aygmY3R4LT5sb2NrKTsKKyAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KCBzaG1fYnVmLCAmY3R4LT5z aG1fYnVmX2xpc3QsIGxpc3QgKQorICAgIHsKKyAgICAgICAgaWYgKCBzaG1fYnVmLT5jb29raWUg PT0gY29va2llICkKKyAgICAgICAgeworICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAg ICAgICAgbGlzdF9kZWwoJnNobV9idWYtPmxpc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKyAgICB9CisgICAgc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7CisKKyAgICBpZiAoICFm b3VuZCApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoIGludCBpID0gMDsg aSA8IHNobV9idWYtPnBhZ2VfY250OyBpKysgKQorICAgICAgICBpZiAoIHNobV9idWYtPnBhZ2Vz W2ldICkKKyAgICAgICAgICAgIHB1dF9wYWdlKHNobV9idWYtPnBhZ2VzW2ldKTsKKworICAgIGF0 b21pY19zdWIoc2htX2J1Zi0+bWF4X3BhZ2VfY250LCAmY3R4LT5zaG1fYnVmX3BhZ2VzKTsKKwor ICAgIHhmcmVlKHNobV9idWYpOworfQorCiBzdGF0aWMgdm9pZCBvcHRlZV9kb21haW5fZGVzdHJv eShzdHJ1Y3QgZG9tYWluICpkKQogewogICAgIHN0cnVjdCBhcm1fc21jY2NfcmVzIHJlc3A7CiAg ICAgc3RydWN0IGRvbWFpbl9jdHggKmN0eDsKICAgICBzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICpjYWxs LCAqY2FsbF90bXA7CiAgICAgc3RydWN0IHNobV9ycGMgKnNobV9ycGMsICpzaG1fcnBjX3RtcDsK KyAgICBzdHJ1Y3Qgc2htX2J1ZiAqc2htX2J1ZiwgKnNobV9idWZfdG1wOwogICAgIGJvb2wgZm91 bmQgPSBmYWxzZTsKIAogICAgIC8qIEF0IHRoaXMgdGltZSBhbGwgZG9tYWluIFZDUFVzIHNob3Vs ZCBiZSBzdG9wcGVkICovCkBAIC0zNzcsMTIgKzQ2MCwxNjMgQEAgc3RhdGljIHZvaWQgb3B0ZWVf ZG9tYWluX2Rlc3Ryb3koc3RydWN0IGRvbWFpbiAqZCkKICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5 X3NhZmUoIHNobV9ycGMsIHNobV9ycGNfdG1wLCAmY3R4LT5zaG1fcnBjX2xpc3QsIGxpc3QgKQog ICAgICAgICBmcmVlX3NobV9ycGMoY3R4LCBzaG1fcnBjLT5jb29raWUpOwogCisgICAgbGlzdF9m b3JfZWFjaF9lbnRyeV9zYWZlKCBzaG1fYnVmLCBzaG1fYnVmX3RtcCwgJmN0eC0+c2htX2J1Zl9s aXN0LCBsaXN0ICkKKyAgICAgICAgZnJlZV9zaG1fYnVmKGN0eCwgc2htX2J1Zi0+Y29va2llKTsK KwogICAgIEFTU0VSVCghYXRvbWljX3JlYWQoJmN0eC0+Y2FsbF9jdHhfY291bnQpKTsKICAgICBB U1NFUlQoIWF0b21pY19yZWFkKCZjdHgtPnNobV9ycGNfY291bnQpKTsKKyAgICBBU1NFUlQoIWF0 b21pY19yZWFkKCZjdHgtPnNobV9idWZfcGFnZXMpKTsKIAogICAgIHhmcmVlKGN0eCk7CiB9CiAK KyNkZWZpbmUgUEFHRUxJU1RfRU5UUklFU19QRVJfUEFHRSAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICgoT1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUgLyBzaXplb2YodTY0KSkgLSAx KQorCitzdGF0aWMgc2l6ZV90IGdldF9wYWdlc19saXN0X3NpemUoc2l6ZV90IG51bV9lbnRyaWVz KQoreworICAgIGludCBwYWdlcyA9IERJVl9ST1VORF9VUChudW1fZW50cmllcywgUEFHRUxJU1Rf RU5UUklFU19QRVJfUEFHRSk7CisKKyAgICByZXR1cm4gcGFnZXMgKiBPUFRFRV9NU0dfTk9OQ09O VElHX1BBR0VfU0laRTsKK30KKworc3RhdGljIGJvb2wgdHJhbnNsYXRlX25vbmNvbnRpZyhzdHJ1 Y3QgZG9tYWluX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3Qgc3RkX2NhbGxfY3R4ICpjYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3Qgb3B0ZWVfbXNnX3BhcmFtICpwYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGlkeCkKK3sKKyAgICAvKgorICAgICAqIFJlZmVyIHRvIE9QVEVFX01TR19BVFRS X05PTkNPTlRJRyBkZXNjcmlwdGlvbiBpbiBvcHRlZV9tc2cuaCBmb3IgZGV0YWlscy4KKyAgICAg Ki8KKyAgICB1aW50NjRfdCBzaXplOworICAgIGludCBwYWdlX29mZnNldDsKKyAgICBpbnQgbnVt X3BhZ2VzOworICAgIGludCBvcmRlcjsKKyAgICBpbnQgZW50cmllc19vbl9wYWdlID0gMDsKKyAg ICBwYWRkcl90IGdhZGRyOworICAgIG1mbl90IGd1ZXN0X21mbjsKKyAgICBzdHJ1Y3QgeworICAg ICAgICB1aW50NjRfdCBwYWdlc19saXN0W1BBR0VMSVNUX0VOVFJJRVNfUEVSX1BBR0VdOworICAg ICAgICB1aW50NjRfdCBuZXh0X3BhZ2VfZGF0YTsKKyAgICB9ICpwYWdlc19kYXRhX2d1ZXN0LCAq cGFnZXNfZGF0YV94ZW4sICpwYWdlc19kYXRhX3hlbl9zdGFydDsKKyAgICBzdHJ1Y3Qgc2htX2J1 ZiAqc2htX2J1ZjsKKworICAgIHBhZ2Vfb2Zmc2V0ID0gcGFyYW0tPnUudG1lbS5idWZfcHRyICYg KE9QVEVFX01TR19OT05DT05USUdfUEFHRV9TSVpFIC0gMSk7CisKKyAgICBzaXplID0gUk9VTkRV UChwYXJhbS0+dS50bWVtLnNpemUgKyBwYWdlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICBP UFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSk7CisKKyAgICBudW1fcGFnZXMgPSBESVZfUk9V TkRfVVAoc2l6ZSwgT1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUpOworCisgICAgb3JkZXIg PSBnZXRfb3JkZXJfZnJvbV9ieXRlcyhnZXRfcGFnZXNfbGlzdF9zaXplKG51bV9wYWdlcykpOwor CisgICAgcGFnZXNfZGF0YV94ZW5fc3RhcnQgPSBhbGxvY194ZW5oZWFwX3BhZ2VzKG9yZGVyLCAw KTsKKyAgICBpZiAoICFwYWdlc19kYXRhX3hlbl9zdGFydCApCisgICAgICAgIHJldHVybiBmYWxz ZTsKKworICAgIHNobV9idWYgPSBhbGxvY2F0ZV9zaG1fYnVmKGN0eCwgcGFyYW0tPnUudG1lbS5z aG1fcmVmLCBudW1fcGFnZXMpOworICAgIGlmICggIXNobV9idWYgKQorICAgICAgICBnb3RvIGVy cl9mcmVlOworCisgICAgZ2FkZHIgPSBwYXJhbS0+dS50bWVtLmJ1Zl9wdHIgJiB+KE9QVEVFX01T R19OT05DT05USUdfUEFHRV9TSVpFIC0gMSk7CisgICAgZ3Vlc3RfbWZuID0gbG9va3VwX2FuZF9w aW5fZ3Vlc3RfcmFtX2FkZHIoZ2FkZHIsIE5VTEwpOworICAgIGlmICggbWZuX2VxKGd1ZXN0X21m biwgSU5WQUxJRF9NRk4pICkKKyAgICAgICAgZ290byBlcnJfZnJlZTsKKworICAgIHBhZ2VzX2Rh dGFfZ3Vlc3QgPSBtYXBfZG9tYWluX3BhZ2UoZ3Vlc3RfbWZuKTsKKyAgICBpZiAoICFwYWdlc19k YXRhX2d1ZXN0ICkKKyAgICAgICAgZ290byBlcnJfZnJlZTsKKworICAgIHBhZ2VzX2RhdGFfeGVu ID0gcGFnZXNfZGF0YV94ZW5fc3RhcnQ7CisgICAgd2hpbGUgKCBudW1fcGFnZXMgKSB7CisgICAg ICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgICAgIG1mbl90IGVudHJ5X21mbiA9IGxv b2t1cF9hbmRfcGluX2d1ZXN0X3JhbV9hZGRyKAorICAgICAgICAgICAgcGFnZXNfZGF0YV9ndWVz dC0+cGFnZXNfbGlzdFtlbnRyaWVzX29uX3BhZ2VdLCAmcGFnZSk7CisKKyAgICAgICAgaWYgKCBt Zm5fZXEoZW50cnlfbWZuLCBJTlZBTElEX01GTikgKQorICAgICAgICAgICAgZ290byBlcnJfdW5t YXA7CisKKyAgICAgICAgc2htX2J1Zi0+cGFnZXNbc2htX2J1Zi0+cGFnZV9jbnQrK10gPSBwYWdl OworICAgICAgICBwYWdlc19kYXRhX3hlbi0+cGFnZXNfbGlzdFtlbnRyaWVzX29uX3BhZ2VdID0g bWZuX3RvX21hZGRyKGVudHJ5X21mbik7CisgICAgICAgIGVudHJpZXNfb25fcGFnZSsrOworCisg ICAgICAgIGlmICggZW50cmllc19vbl9wYWdlID09IFBBR0VMSVNUX0VOVFJJRVNfUEVSX1BBR0Ug KSB7CisgICAgICAgICAgICBwYWdlc19kYXRhX3hlbi0+bmV4dF9wYWdlX2RhdGEgPSB2aXJ0X3Rv X21hZGRyKHBhZ2VzX2RhdGFfeGVuICsgMSk7CisgICAgICAgICAgICBwYWdlc19kYXRhX3hlbisr OworICAgICAgICAgICAgZ2FkZHIgPSBwYWdlc19kYXRhX2d1ZXN0LT5uZXh0X3BhZ2VfZGF0YTsK KworICAgICAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocGFnZXNfZGF0YV9ndWVzdCk7CisgICAg ICAgICAgICB1bnBpbl9ndWVzdF9yYW1fYWRkcihndWVzdF9tZm4pOworCisgICAgICAgICAgICBn dWVzdF9tZm4gPSBsb29rdXBfYW5kX3Bpbl9ndWVzdF9yYW1fYWRkcihnYWRkciwgTlVMTCk7Cisg ICAgICAgICAgICBpZiAoIG1mbl9lcShndWVzdF9tZm4sIElOVkFMSURfTUZOKSApCisgICAgICAg ICAgICAgICAgZ290byBlcnJfZnJlZTsKKworICAgICAgICAgICAgcGFnZXNfZGF0YV9ndWVzdCA9 IG1hcF9kb21haW5fcGFnZShndWVzdF9tZm4pOworICAgICAgICAgICAgaWYgKCAhcGFnZXNfZGF0 YV9ndWVzdCApCisgICAgICAgICAgICAgICAgZ290byBlcnJfZnJlZTsKKyAgICAgICAgICAgIC8q IFJvbGwgb3ZlciB0byB0aGUgbmV4dCBwYWdlICovCisgICAgICAgICAgICBlbnRyaWVzX29uX3Bh Z2UgPSAwOworICAgICAgICB9CisgICAgICAgIG51bV9wYWdlcy0tOworICAgIH0KKworICAgIHBh cmFtLT51LnRtZW0uYnVmX3B0ciA9IHZpcnRfdG9fbWFkZHIocGFnZXNfZGF0YV94ZW5fc3RhcnQp IHwgcGFnZV9vZmZzZXQ7CisKKyAgICBjYWxsLT5ub25fY29udGlnW2lkeF0gPSBwYWdlc19kYXRh X3hlbl9zdGFydDsKKyAgICBjYWxsLT5ub25fY29udGlnX29yZGVyW2lkeF0gPSBvcmRlcjsKKwor ICAgIHVubWFwX2RvbWFpbl9wYWdlKHBhZ2VzX2RhdGFfZ3Vlc3QpOworICAgIHVucGluX2d1ZXN0 X3JhbV9hZGRyKGd1ZXN0X21mbik7CisgICAgcmV0dXJuIHRydWU7CisKK2Vycl91bm1hcDoKKyAg ICB1bm1hcF9kb21haW5fcGFnZShwYWdlc19kYXRhX2d1ZXN0KTsKKyAgICB1bnBpbl9ndWVzdF9y YW1fYWRkcihndWVzdF9tZm4pOworICAgIGZyZWVfc2htX2J1ZihjdHgsIHNobV9idWYtPmNvb2tp ZSk7CisKK2Vycl9mcmVlOgorICAgIGZyZWVfeGVuaGVhcF9wYWdlcyhwYWdlc19kYXRhX3hlbl9z dGFydCwgb3JkZXIpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCB0cmFu c2xhdGVfcGFyYW1zKHN0cnVjdCBkb21haW5fY3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzdGRfY2FsbF9jdHggKmNhbGwpCit7CisgICAgdW5zaWduZWQgaW50 IGk7CisgICAgdWludDMyX3QgYXR0cjsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgY2FsbC0+eGVu X2FyZy0+bnVtX3BhcmFtczsgaSsrICkgeworICAgICAgICBhdHRyID0gY2FsbC0+eGVuX2FyZy0+ cGFyYW1zW2ldLmF0dHI7CisKKyAgICAgICAgc3dpdGNoICggYXR0ciAmIE9QVEVFX01TR19BVFRS X1RZUEVfTUFTSyApIHsKKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RNRU1fSU5Q VVQ6CisgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9UTUVNX09VVFBVVDoKKyAgICAg ICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RNRU1fSU5PVVQ6CisgICAgICAgICAgICBpZiAo IGF0dHIgJiBPUFRFRV9NU0dfQVRUUl9OT05DT05USUcgKSB7CisgICAgICAgICAgICAgICAgaWYg KCAhdHJhbnNsYXRlX25vbmNvbnRpZyhjdHgsIGNhbGwsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjYWxsLT54ZW5fYXJnLT5wYXJhbXMgKyBpLCBpKSApCisgICAg ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGVsc2UgeworICAgICAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX1dBUk5JTkcsICJHdWVzdCB0 cmllcyB0byB1c2Ugb2xkIHRtZW0gYXJnXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPUFRF RV9NU0dfQVRUUl9UWVBFX05PTkU6CisgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9W QUxVRV9JTlBVVDoKKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX09VVFBV VDoKKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX0lOT1VUOgorICAgICAg ICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfUk1FTV9JTlBVVDoKKyAgICAgICAgY2FzZSBPUFRF RV9NU0dfQVRUUl9UWVBFX1JNRU1fT1VUUFVUOgorICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRS X1RZUEVfUk1FTV9JTk9VVDoKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg fQorICAgIHJldHVybiB0cnVlOworfQorCiAvKgogICogQ29weSBjb21tYW5kIGJ1ZmZlciBpbnRv IHhlbiBtZW1vcnkgdG86CiAgKiAxKSBIaWRlIHRyYW5zbGF0ZWQgYWRkcmVzc2VzIGZyb20gZ3Vl c3QKQEAgLTQ4OCw2ICs3MjIsMTUgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZV9zdGRfY2FsbChzdHJ1 Y3QgZG9tYWluX2N0eCAqY3R4LAogCiAgICAgY29weV9zdGRfcmVxdWVzdF9iYWNrKGN0eCwgcmVn cywgY2FsbCk7CiAKKyAgICAvKgorICAgICAqIElmIGd1ZXN0IHN1Y2Nlc3NmdWxseSB1bnJlZ2lz dGVyZWQgb3duIHNoYXJlZCBtZW1vcnksCisgICAgICogdGhlbiB3ZSBjYW4gdW5waW4gaXQncyBw YWdlcworICAgICAqLworICAgIGlmICggY2FsbC0+eGVuX2FyZy0+Y21kID09IE9QVEVFX01TR19D TURfVU5SRUdJU1RFUl9TSE0gJiYKKyAgICAgICAgIGNhbGwtPnhlbl9hcmctPnJldCA9PSAwICkg eworICAgICAgICBmcmVlX3NobV9idWYoY3R4LCBjYWxsLT54ZW5fYXJnLT5wYXJhbXNbMF0udS5y bWVtLnNobV9yZWYpOworICAgIH0KKwogICAgIGZyZWVfc3RkX2NhbGxfY3R4KGN0eCwgY2FsbCk7 CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTUyMiw3ICs3NjUsNyBAQCBzdGF0aWMgYm9vbCBoYW5k bGVfc3RkX2NhbGwoc3RydWN0IGRvbWFpbl9jdHggKmN0eCwgc3RydWN0IGNwdV91c2VyX3JlZ3Mg KnJlZ3MpCiAgICAgY2FzZSBPUFRFRV9NU0dfQ01EX0NBTkNFTDoKICAgICBjYXNlIE9QVEVFX01T R19DTURfUkVHSVNURVJfU0hNOgogICAgIGNhc2UgT1BURUVfTVNHX0NNRF9VTlJFR0lTVEVSX1NI TToKLSAgICAgICAgcmV0ID0gdHJ1ZTsKKyAgICAgICAgcmV0ID0gdHJhbnNsYXRlX3BhcmFtcyhj dHgsIGNhbGwpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICByZXQgPSBm YWxzZTsKLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVj dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1k ZXZlbA==