From mboxrd@z Thu Jan 1 00:00:00 1970 From: Volodymyr Babchuk Subject: [PATCH v2 07/13] optee: add std call handling Date: Mon, 3 Sep 2018 19:54:31 +0300 Message-ID: <1535993677-20816-8-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 TWFpbiB3YXkgdG8gY29tbXVuaWNhdGUgd2l0aCBPUC1URUUgaXMgdG8gaXNzdWUgc3RhbmRhcmQg U01DQ0MKY2FsbC4gIlN0YW5kYXJkIiBpcyBhIFNNQ0NDIHRlcm0gYW5kIGl0IG1lYW5zIHRoYXQg Y2FsbCBjYW4gYmUKaW50ZXJydXB0ZWQgYW5kIE9QLVRFRSBjYW4gcmV0dXJuIGNvbnRyb2wgdG8g TlcgYmVmb3JlIGNvbXBsZXRpbmcKdGhlIGNhbGwuCgpJbiBjb250cmFuc3Qgd2l0aCBmYXN0IGNh bGxzLCB3aGVyZSBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMKYXJlIHBhc3NlZCBpbiByZWdp c3RlcnMsIHN0YW5kYXJkIGNhbGxzIHVzZSBzaGFyZWQgbWVtb3J5LiBSZWdpc3RlcgpwYWlyIHIx LHIyIGhvbGRzIDY0LWJpdCBQQSBvZiBjb21tYW5kIGJ1ZmZlciwgd2hlcmUgYWxsIGFyZ3VtZW50 cwphcmUgc3RvcmVkIGFuZCB3aGljaCBpcyB1c2VkIHRvIHJldHVybiBkYXRhLiBPUC1URUUgaW50 ZXJuYWxseQpjb3BpZXMgY29udGVudHMgb2YgdGhpcyBidWZmZXIgaW50byBvd24gc2VjdXJlIG1l bW9yeSBiZWZvcmUgYWNjZXNzaW5nCmFuZCB2YWxpZGF0aW5nIGFueSBkYXRhIGluIGNvbW1hbmQg YnVmZmVyLiBUaGlzIGlzIGRvbmUgdG8gbWFrZSBzdXJlCnRoYXQgTlcgd2lsbCBub3QgY2hhbmdl IGNvbnRlbnRzIG9mIHRoZSB2YWxpZGF0ZWQgcGFyYW1ldGVycy4KCk1lZGlhdG9yIG5lZWRzIHRv IGRvIHRoZSBzYW1lIGZvciBudW1iZXIgb2YgcmVhc29uczoKCjEuIFRvIG1ha2Ugc3VyZSB0aGF0 IGd1ZXN0IHdpbGwgbm90IGNoYW5nZSBkYXRhIGFmdGVyIHZhbGlkYXRpb24uCjIuIFRvIHRyYW5z bGF0ZSBJUEFzIHRvIFBBcyBpbiB0aGUgY29tbWFuZCBidWZmZXIgKHRoaXMgaXMgbm90IGRvbmUK ICAgaW4gdGhpcyBwYXRjaCkuCjMuIFRvIGhpZGUgdHJhbnNsYXRlZCBhZGRyZXNzIGZyb20gZ3Vl c3QsIHNvIGl0IHdpbGwgbm90IGJlIGFibGUKICAgdG8gZG8gSVBBLT5QQSB0cmFuc2xhdGlvbiBi eSBtaXN1c2luZyBtZWRpYXRvci4KCkFsc28gbWVkaWF0b3IgcGlucyB0aGUgcGFnZSB3aXRoIG9y aWdpbmFsIGNvbW1hbmQgYnVmZmVyIGJlY2F1c2UKaXQgd2lsbCB3cml0ZSB0byBpdCBsYXRlciwg d2hlbiByZXR1cm5pbmcgcmVzcG9uc2UgZnJvbSBPUC1URUUuCgpEdXJpbmcgc3RhbmRhcmQgY2Fs bCBPUC1URUUgY2FuIGlzc3VlIG11bHRpcGxlICJSUEMgcmV0dXJucyIsIGFza2luZwpOVyB0byBk byBzb21lIHdvcmsgZm9yIE9QLVRFRS4gTlcgdGhlbiBpc3N1ZXMgc3BlY2lhbCBjYWxsCk9QVEVF X1NNQ19DQUxMX1JFVFVSTl9GUk9NX1JQQyB0byByZXN1bWUgaGFuZGxpbmcgb2YgdGhlIG9yaWdp bmFsIGNhbGwuClRodXMsIG1lZGlhdG9yIG5lZWRzIHRvIG1haW50YWluIGNvbnRleHQgZm9yIG9y aWdpbmFsIHN0YW5kYXJkIGNhbGwKZHVyaW5nIG11bHRpcGxlIFNNQ0NDIGNhbGxzLgoKU3RhbmRh cmQgY2FsbCBpcyBjb25zaWRlcmVkIGNvbXBsZXRlLCB3aGVuIHJldHVybmVkIHZhbHVlIGlzCm5v dCBSUEMgcmVxdWVzdC4KClNpZ25lZC1vZmYtYnk6IFZvbG9keW15ciBCYWJjaHVrIDx2b2xvZHlt eXJfYmFiY2h1a0BlcGFtLmNvbT4KLS0tCiB4ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMgfCAzMTkg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBj aGFuZ2VkLCAzMTYgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94 ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMgYi94ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMKaW5kZXgg Yzg5NWE5OS4uMTAwOGViYSAxMDA2NDQKLS0tIGEveGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5jCisr KyBiL3hlbi9hcmNoL2FybS90ZWUvb3B0ZWUuYwpAQCAtMTIsNiArMTIsNyBAQAogICovCiAKICNp bmNsdWRlIDx4ZW4vZGV2aWNlX3RyZWUuaD4KKyNpbmNsdWRlIDx4ZW4vZG9tYWluX3BhZ2UuaD4K ICNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vc21jY2MuaD4KICNpbmNsdWRl IDxhc20vdGVlL3RlZS5oPgpAQCAtMTksOSArMjAsMjcgQEAKICNpbmNsdWRlIDxhc20vdGVlL29w dGVlX21zZy5oPgogI2luY2x1ZGUgPGFzbS90ZWUvb3B0ZWVfc21jLmg+CiAKKyNkZWZpbmUgTUFY X1NURF9DQUxMUyAgIDE2CisKKy8qCisgKiBDYWxsIGNvbnRleHQuIE9QLVRFRSBjYW4gaXNzdWUg bXVsdGlwbGUgUlBDIHJldHVybnMgZHVyaW5nIG9uZSBjYWxsLgorICogV2UgbmVlZCB0byBwcmVz ZXJ2ZSBjb250ZXh0IGR1cmluZyB0aGVtLgorICovCitzdHJ1Y3Qgc3RkX2NhbGxfY3R4IHsKKyAg ICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisgICAgc3RydWN0IG9wdGVlX21zZ19hcmcgKmd1ZXN0 X2FyZzsKKyAgICBzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZyAqeGVuX2FyZzsKKyAgICBtZm5fdCBndWVz dF9hcmdfbWZuOworICAgIGludCBvcHRlZV90aHJlYWRfaWQ7CisgICAgaW50IHJwY19vcDsKK307 CisKIHN0cnVjdCBkb21haW5fY3R4IHsKICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisgICAg c3RydWN0IGxpc3RfaGVhZCBjYWxsX2N0eF9saXN0OwogICAgIHN0cnVjdCBkb21haW4gKmRvbWFp bjsKKyAgICBhdG9taWNfdCBjYWxsX2N0eF9jb3VudDsKKyAgICBzcGlubG9ja190IGxvY2s7CiB9 OwogCiBzdGF0aWMgTElTVF9IRUFEKGRvbWFpbl9jdHhfbGlzdCk7CkBAIC00OSw2ICs2OCw0NCBA QCBzdGF0aWMgYm9vbCBvcHRlZV9wcm9iZSh2b2lkKQogICAgIHJldHVybiB0cnVlOwogfQogCitz dGF0aWMgbWZuX3QgbG9va3VwX2FuZF9waW5fZ3Vlc3RfcmFtX2FkZHIocGFkZHJfdCBnYWRkciwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBhZ2Vf aW5mbyAqKnBnKQoreworICAgIG1mbl90IG1mbjsKKyAgICBnZm5fdCBnZm47CisgICAgcDJtX3R5 cGVfdCB0OworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgc3RydWN0IGRvbWFpbiAq ZCA9IGN1cnJlbnQtPmRvbWFpbjsKKworICAgIGdmbiA9IGdhZGRyX3RvX2dmbihnYWRkcik7Cisg ICAgbWZuID0gcDJtX2xvb2t1cChkLCBnZm4sICZ0KTsKKworICAgIGlmICggdCAhPSBwMm1fcmFt X3J3IHx8IG1mbl9lcShtZm4sIElOVkFMSURfTUZOKSApCisgICAgICAgIHJldHVybiBJTlZBTElE X01GTjsKKworICAgIHBhZ2UgPSBtZm5fdG9fcGFnZShtZm4pOworICAgIGlmICggIXBhZ2UgKQor ICAgICAgICByZXR1cm4gSU5WQUxJRF9NRk47CisKKyAgICBpZiAoICFnZXRfcGFnZShwYWdlLCBk KSApCisgICAgICAgIHJldHVybiBJTlZBTElEX01GTjsKKworICAgIGlmICggcGcgKQorICAgICAg ICAqcGcgPSBwYWdlOworCisgICAgcmV0dXJuIG1mbjsKK30KKworc3RhdGljIHZvaWQgdW5waW5f Z3Vlc3RfcmFtX2FkZHIobWZuX3QgbWZuKQoreworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7 CisgICAgcGFnZSA9IG1mbl90b19wYWdlKG1mbik7CisgICAgaWYgKCAhcGFnZSApCisgICAgICAg IHJldHVybjsKKworICAgIHB1dF9wYWdlKHBhZ2UpOworfQorCiBzdGF0aWMgc3RydWN0IGRvbWFp bl9jdHggKmZpbmRfZG9tYWluX2N0eChzdHJ1Y3QgZG9tYWluKiBkKQogewogICAgIHN0cnVjdCBk b21haW5fY3R4ICpjdHg7CkBAIC04Nyw2ICsxNDQsMTAgQEAgc3RhdGljIGludCBvcHRlZV9lbmFi bGUoc3RydWN0IGRvbWFpbiAqZCkKICAgICB9CiAKICAgICBjdHgtPmRvbWFpbiA9IGQ7CisgICAg SU5JVF9MSVNUX0hFQUQoJmN0eC0+Y2FsbF9jdHhfbGlzdCk7CisKKyAgICBhdG9taWNfc2V0KCZj dHgtPmNhbGxfY3R4X2NvdW50LCAwKTsKKyAgICBzcGluX2xvY2tfaW5pdCgmY3R4LT5sb2NrKTsK IAogICAgIHNwaW5fbG9jaygmZG9tYWluX2N0eF9saXN0X2xvY2spOwogICAgIGxpc3RfYWRkX3Rh aWwoJmN0eC0+bGlzdCwgJmRvbWFpbl9jdHhfbGlzdCk7CkBAIC0xMzQsMTEgKzE5NSw3MiBAQCBz dGF0aWMgdm9pZCBzZXRfcmV0dXJuKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLCB1aW50MzJf dCByZXQpCiAgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIDcsIDApOwogfQogCitzdGF0aWMgc3RydWN0 IHN0ZF9jYWxsX2N0eCAqYWxsb2NhdGVfc3RkX2NhbGxfY3R4KHN0cnVjdCBkb21haW5fY3R4ICpj dHgpCit7CisgICAgc3RydWN0IHN0ZF9jYWxsX2N0eCAqY2FsbDsKKyAgICBpbnQgY291bnQ7CisK KyAgICBjb3VudCA9IGF0b21pY19hZGRfdW5sZXNzKCZjdHgtPmNhbGxfY3R4X2NvdW50LCAxLCBN QVhfU1REX0NBTExTKTsKKyAgICBpZiAoIGNvdW50ID09IE1BWF9TVERfQ0FMTFMgKQorICAgICAg ICByZXR1cm4gTlVMTDsKKworICAgIGNhbGwgPSB4emFsbG9jKHN0cnVjdCBzdGRfY2FsbF9jdHgp OworICAgIGlmICggIWNhbGwgKSB7CisgICAgICAgIGF0b21pY19kZWMoJmN0eC0+Y2FsbF9jdHhf Y291bnQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjYWxsLT5vcHRlZV90 aHJlYWRfaWQgPSAtMTsKKworICAgIHNwaW5fbG9jaygmY3R4LT5sb2NrKTsKKyAgICBsaXN0X2Fk ZF90YWlsKCZjYWxsLT5saXN0LCAmY3R4LT5jYWxsX2N0eF9saXN0KTsKKyAgICBzcGluX3VubG9j aygmY3R4LT5sb2NrKTsKKworICAgIHJldHVybiBjYWxsOworfQorCitzdGF0aWMgdm9pZCBmcmVl X3N0ZF9jYWxsX2N0eChzdHJ1Y3QgZG9tYWluX2N0eCAqY3R4LCBzdHJ1Y3Qgc3RkX2NhbGxfY3R4 ICpjYWxsKQoreworICAgIGF0b21pY19kZWMoJmN0eC0+Y2FsbF9jdHhfY291bnQpOworCisgICAg c3Bpbl9sb2NrKCZjdHgtPmxvY2spOworICAgIGxpc3RfZGVsKCZjYWxsLT5saXN0KTsKKyAgICBz cGluX3VubG9jaygmY3R4LT5sb2NrKTsKKworICAgIGlmICggY2FsbC0+eGVuX2FyZyApCisgICAg ICAgIGZyZWVfeGVuaGVhcF9wYWdlKGNhbGwtPnhlbl9hcmcpOworCisgICAgaWYgKCBjYWxsLT5n dWVzdF9hcmcgKSB7CisgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlX2dsb2JhbChjYWxsLT5ndWVz dF9hcmcpOworICAgICAgICB1bnBpbl9ndWVzdF9yYW1fYWRkcihjYWxsLT5ndWVzdF9hcmdfbWZu KTsKKyAgICB9CisKKyAgICB4ZnJlZShjYWxsKTsKK30KKworc3RhdGljIHN0cnVjdCBzdGRfY2Fs bF9jdHggKmZpbmRfY2FsbF9jdHgoc3RydWN0IGRvbWFpbl9jdHggKmN0eCwgaW50IHRocmVhZF9p ZCkKK3sKKyAgICBzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICpjYWxsOworCisgICAgc3Bpbl9sb2NrKCZj dHgtPmxvY2spOworICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoIGNhbGwsICZjdHgtPmNhbGxfY3R4 X2xpc3QsIGxpc3QgKQorICAgIHsKKyAgICAgICAgaWYgKCBjYWxsLT5vcHRlZV90aHJlYWRfaWQg PT0gdGhyZWFkX2lkICkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZj dHgtPmxvY2spOworICAgICAgICAgICAgICAgIHJldHVybiBjYWxsOworICAgICAgICB9CisgICAg fQorICAgIHNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOworCisgICAgcmV0dXJuIE5VTEw7Cit9CiAK IHN0YXRpYyB2b2lkIG9wdGVlX2RvbWFpbl9kZXN0cm95KHN0cnVjdCBkb21haW4gKmQpCiB7CiAg ICAgc3RydWN0IGFybV9zbWNjY19yZXMgcmVzcDsKICAgICBzdHJ1Y3QgZG9tYWluX2N0eCAqY3R4 OworICAgIHN0cnVjdCBzdGRfY2FsbF9jdHggKmNhbGwsICpjYWxsX3RtcDsKICAgICBib29sIGZv dW5kID0gZmFsc2U7CiAKICAgICAvKiBBdCB0aGlzIHRpbWUgYWxsIGRvbWFpbiBWQ1BVcyBzaG91 bGQgYmUgc3RvcHBlZCAqLwpAQCAtMTYzLDkgKzI4NSwyMDEgQEAgc3RhdGljIHZvaWQgb3B0ZWVf ZG9tYWluX2Rlc3Ryb3koc3RydWN0IGRvbWFpbiAqZCkKICAgICBpZiAoICFmb3VuZCApCiAgICAg ICAgIHJldHVybjsKIAorICAgIEFTU0VSVCghc3Bpbl9pc19sb2NrZWQoJmN0eC0+bG9jaykpOwor CisgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKCBjYWxsLCBjYWxsX3RtcCwgJmN0eC0+Y2Fs bF9jdHhfbGlzdCwgbGlzdCApCisgICAgICAgIGZyZWVfc3RkX2NhbGxfY3R4KGN0eCwgY2FsbCk7 CisKKyAgICBBU1NFUlQoIWF0b21pY19yZWFkKCZjdHgtPmNhbGxfY3R4X2NvdW50KSk7CisKICAg ICB4ZnJlZShjdHgpOwogfQogCisvKgorICogQ29weSBjb21tYW5kIGJ1ZmZlciBpbnRvIHhlbiBt ZW1vcnkgdG86CisgKiAxKSBIaWRlIHRyYW5zbGF0ZWQgYWRkcmVzc2VzIGZyb20gZ3Vlc3QKKyAq IDIpIE1ha2Ugc3VyZSB0aGF0IGd1ZXN0IHdvdWxkbid0IGNoYW5nZSBkYXRhIGluIGNvbW1hbmQg YnVmZmVyIGR1cmluZyBjYWxsCisgKi8KK3N0YXRpYyBib29sIGNvcHlfc3RkX3JlcXVlc3Qoc3Ry dWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBzdGRfY2FsbF9jdHggKmNhbGwpCit7CisgICAgcGFkZHJfdCBjbWRfZ2FkZHIsIHhlbl9h ZGRyOworCisgICAgY21kX2dhZGRyID0gKHBhZGRyX3QpZ2V0X3VzZXJfcmVnKHJlZ3MsIDEpIDw8 IDMyIHwKKyAgICAgICAgZ2V0X3VzZXJfcmVnKHJlZ3MsIDIpOworCisgICAgLyoKKyAgICAgKiBD b21tYW5kIGJ1ZmZlciBzaG91bGQgc3RhcnQgYXQgcGFnZSBib3VuZGFyeS4KKyAgICAgKiBUaGlz IGlzIE9QLVRFRSBBQkkgcmVxdWlyZW1lbnQuCisgICAgICovCisgICAgaWYgKCBjbWRfZ2FkZHIg JiAoT1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUgLSAxKSApCisgICAgICAgIHJldHVybiBm YWxzZTsKKworICAgIGNhbGwtPmd1ZXN0X2FyZ19tZm4gPSBsb29rdXBfYW5kX3Bpbl9ndWVzdF9y YW1fYWRkcihjbWRfZ2FkZHIsIE5VTEwpOworICAgIGlmICggbWZuX2VxKGNhbGwtPmd1ZXN0X2Fy Z19tZm4sIElOVkFMSURfTUZOKSApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNhbGwt Pmd1ZXN0X2FyZyA9IG1hcF9kb21haW5fcGFnZV9nbG9iYWwoY2FsbC0+Z3Vlc3RfYXJnX21mbik7 CisgICAgaWYgKCAhY2FsbC0+Z3Vlc3RfYXJnICkgeworICAgICAgICB1bnBpbl9ndWVzdF9yYW1f YWRkcihjYWxsLT5ndWVzdF9hcmdfbWZuKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K KworICAgIGNhbGwtPnhlbl9hcmcgPSBhbGxvY194ZW5oZWFwX3BhZ2UoKTsKKyAgICBpZiAoICFj YWxsLT54ZW5fYXJnICkgeworICAgICAgICB1bnBpbl9ndWVzdF9yYW1fYWRkcihjYWxsLT5ndWVz dF9hcmdfbWZuKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1lbWNweShj YWxsLT54ZW5fYXJnLCBjYWxsLT5ndWVzdF9hcmcsIE9QVEVFX01TR19OT05DT05USUdfUEFHRV9T SVpFKTsKKworICAgIHhlbl9hZGRyID0gdmlydF90b19tYWRkcihjYWxsLT54ZW5fYXJnKTsKKwor ICAgIHNldF91c2VyX3JlZyhyZWdzLCAxLCB4ZW5fYWRkciA+PiAzMik7CisgICAgc2V0X3VzZXJf cmVnKHJlZ3MsIDIsIHhlbl9hZGRyICYgMHhGRkZGRkZGRik7CisKKyAgICByZXR1cm4gdHJ1ZTsK K30KKworc3RhdGljIGJvb2wgY29weV9zdGRfcmVxdWVzdF9iYWNrKHN0cnVjdCBkb21haW5fY3R4 ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNwdV91c2Vy X3JlZ3MgKnJlZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0 ZF9jYWxsX2N0eCAqY2FsbCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICB1aW50MzJfdCBh dHRyOworCisgICAgY2FsbC0+Z3Vlc3RfYXJnLT5yZXQgPSBjYWxsLT54ZW5fYXJnLT5yZXQ7Cisg ICAgY2FsbC0+Z3Vlc3RfYXJnLT5yZXRfb3JpZ2luID0gY2FsbC0+eGVuX2FyZy0+cmV0X29yaWdp bjsKKyAgICBjYWxsLT5ndWVzdF9hcmctPnNlc3Npb24gPSBjYWxsLT54ZW5fYXJnLT5zZXNzaW9u OworICAgIGZvciAoIGkgPSAwOyBpIDwgY2FsbC0+eGVuX2FyZy0+bnVtX3BhcmFtczsgaSsrICkg eworICAgICAgICBhdHRyID0gY2FsbC0+eGVuX2FyZy0+cGFyYW1zW2ldLmF0dHI7CisKKyAgICAg ICAgc3dpdGNoICggYXR0ciAmIE9QVEVFX01TR19BVFRSX1RZUEVfTUFTSyApIHsKKyAgICAgICAg Y2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RNRU1fT1VUUFVUOgorICAgICAgICBjYXNlIE9QVEVF X01TR19BVFRSX1RZUEVfVE1FTV9JTk9VVDoKKyAgICAgICAgICAgIGNhbGwtPmd1ZXN0X2FyZy0+ cGFyYW1zW2ldLnUudG1lbS5zaXplID0KKyAgICAgICAgICAgICAgICBjYWxsLT54ZW5fYXJnLT5w YXJhbXNbaV0udS50bWVtLnNpemU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2Fz ZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX09VVFBVVDoKKyAgICAgICAgY2FzZSBPUFRFRV9N U0dfQVRUUl9UWVBFX1ZBTFVFX0lOT1VUOgorICAgICAgICAgICAgY2FsbC0+Z3Vlc3RfYXJnLT5w YXJhbXNbaV0udS52YWx1ZS5hID0KKyAgICAgICAgICAgICAgICBjYWxsLT54ZW5fYXJnLT5wYXJh bXNbaV0udS52YWx1ZS5hOworICAgICAgICAgICAgY2FsbC0+Z3Vlc3RfYXJnLT5wYXJhbXNbaV0u dS52YWx1ZS5iID0KKyAgICAgICAgICAgICAgICBjYWxsLT54ZW5fYXJnLT5wYXJhbXNbaV0udS52 YWx1ZS5iOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgT1BURUVfTVNHX0FU VFJfVFlQRV9STUVNX09VVFBVVDoKKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JN RU1fSU5PVVQ6CisgICAgICAgICAgICBjYWxsLT5ndWVzdF9hcmctPnBhcmFtc1tpXS51LnJtZW0u c2l6ZSA9CisgICAgICAgICAgICAgICAgY2FsbC0+eGVuX2FyZy0+cGFyYW1zW2ldLnUucm1lbS5z aXplOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJf VFlQRV9OT05FOgorICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfUk1FTV9JTlBVVDoK KyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RNRU1fSU5QVVQ6CisgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitz dGF0aWMgYm9vbCBleGVjdXRlX3N0ZF9jYWxsKHN0cnVjdCBkb21haW5fY3R4ICpjdHgsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICpjYWxsKQorewor ICAgIHJlZ2lzdGVyX3Qgb3B0ZWVfcmV0OworCisgICAgZm9yd2FyZF9jYWxsKHJlZ3MpOworCisg ICAgb3B0ZWVfcmV0ID0gZ2V0X3VzZXJfcmVnKHJlZ3MsIDApOworICAgIGlmICggT1BURUVfU01D X1JFVFVSTl9JU19SUEMob3B0ZWVfcmV0KSApCisgICAgeworICAgICAgICBjYWxsLT5vcHRlZV90 aHJlYWRfaWQgPSBnZXRfdXNlcl9yZWcocmVncywgMyk7CisgICAgICAgIGNhbGwtPnJwY19vcCA9 IE9QVEVFX1NNQ19SRVRVUk5fR0VUX1JQQ19GVU5DKG9wdGVlX3JldCk7CisgICAgICAgIHJldHVy biB0cnVlOworICAgIH0KKworICAgIGNvcHlfc3RkX3JlcXVlc3RfYmFjayhjdHgsIHJlZ3MsIGNh bGwpOworCisgICAgZnJlZV9zdGRfY2FsbF9jdHgoY3R4LCBjYWxsKTsKKworICAgIHJldHVybiB0 cnVlOworfQorCitzdGF0aWMgYm9vbCBoYW5kbGVfc3RkX2NhbGwoc3RydWN0IGRvbWFpbl9jdHgg KmN0eCwgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCit7CisgICAgc3RydWN0IHN0ZF9jYWxs X2N0eCAqY2FsbDsKKyAgICBib29sIHJldDsKKworICAgIGNhbGwgPSBhbGxvY2F0ZV9zdGRfY2Fs bF9jdHgoY3R4KTsKKworICAgIGlmICghY2FsbCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg ICAgcmV0ID0gY29weV9zdGRfcmVxdWVzdChyZWdzLCBjYWxsKTsKKyAgICBpZiAoICFyZXQgKQor ICAgICAgICBnb3RvIG91dDsKKworICAgIC8qIE5vdyB3ZSBjYW4gc2FmZWx5IGV4YW1pbmUgY29u dGVudHMgb2YgY29tbWFuZCBidWZmZXIgKi8KKyAgICBpZiAoIE9QVEVFX01TR19HRVRfQVJHX1NJ WkUoY2FsbC0+eGVuX2FyZy0+bnVtX3BhcmFtcykgPgorICAgICAgICAgT1BURUVfTVNHX05PTkNP TlRJR19QQUdFX1NJWkUgKSB7CisgICAgICAgIHJldCA9IGZhbHNlOworICAgICAgICBnb3RvIG91 dDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKCBjYWxsLT54ZW5fYXJnLT5jbWQgKQorICAgIHsKKyAg ICBjYXNlIE9QVEVFX01TR19DTURfT1BFTl9TRVNTSU9OOgorICAgIGNhc2UgT1BURUVfTVNHX0NN RF9DTE9TRV9TRVNTSU9OOgorICAgIGNhc2UgT1BURUVfTVNHX0NNRF9JTlZPS0VfQ09NTUFORDoK KyAgICBjYXNlIE9QVEVFX01TR19DTURfQ0FOQ0VMOgorICAgIGNhc2UgT1BURUVfTVNHX0NNRF9S RUdJU1RFUl9TSE06CisgICAgY2FzZSBPUFRFRV9NU0dfQ01EX1VOUkVHSVNURVJfU0hNOgorICAg ICAgICByZXQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBy ZXQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgZ290byBvdXQ7CisK KyAgICByZXQgPSBleGVjdXRlX3N0ZF9jYWxsKGN0eCwgcmVncywgY2FsbCk7CisKK291dDoKKyAg ICBpZiAoIXJldCkKKyAgICAgICAgZnJlZV9zdGRfY2FsbF9jdHgoY3R4LCBjYWxsKTsKKworICAg IHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBib29sIGhhbmRsZV9ycGMoc3RydWN0IGRvbWFpbl9j dHggKmN0eCwgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCit7CisgICAgc3RydWN0IHN0ZF9j YWxsX2N0eCAqY2FsbDsKKworICAgIGludCBvcHRlZV90aHJlYWRfaWQgPSBnZXRfdXNlcl9yZWco cmVncywgMyk7CisKKyAgICBjYWxsID0gZmluZF9jYWxsX2N0eChjdHgsIG9wdGVlX3RocmVhZF9p ZCk7CisKKyAgICBpZiAoICFjYWxsICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dp dGNoICggY2FsbC0+cnBjX29wICkgeworICAgIGNhc2UgT1BURUVfU01DX1JQQ19GVU5DX0FMTE9D OgorICAgICAgICAvKiBUT0RPOiBBZGQgaGFuZGxpbmcgKi8KKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBPUFRFRV9TTUNfUlBDX0ZVTkNfRlJFRToKKyAgICAgICAgLyogVE9ETzogQWRkIGhhbmRs aW5nICovCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1BURUVfU01DX1JQQ19GVU5DX0ZPUkVJ R05fSU5UUjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPUFRFRV9TTUNfUlBDX0ZVTkNfQ01E OgorICAgICAgICAvKiBUT0RPOiBBZGQgaGFuZGxpbmcgKi8KKyAgICAgICAgYnJlYWs7CisgICAg fQorCisgICAgcmV0dXJuIGV4ZWN1dGVfc3RkX2NhbGwoY3R4LCByZWdzLCBjYWxsKTsKK30KKwog c3RhdGljIGJvb2wgaGFuZGxlX2V4Y2hhbmdlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgY3B1X3VzZXJf cmVncyAqcmVncykKIHsKICAgICB1aW50MzJfdCBjYXBzOwpAQCAtMjI1LDEwICs1MzksOSBAQCBz dGF0aWMgYm9vbCBvcHRlZV9oYW5kbGVfY2FsbChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykK ICAgICBjYXNlIE9QVEVFX1NNQ19FWENIQU5HRV9DQVBBQklMSVRJRVM6CiAgICAgICAgIHJldHVy biBoYW5kbGVfZXhjaGFuZ2VfY2FwYWJpbGl0aWVzKHJlZ3MpOwogICAgIGNhc2UgT1BURUVfU01D X0NBTExfV0lUSF9BUkc6CisgICAgICAgIHJldHVybiBoYW5kbGVfc3RkX2NhbGwoY3R4LCByZWdz KTsKICAgICBjYXNlIE9QVEVFX1NNQ19DQUxMX1JFVFVSTl9GUk9NX1JQQzoKLSAgICAgICAgLyog VE9ETzogQWRkIHByb3BlciBoYW5kbGluZyBmb3IgdGhpcyBjYWxscyAqLwotICAgICAgICBmb3J3 YXJkX2NhbGwocmVncyk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gaGFu ZGxlX3JwYyhjdHgsIHJlZ3MpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsK ICAgICB9Ci0tIAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2pl Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4t ZGV2ZWw=